Hessian矩阵的特征向量和特征值
问题描述:
我想提取容器中的中心线像素。起初,我使用ginput(1)命令在接近血管边缘处选择了一个种子点。这提供了起点并指定了需要执行分析的船只段上的感兴趣区域(ROI)。Hessian矩阵的特征向量和特征值
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代码为下面的问题” 对于容器内的一个点,对应于最大 特征值特征向量是正常的边缘和那些对应于最小特征值的点指向沿着血管的方向
方向上具有最大变化的圆上的前两个连续向量被认为是反映血管边界的像素,跟踪方向上的点是作为后续小组的中心。重复这一过程g提供船只边界的估计。
如何计算Hessian矩阵的最大特征值及其相应的特征向量,以便如上所述选择新的种子点。
感谢您的回复。我使用eig2image.m来查找图像上每个点的特征向量(在我的图像中,同心圆区域上有灰度值,背景为黑色)。
[Lambda1,Lambda2,Ix,Iy]=eig2image(Dxx,Dxy,Dyy)
其中Ix和Iy是最大的特征向量。
但是当我尝试使用绘制特征向量:
quiver(Ix, Iy)
我还可以看到在黑色的背景应该是零向量!
你可以请回复我怎么能在图像的顶部绘制特征向量。
答
假设Dxx, Dyy, Dxy
在Itry
尺寸size(Itry)
那么对于一个给定的点(m,n)
的二阶偏导数的矩阵可以这样做:
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。
感谢您的回复。我用过eig2image。(在我的图像中,在同心圆形区域上有灰度值,背景是黑色的):在图像上的每个点上找到特征向量(在我的图像中,同心圆形区域上有灰度值,背景为黑色): [λ1,λ2,Ix,Iy] = eig2image(Dxx,Dxy, Dyy) 其中Ix和Iy是最大的特征向量。 但是当我尝试绘制使用以下特征向量: 颤抖(Ix,Iy)。 我也可以在黑色背景上看到应该为零的向量!! .............. 请问您可以回复我如何绘制图像顶部的特征向量。 – Dev 2012-08-15 17:34:12
这可能有助于绘制矢量和矢量方向覆盖在图像上http://*.com/questions/10416918 – gevang 2012-08-15 19:20:58
@gevang感谢tipps! “eig2image”函数输出与最小特征值相关的特征向量的坐标([[Ix Iy]),对吗?如果我们想从最大的“特征值”中获得特征向量怎么办? – Tin 2014-02-03 14:58:37