条形码完整度检测算法开发笔记01(08.31)

来源:互联网 发布:qq密码账号数据库泄露 编辑:程序博客网 时间:2024/06/05 03:22


博客已转移至个人网站(http://www.hust.site)


条形码完整度检测算法开发笔记01(08.31)

大体思路如下:

先用自适阈值化图像(要求光照基本均匀,无高亮反射斑,背景变化不剧烈),然后提取联通分量,用滤波法提取出一些特征点(或者焦点检测算子提取),这些特征点基本属于条码矩形上下交点,然后用霍夫变换的方法检测直线(角度不好时需要两条,如果是曲面上的也可以通过霍夫变换检测该曲线),这条直线垂直于条形码条纹,根据这条直线读出条形码内容,然后在每个Y上都读取一次,能读出一致内容就OK,否则就有缺陷,然后找出缺陷位置


这里重新定义了缺损、不完整等概念,完整并非完全一样,而是能识别及完整(事实上由于环境光、背景噪声、拍摄重复性的关系,即使是同一个条码也常常得不出一样的二值图像,所以按照工业需求能识别即可)


以后在此基础上深入研究环境光照和复杂背景


当前进度:



1.首先读入图像


2.然后阈值化


3.提取联通分量,得到条形码所在区域


4.画几条直线,扫描这几条直线,完成条形码解码


在如下文所示的代码中获取读取条码信息,暂时未进行解码,参见下文


5.再通过滤波法,检测条状的角点


6.通过霍夫变换找到垂直于条形码黑条的直线


7.由6所得直线的方向,通过逐行扫描的方法,对每一行进行解码


8.对比7与4的解码结果,判别完整性


9.对缺损进行分析,复原条形码


当前进度:

%Read data from diskf = imread('barcode.jpg');figure('Name','Source Image');imshow(f);g = im2bw(f);figure('Name','BW Image');imshow(g);%Get aimed area[L,num] = bwlabel(g,4);maxarea = 0;maxindex =0;for i = 1:num    temp = length( find(L==i) );    if(temp > maxarea)        maxarea = temp;        maxindex = i;    endendimg = (L == maxindex);figure('Name','Aimed Image');imshow(img);%Read the bar code      ar = fix( size(img,1)/2 );j = 0;for i = 1:( size(img,2) - 1 )    if( img(ar,i) ~= img(ar,i+1) )        j = j+1;        chg(j) = i;    endendfor i = 1:(j-1)    gap(i) = chg(i+1) - chg(i);endclear f g temp ar L chg i j maxarea maxindex num

完成条码初步读取,下一步进行条码的解码

0 0
原创粉丝点击