⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fenlitiqu.m

📁 提取图片中数字的MATLAB程序
💻 M
字号:
bw0=imread('d:\MATLAB7\work\sxt5.bmp');
flag=islogical(bw0);
    if(flag==0),bw=im2bw(bw0,0.5);
        else bw=bw0;
    end
bw1=bw;
[B,L]=bwboundaries(bw,4);

gs=0;
c1=zeros(1,100);
c2=zeros(1,100);
c3=zeros(1,100);
c4=zeros(1,100);                        %找到每个连通域的质心
stats=regionprops(L,'Area','Centroid'); %循环历遍每个连通域的边界
    for k=1:length(B)                   %获取一条边界上的所有点
        boundary=B{k};
        h=boundary(1,1);
        w=boundary(1,2);                %获取边界所围面积
area=stats(k).Area;
    if(bw(h,w)==0&area>6)               %提取该连通域所对应在二值图像中的矩形区域
        goalboundary=boundary;
        s=min(goalboundary,[],1);
        e=max(goalboundary,[],1);
            for i=0:(e(2)-s(2)),bw1(s(1),s(2)+i)=0;bw1(e(1),s(2)+i)=0;
            end
                for i=0:(e(1)-s(1)),bw1(s(1)+i,s(2))=0;bw1(s(1)+i,e(2))=0;
                end
        gs=gs+1;
        c1(gs)=s(1);c2(gs)=s(2);c3(gs)=e(1);c4(gs)=e(2);
    end
end
sl=gs;
        for i=1:gs
            for j=1:gs
                if((c1(i)>c1(j))&(c1(i)<c3(j))&(c2(i)>c2(j))&(c2(i)<c4(j)))|((c1(i)>c1(j))&(c1(i)<c3(j))&(c4(i)>c2(j))&(c4(i)<c4(j)))|((c3(i)>c1(j))&(c3(i)<c3(j))&(c2(i)>c2(j))&(c2(i)<c4(j)))|((c3(i)>c1(j))&(c3(i)<c3(j))&(c4(i)>c2(j))&(c4(i)<c4(j)))
                    xg1=c3(i)-c1(j);xg2=c3(j)-c3(i);xg3=c2(i)-c2(j);xg4=c4(j)-c2(i);
                    if(xg1/xg2)>0&(xg1/xg2)<1&(xg3/xg4)>1
                        for k=0:(c4(i)-c2(i)),bw1(c1(i),c2(i)+k)=bw(c1(i),c2(i)+k);
                            bw1(c3(i),c2(i)+k)=bw(c3(i),c2(i)+k);
                        end
                            for k=0:(c3(i)-c1(i)),bw1(c1(i)+k,c2(i))=bw(c1(i)+k,c2(i));
                                    bw1(c1(i)+k,c4(i))=bw(c1(i)+k,c4(i));
                            end
                                 for k=0:(c4(j)-c2(j)),bw1(c1(j),c2(j)+k)=bw(c1(j),c2(j)+k);
                                    bw1(c3(j),c2(j)+k)=bw(c3(j),c2(j)+k);
                                 end
                                     for k=0:(c3(j)-c1(j)),bw1(c1(j)+k,c2(j))=bw(c1(j)+k,c2(j));
                                           bw1(c1(j)+k,c4(j))=bw(c1(j)+k,c4(j));
                                     end
                            d1=min(c1(i),c1(j));d2=min(c2(i),c2(j));d3=max(c3(i),c3(j));
d4=max(c4(i),c4(j));
                            for k=0:(d4-d2),bw1(d1,d2+k)=0;bw1(d3,d2+k)=0;
                            end
                            for k=0:(d3-d1),bw1(d1+k,d2)=0;bw1(d1+k,d4)=0;
                            end
                              sl=sl-1;
                    end
                end
            end
        end
figure,imshow(bw1);
imwrite(bw1,'D:\MATLAB7\work\sxt3.bmp','bmp');
sl                              %显示分离出来的数字总数
                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -