2

Matlabで「適応型流域セグメンテーション」を実装したいと考えています。 このアルゴリズムには6つのステップがあります。入力はfigure(a)、結果はfigure(d)です。 私のコードに間違いがあるかどうかを確認するのを手伝ってください、私は第六のステップをどのように実装するのか分かりません。 ありがとうございました!Matlabで適応的な流域セグメンテーションを実装する

Input image

Result image

ロード画像:

input_image = imread('test.gif'); 

ステップ1:各(x、y)に計算D(x、y)は、バイナリのユークリッド距離マップを得ますM(x、y)の各値を0とする。

DT = bwdist(input_image,'euclidean'); % Trandform distance:Euclidian distance 
[h,w]=size(DT); 
M = zeros(h,w); 

ステップ2 :ガウスフィルタを使用して距離マップを平滑化して、隣接する最大値をマージし、D(x、y)が極大であればM(x、y)を1に設定し、距離マップのマーカマップを取得する。

H = fspecial('gaussian'); 
gfDT = imfilter(DT,H); 
M = imregionalmax(gfDT); % maker map, M = local maximum of gfDT 

ステップ3:ピクセルごとにマーカーマップをスキャンします。 M(x0、y0)が1の場合、その近傍のスプリアスの最大値を半径D(x、y)で求める.M(x、y)が1でsqr((x-x0)^ 2 + D(x、y)が<D(x0、y0)ならば、M(x、y)を0とする。

for x0 = 1:h 
    for y0 = 1:w 
     if M(x0,y0) == 1 
      r = ceil(gfDT(x0,y0)); 

      % range begin:(x0-r,y0-r) end:(x0+r,y0+r) 
      xb = x0-r; 
      if xb <= 0 
       xb =1; 
      end 

      yb = y0-r; 
      if yb <= 0 
       yb =1; 
      end 

      xe = x0+r; 
      if xe > w 
      xe = w; 
      end 

      ye = y0+r; 
      if ye > h 
       ye = h; 
      end 

      for x = yb:ye 
       for y = xb:xe 
        if M(x,y)==1 
         Pos = [x0,y0 ;x,y]; 
         Dis = pdist(Pos,'euclidean'); 
         IFA = Dis<= (gfDT(x0,y0)); 
         IFB = gfDT(x,y)<gfDT(x0,y0); 
         if (IFA && IFB) 
          M(x,y) = 0; 
         end 
        end 
       end 
      end 
     end 
    end 
end 

ステップ4:

は、距離マップの逆数を計算し、極大値が極小であることが判明します。

igfDT = -(gfDT); 

STEP5:

セグメント距離マップ従来の流域アルゴリズムによってマーカに係る2値画像のセグメンテーションを得ます。

I2 = imimposemin(igfDT,M); 
L = watershed(I2); 
igfDT (L==0)=0; 

ステップ6:直線で流域線の両端を結ぶ直線に沿ったピクセルを再分類することによって流域線をまっすぐ。

私は

答えて

1

てみ距離変換してから変換流域、この手順を実装する方法がわかりません。

im=imread('n6BRI.gif'); 

imb=bwdist(im); 

sigma=3; 
kernel = fspecial('gaussian',4*sigma+1,sigma); 
im2=imfilter(imb,kernel,'symmetric'); 

L = watershed(max(im2(:))-im2); 
[x,y]=find(L==0); 

lblImg = bwlabel(L&~im); 

figure,imshow(label2rgb(lblImg,'jet','k','shuffle')); 

enter image description here