function ret=growseed() %=====區域生長算法======== %input :二值圖像數據 %output:邊界點二值圖像數據 global I;global M; global N;global Y;global T;global newy;global newx;%==邊界點x,y坐標 %獲取多張圖片的二值數據 tempI=draw(); %tempI 36*45*numbertotal count=length(tempI(1,1,:)); wide=length(tempI(:,1,1));%36 high=length(tempI(1,:,1));%45 result=zeros(wide,high,count); for k=1:count I=tempI(:,:,k); % figure,imshow(I),title('原始圖像') I=double(I); [M,N]=size(I); [seedx,seedy]=searchseed(I); Y=zeros(M,N); %作一個全零與原圖像等大的圖像矩陣Y,作為輸出圖像矩陣 T=zeros(M,N);%標記點。。。 newx=0;newy=0; calseed(seedx,seedy); figure,imshow(Y); % if k>1&&k<count % result(:,:,k)=Y; % figure,imshow(Y); % else % result(:,:,k)=T; % % imshow(T); % % figure,imshow(T); % end end ret=result; end function calseed(seedx,seedy) global M; global N; global Y; global I; global newx; global newy; global T; for i = -1 : 1 for j = -1 : 1 newseedx = seedx + i; newseedy = seedy+ j; %生長准則:判斷生長點8鄰域內像素的各自灰度值是否與生長點所在像素灰度值相等 if newseedx> 0 && newseedx <= M && newseedy > 0 && newseedy <= N &&T(newseedx,newseedy)==0&&I(newseedx,newseedy)==1 T(newseedx,newseedy)=1; if isequal(newseedx,newseedy)==1 calseed(newseedx,newseedy); else Y(newx,newy)=1;%set邊界點值為1 end end end end end function ret=isequal(x,y)%====判斷點的領域是否相等 %===輸入1個點的x,y坐標 %==返回1 相等 global I; global newx; global newy; global M; global N; ret=1; tag=0; for i = -1 : 1 if tag==0 for j = -1 : 1 if x+i> 0 && x+i <= M && y+j > 0 && y+j <= N if I( x+i,y+j)==0 ret=0; tag=1; newx=x+i; newy=y+j; end end end end end end function [x,y]=searchseed(I) %=========尋找種子點===== %Input:一張二值數據的圖片 %Output:返回種子點的x,y坐標 %======求數據為1的質心==== [M,N]=size(I); corx=0; cory=0; count=0; for i=1:M for j=1:N if I(i,j)==1 corx=corx+i; cory=cory+j; count=count+1; end end end x=round(corx/count); y=round(cory/count); end
處理結果