您现在的位置:首页 >> 图像处理 >> 内容

通过Otsu算法实现条形码的角度矫正matlab仿真

时间:2023/1/27 22:23:14 点击:

  核心提示:A304,包括程序操作录像+说明文档...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y56Ymphx

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览

3.算法概述

       条码的检测在自动化数据采集中占重要地位,原始的采集均为一维采集,即利用红外光线等扫描器进行扫描,需要人工的进行对准,不仅费时,而且浪费人力,随着现代的摄像技术的不断发展,现在的条码可以直接通过摄像机采集整个的条码图像,然后利用计算机图像处理的技术识读条码,通过现代图像处理技术,对条码图像进行定位、分割、校正、识别。

       对于条码的识别,由于采集的是条码的图像,这些图像往往包含了很多的信息,其他的一些字符,还有就是图像的质量都会对识别产生比较大的影响,所以识别的关键就在于将条码区域分割出来,对于分割条码,针对图像的特征,对于条码,纹理是条码的一个显著的特征,Jain等人研究了基于Gabor小波纹理分析的条码检测,Arnould等人利用梯度特征进行条码检测,在这里,本文针对条码图像的特征,将图像分成多个子区域,然后利用子区域的对比度,还有方向边缘强度等特征筛选出可能包含条码的图像子区域,然后利用图像的合并和补偿最终得到条码区域,得到条码区域后再利用hough变换,得到条码的倾斜方向,进而进行理想的校正,为条码的识别提供最好的图像。

4.部分源码

..................................................................

block_size=32;

k=1;

threshold=240; 

 

grayimg=rgb2gray(origimg);

[M,N]=size(grayimg);  %原图像大小

waitimg=imcrop(grayimg,[0 0 N-mod(N,block_size) M-mod(M,block_size)]);%待检图像

imshow(waitimg);

MM=floor(M/block_size);

NN=floor(N/block_size);

blockimg=mat2cell(waitimg,ones(MM,1)*block_size,ones(NN,1)*block_size); %将原图像分块成32x32

 

%特征检测

contrast_pixel=zeros(MM,NN);

Edge_num=zeros(MM,NN);

barcode_region=zeros(MM,NN);

for i=1:MM

    for j=1:NN

        contrast_pixel(i,j)=Contrast(blockimg{i,j},block_size);  %对比度计算

        if contrast_pixel(i,j)>50

            barcode_region(i,j)=1;

        end

    end

end

%标记目标区域,补偿后得到条码区

[L,num] = bwlabel(barcode_region,8);

C2=matrix_hist(L,num);

[Max_num,Max_Label]=max(C2);

for i=1:MM

    for j=1:NN

        if L(i,j)~=Max_Label

            blockimg{i,j}=0*blockimg{i,j};

        end

    end

end

waited_img=cell2mat(blockimg);

imshow(waited_img);

%提取出目标图像

[left,right,top,bottom]=Get_destimg(waited_img);

width=right-left;

height=bottom-top;

barcodeimg=imcrop(waitimg,[left,top,width,height]);

destimg=imcrop(waitimg,[left+width/2-50,top+height/2-50,100,100]);

%hough检测倾角

Binaryimg=Otsu(destimg);    %二值化

edgeimg=edge(Binaryimg,'canny');   %边缘

theta=houghtheta(edgeimg)

%矫正图像

%h=imrotate(barcodeimg,theta,'bilinear');

h=rotate(barcodeimg,theta*3.1415926/180);

A304

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168