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

基于hough变换的条形码数字分割和数字识别matlab仿真

时间:2023/1/28 20:38:36 点击:

  核心提示:A308,包括程序操作录像...

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

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

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

点击店铺

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

2.部分仿真图预览




3.算法概述

       霍夫变换是一种特征提取(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的算法流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

4.部分源码

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

Thetaa=180*xmax/xsize;

Thetab=90-Thetaa;

bw1=imrotate(B,Thetab,'bicubic');

figure(7);

imshow(bw1);title('纠正后的二值图')

BW1=imrotate(BW,Thetab,'bicubic');

figure(8);

imshow(BW1);title('纠正后的边缘图')

[p,q]=size(BW1);

m=0;

for y=ceil(p/2):p

    for x=1:q

        if BW1(y,x)==1

            m=m+1

        else m=m

        end

    end

    if m<60

        y1=y

        break

    else m=0

    end

end

n=0;

for yl=floor(p/2):-1:1

    for xl=1:q

        if BW1(yl,xl)==1

            n=n+1

        else n=n

        end

    end

    if n<60

        y2=yl

        break

    else n=0

    end

end

BW2=imcrop(BW1,[1,y2,q,y1-y2]);

figure(9);imshow(BW2);title('上下分割')

bw2=imcrop(bw1,[1,y2,q,y1-y2]);

figure(10);imshow(bw2);title('上下分割')

[a,b]=size(BW2);

k=0

for yi=1:a

    for xi=1:ceil(b/3)

        if BW2(yi,xi)==1

            k=k+1

            A(k)=xi 

        else k=k

        end

    end

    K=k

    for c=1:K-4

        L1=A(c+4)-A(c+3);

        L2=A(c+3)-A(c+2);

        L3=A(c+2)-A(c+1);

        L4=A(c+1)-A(c);

        L=(L1+L2+L3)/3

        if (L2/L1)>0.5&(L2/L1)<1.5&(L3/L2)>0.5&(L3/L2)<1.5&(L4/L)>9

            C=c

            xx1=A(C)+1

            break

        else k=0

            continue

        end

    end  

end

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

k = 1;

for i=1:59  

    if rem(i,2)

        for j=1:bar_int(i)  

            bar_01(k) = 1;

            k = k+1;

        end

    else

        for j=1:bar_int(i)  

            bar_01(k) = 0;

            k = k+1;

        end

    end

end

if ((bar_01(1)&&~bar_01(2)&&bar_01(3))...   

        &&(~bar_01(46)&&bar_01(47)&&~bar_01(48)&&bar_01(49)&&~bar_01(50))...   

        &&(bar_01(95)&&~bar_01(94)&&bar_01(93)))    

    l = 1;

    for i=1:6  

        bar_left(l) = 0;

        for k=1:7

            bar_left(l) = bar_left(l)+bar_01(7*(i-1)+k+3)*(2^(7-k));

        end

        l = l+1;

    end

    l = 1;

    for i=1:6   

        bar_right(l) = 0;

        for k=1:7

            bar_right(l) = bar_right(l)+bar_01(7*(i+6)+k+1)*(2^(7-k));

            k = k-1;

        end

        l = l+1;

    end

end

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

a308

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