1

血管内の中心線ピクセルを抽出したい。最初に、ginput(1)コマンドを使用して、血管の端に近いシードポイントを選択しました。これは開始点を提供し、分析を実行する必要がある血管セグメントの関心領域(ROI)を指定します。

figure; imshow(Igreen_eq); % Main green channel Image
p = ginput(1); 

次に、選択されたシードポイントは、円が反対側のエッジと交差しないように、直径が血管の予想される直径よりも小さい円の中心として機能します。

t = 0:pi/20:2*pi;
d = 0.8*15; %d=80% of minwidthOfVessel so that it wont intesect with opposite edge;
R0=d/2;%radius
xi = R0*cos(t)+p(1);
yi = R0*sin(t)+p(2);
line(xi,yi,'LineWidth',2,'Color',[0 1 0]);
roimask = poly2mask(double(xi), double(yi), size(Igreen_eq,1), size(Igreen_eq,2));
figure; imshow(roimask) % Binary image of region selected
Itry = Igreen_eq; 
Itry(~roimask ) = 0;  
imshow(Itry);
Itry = im2double(Itry);
line(xi, yi,'LineWidth', 2, 'Color', [0 1 0]);
hold on; plot(p(1), p(2),'*r') 

問題:この円の円周上の光強度に対してヘッセ行列を計算し、固有ベクトルを取得する必要があります。私は以下を使用してDxx、Dyy、Dxyを計算しました:

[Dxx,Dxy,Dyy] = Hessian2D(Itry,2); %(sigma=2)

次の問題のためにMATLABでコードを書く必要があります。」血管内の点の場合、最大の固有値に対応する固有ベクトルはエッジに垂直であり、最小の固有値に対応する固有ベクトルは血管に沿った方向を指します。

方向が最大に変化する円上の最初の2つの連続するベクトルは、血管の境界を反映するピクセルと見なされます。追跡方向のポイントは、後続の円の中心と見なされます。このプロセスを繰り返すと、血管境界の推定値が得られます。

上記のように、最大​​の固有値とそれに対応するヘッセ行列の固有ベクトルを計算して、新しいシードポイントを選択するにはどうすればよいですか。


お返事をありがとうございます 。eig2image.mを使用して、画像の各ポイントで固有ベクトルを見つけました(私の画像では、同心円領域に灰色の値があり、背景は黒です)。

[Lambda1,Lambda2,Ix,Iy]=eig2image(Dxx,Dxy,Dyy)

ここで、IxとIyは最大の固有ベクトルです。
しかし、:を使用して固有ベクトルをプロットしようとすると、

quiver(Ix, Iy)

ゼロになるはずの黒い背景のベクトルも見ることができます!!

画像の上部に固有ベクトルをプロットする方法を教えてください。

4

1 に答える 1

3

Dxx, Dyy, Dxy次元の2次偏導関数の行列であると仮定するとsize(Itry)、の特定の点(m,n)に対して次のItryことができます。

H = [Dxx(m,n) Dxy(m,n); Dxy(m,n) Dyy(m,n)];
[V,D] = eig(H); % check by H*V = V*D;
eigenVal1 = D(1,1); 
eigenVal2 = D(2,2);
eigenVec1 = V(1,:); 
eigenVec2 = V(2,:);

この局所固有分解により、大きさに従って並べ替えることができる固有値(および対応する固有ベクトル)が得られます。画像ポイント間でループするか、よりコンパクトなソリューションについては、 FileExchangeのeig2image.mを参照してください。

于 2012-08-14T22:19:30.480 に答える