1. 程式人生 > >matlab影象處理--區域生長法

matlab影象處理--區域生長法

區域生長法:區域生長是按照事先定義的生長準則一個畫素或者子區域逐步聚合成一個完整獨立的連通區域過程。對於影象感興趣目標區域R,z為區域R上事先發現的種子點,按照規定的生長準則逐步將與種子點z一定鄰域內符合相似性的畫素合併成一個種子群以備下一階段的生長,這樣不斷的進行迴圈生長直到滿足生長停止條件為止,從而完成了對感興趣區域由一個種子點生長為一個獨立連通區域的過程(引用)

 

 

區域生長演算法一般分為三個步驟實現:

 

(1)    確定生長種子點      

 

(2)    規定生長準則

 

(3)    確定生長停止條件     

 

 

 

注意:確定生長種子點,即要獲得種子點的座標,使用[y,x]=getpts獲取

      規定生長準則,即確定是四領域法還是八領域法。四領域法:種子點與上下左右四個畫素的灰度值比較。八領域法:種子點與周圍八個畫素的灰度值做比較。

      確定生長停止條件:一般把不再增加新的符合生長條件的點  的時候作為停止條件。

      在生長過程中,並不是把事先確定的種子點的灰度值一直作為標準。而是把不斷擴大的區域的灰度均值作為判斷標準。

 

matlab程式如下:

I=imread('C:\Users\zhang\Desktop\2.png');
figure;subplot(121);imshow(I);title('原始影象');
I=double(I);              %轉換為灰度值是0-1的雙精度
[M,N]=size(I);            %得到原影象的行列數
[y,x]=getpts;             %獲得區域生長起始點
x1=round(x);              %橫座標取整
y1=round(y);              %縱座標取整
seed=I(x1,y1);            %將生長起始點灰度值存入seed中
Y=zeros(M,N);             %作一個全零與原影象等大的影象矩陣Y,作為輸出影象矩陣
Y(x1,y1)=1;               %將Y中與所取點相對應位置的點設定為白點
sum=seed;                 %儲存符合區域生長條件的點的灰度值的總和
suit=1;                   %儲存符合區域生長條件的點的總個數
count=1;                  %每次判斷一點周圍八點符合條件的新點的數目
threshold=10;             %域值,即某一點與周圍八點的絕對差值要小於閾值
while count>0             %判斷是否有新的符合生長條件的點,若沒有,則結束
s=0;                      %判斷一點周圍八點時,符合條件的新點的灰度值之和
count=0;
for i=1:M
   for j=1:N
     if Y(i,j)==1
      if (i-1)>0 && (i+1)<(M+1) && (j-1)>0 && (j+1)<(N+1) %判斷此點是否為影象邊界上的點
       for u= -1:1                                        %判斷點周圍八點是否符合域值條件
        for v= -1:1                                       %u,v為偏移量
          if  Y(i+u,j+v)==0 && abs(I(i+u,j+v)-seed)<=threshold%判斷是否未存在於輸出矩陣Y,並且為符合域值條件的點
             Y(i+u,j+v)=1;                                %符合以上兩條件即將其在Y中與之位置對應的點設定為白點
             count=count+1;                               %新的、符合生長條件的點的總個數
             s=s+I(i+u,j+v);                              %新的、符合生長條件的點的總灰度數
          end
        end  
       end
      end
     end
   end
end
suit=suit+count;                                   %目前區域所有符合生長條件的點的總個數
sum=sum+s;                                         %目前區域所有符合生長條件的點的總灰度值
seed=sum/suit;                                     %計算新的灰度平均值
end

subplot(122);imshow(Y);title('分割後圖像');

 

執行程式後,滑鼠右鍵點選圖片黑色區域