二维码的识别
一、目的与要求
本课题主要研究二维条码的识别程序及译码方法,使用C语言来开发二维码的识别程序。
查找并阅读相关资料,了解基本的内容,利用需求分析文档,对整个系统有个初步的架构。搜寻实验用的文件文档集和研究过程中用到的各种工具软件。根据已有的资料并借助面向对象的程序设计思想对系统各模块进行分析、建模、设计。使用C语言来开发二维码识别程序。
二、设计的内容
本文主要来完成二维码识别和译码程序,运用图像校正、二值化、边缘检测等各种图像处理方法实现条码的预处理,并进行二维码码的解码,结合图像处理技术,完成了基于图像处理的二维码快速识别的解码系统。
三、总体方案设计
本设计的主要任务是在研究二维条码的码制标准的基础上实现对二维码的告诉采集与识别,详细分析二维码的基本特点、符号结构;在条码图像识别方面,研究了对采集的条码图像进行预处理的方法,即:对图像进行整形。运用图像校正、二值化、去噪、边缘检测、Hough变换、图像旋转等多种图像处理方法实现条码图像的预处理、条码定位、条码分割和数据提取。对预处理后的条码图像进行译码。
四、各个功能模块的主要实现程序
(一) 二维码的识别流程
灰度化
去噪
二值化
寻找探测图形
确定旋转角度
定位
旋转
获得数据
首先,对采集的彩色图像进行灰度化,以提高后继的运行速度。
其次,去除噪声。采用十字形中值滤波去除噪音对二码图像的干扰主要是盐粒噪声。
再次,利用灰度直方图工具,使用迭代法选取适当的阈值,对二维码进行二值化处理,使其变为白底黑色条码。
最后,确定二维码的位置探测图形,对条码进行定位,旋转至水平后,获得条码数据,以便下一步进行解码。
(二)图像的灰度化
灰度化的常用方法有两种:
(i,j) = * R(i,j) + * G(i,j) + * B(i,j)
(i,j) = [30 * R(i,j) + 59 * G(i,j) + 11 * B(i,j)]/100
本设计进行灰度化的实现函数如下:
internal virtual void imageToGrayScale(int[][] image)
{
for (int y = 0; y < image[0].Length; y++)
{
for (int x = 0; x < ; x++)
{
int r = image[x][y] >> 16 & 0xFF;
int g = image[x][y] >> 8 & 0xFF;
int b = image[x][y] & 0xFF;
int m = (r * 30 + g * 59 + b * 11) / 100;
image[x][y] = m;
}
}
(三)图像的降噪处理
降噪的方法很多,选用的是中值滤波法,因为中值滤波是一种非线性平滑滤波器。中值滤波在降低噪声的同时,又可以保持图像的细节,使用中值滤波时能较好保护图像的边缘。
中值滤波的滤波窗口的形状和尺寸对滤波效果有一定的影响。常用的中值滤波窗口形状一般为正方形、十字形等。就一般经验而言,对于有缓慢变化的较长轮廓线物体的图像,适合使用正方形窗口;对于包含尖角物
二维码识别 来自淘豆网m.daumloan.com转载请标明出处.