我想在容器中提取中心线像素。起初,我使用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)
我还可以看到黑色背景上的矢量应为零!!
请回答我如何在图像顶部绘制特征向量。
答案 0 :(得分: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。