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


博客已转移至个人网站(http://www.p-chao.com)


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

大体思路如下:

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


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


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


当前进度:



1.首先读入图像


2.然后阈值化


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


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


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


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


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


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


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


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


当前进度:

%Read data from disk
f = 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;
    end
end
img = (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;
    end
end
for i = 1:(j-1)
    gap(i) = chg(i+1) - chg(i);
end

clear f g temp ar L chg i j maxarea maxindex num

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值