?? 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 + -