一.预处理步骤
获取主程序传递的图像数据,然后对图像预处理,预处理包括灰度处理和几何校正,其中的灰度处理的过程是: 1.1灰度化
1.2中值滤波
1.3 二值化
1.4 几何校正处理结果:
大家在二值化后的图中可以发现该图像并不是“正”的,此时我们需要对其进行几何矫正。
几何校正的过程:
1.5 设置采样点
1.6 采集条形码的黑色条码坐标
1.7 通过采样点的坐标差异来决定几何校正的角度。(如果实时识别的话为了节约计算机的算力,可以认为的干预图像的位置,手动摆正几即可)
几何校正函数: imrotate
当图像预处理完成后,则进行图像条形码的识别阶段。处理过程主要是利用五个采样点采集的数据。五个采样点都要图像采集一遍,按行采集。采集完后,程序将提取样条数据,在每一次提取中程序都会去掉五个采集点中最小数据和最大数据,然后对剩下的三个的数据进行后期处理。
先判断采集点是否采集到59个样条(一维条形码除去左、右侧空白区,共有95个模块,本文涉及的59样条是指黑白样条个数,而一维条形码中的95个模块是指每个黑白条占得标准模块个数相加的和),是59则继续读数据处理,不是则调用函数退回等待主程序再次传递图像。
当为59个样条时,就对提取获得的数据求平均值,然后储存到一个矩阵中。 示例:
上图值为1的是条形码中黑色样条含有像素个数,值为0的是条形码中白色样条含有像素个数。下图是把上图读取的黑白样条像素个数的一维图像显示。
最后根据一维条形码的编码规则编写出解码算法。把获得的矩阵带入解码算法中,通过对比校准,最终得到人能识别的阿拉伯数字码