基于matlab的字符定位与分割
matlab源代码及相关资源 百度网盘地址:
链接: https://pan.baidu.com/s/18MMYlYwmpGC3CZaD-mUmzg 提取码: iv5s 复制这段内容后打开百度网盘手机App,操作更方便哦
首先,先查阅一下相关的书籍和论文和网站博客,看看别人是怎样做的,为什么这样做。尽管大家都提出了一套似乎完美的解决方案,但复现的时候,效果太差,有时候真的怀疑这些论文是不是造假。大概了解整个流程之后,集中精力去修改里面效果不好的方法,用其他能用的方法和技巧去做,最终下来发现,代码大部分都是自己写的。为了方便显示思路,每张图都加上了标题,是思路。
字符分割部分:
分析:选红色光源的图像,灰度化后受阴影的影响最小,使用高斯滤波的效果并不明显,所以干脆不用了,中值滤波会把字符滤掉一部分,所以也不用,调整图像的大小为【1900 2000】,调整图像的大小是为了更好的定位,使算法适用不同大小的输入图像。之后绘制直方图是要人工确定二值化阈值(这里确定为50)。
分析:二值化之后取反,第一次初步定位,之后进行膨胀处理,膨胀的目的是,让字符连接起来,和使字符更加清晰。
经过8次膨胀后发现字符基本连起来,再膨胀就会连成块,之后进行倾斜矫正,第二次分割:通过分别横向和纵向的像素求和,如果整行(n)或整列(n)的像素值之和等于0,(n+1)行或列不等于0,则n行或n列确定上下两部分的分界线,目的是方便后面进一步分割成单个字符。后面再分割成单个字符原理与之相同。
通过纵向扫描分割成单个字符,为字符识别的模板匹配算法提供待检测图样,切割完图像之后,将图像矩阵的全零行去掉,然后将图像转化为统一尺寸【60 100】。