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') 

问题:要计算该圆圆周上的光强度的 Hessian 矩阵,并且必须获得特征向量。我计算了 Dxx,Dyy,Dxy 使用:

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

我需要在 MATLAB 中编写代码来解决以下问题“对于容器内的一个点,对应于最大特征值的特征向量垂直于边缘,对应于最小特征值的特征向量指向沿血管的方向。

圆上具有最大方向变化的前两个连续向量被认为是反映血管边界的像素。跟踪方向上的点被认为是后续圆的中心。重复这个过程给出了血管边界的估计。

如上所述,我将如何计算 Hessian 矩阵的最大特征值及其对应的特征向量来选择新的种子点。


感谢您的回复 。我使用 eig2image.m 来查找图像上每个点的特征向量(在我的图像中,同心圆区域有灰度值,背景为黑色)。

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

其中 Ix 和 Iy 是最大的特征向量。
但是当我尝试使用以下方法绘制特征向量时:

quiver(Ix, Iy)

我还可以看到黑色背景上的向量应该为零!

您能否回复我如何在图像顶部绘制特征向量。

4

1 回答 1

3

假设Dxx, Dyy, Dxy是维度的二阶偏导数矩阵,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 回答