📄 fenlitiqu.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 + -