- #1
RickF-
- 1
- 0
Hi,
I'k looking at some MATLAB code specifically eig2image.m at:
http://www.mathworks.com/matlabcent...angi-vesselness-filter/content/FrangiFilter2D
So, I understand how the computations are done with respect to the eigenvector / eigenvalues and using (varitions of ) the quadratic equation etc. But my question is about the computation of the eigenvector using the following code (based on the MATLAB code) given matrix [a b; b d];
%% My code, just a scalar version of eig2image.m for understanding eigenvector decomposition
M = [1,2;2,3];
function [ L1,L2,v1x,v1y,v2x,v2y ] = SymmetricEig( M )
% | a b |
% | |
% | b d |
a = M(1,1);
b = M(1,2);
d = M(2,2);
tmp = sqrt((a - d)^2 + 4*b^2);
v2x = 2*b;
v2y = d - a + tmp;
% Normalize
mag = sqrt(v2x^2 + v2y^2);
v2x = v2x/mag; %% Why is v2x now the correct eigenvector value?
v2y = v2y/mag;
% The eigenvectors are orthogonal
v1x = -v2y;
v1y = v2x;
% Compute the eigenvalues
mu1 = 0.5*(a + d + tmp);
mu2 = 0.5*(a + d - tmp);
% Sort eigen values by absolute value abs(Lambda1)<abs(Lambda2)
check=abs(mu1)>abs(mu2);
L1=mu1;
L1(check)=mu2(check);
L2=mu2;
L2(check)=mu1(check);
Ix=v1x;
Ix(check)=v2x(check);
Iy=v1y;
Iy(check)=v2y(check);
end
Notice my comment above - Why is v2x now the correct eigenvector value? It was b multiplied by two and then normalized to the magnitude of v2x,v2y; Why does this work? (and it does). It must be a shortcut, factorization, etc. but I don't see it and haven't seen anyplace else that does this.
I'm just curious.
Thanks
Rick
I'k looking at some MATLAB code specifically eig2image.m at:
http://www.mathworks.com/matlabcent...angi-vesselness-filter/content/FrangiFilter2D
So, I understand how the computations are done with respect to the eigenvector / eigenvalues and using (varitions of ) the quadratic equation etc. But my question is about the computation of the eigenvector using the following code (based on the MATLAB code) given matrix [a b; b d];
%% My code, just a scalar version of eig2image.m for understanding eigenvector decomposition
M = [1,2;2,3];
function [ L1,L2,v1x,v1y,v2x,v2y ] = SymmetricEig( M )
% | a b |
% | |
% | b d |
a = M(1,1);
b = M(1,2);
d = M(2,2);
tmp = sqrt((a - d)^2 + 4*b^2);
v2x = 2*b;
v2y = d - a + tmp;
% Normalize
mag = sqrt(v2x^2 + v2y^2);
v2x = v2x/mag; %% Why is v2x now the correct eigenvector value?
v2y = v2y/mag;
% The eigenvectors are orthogonal
v1x = -v2y;
v1y = v2x;
% Compute the eigenvalues
mu1 = 0.5*(a + d + tmp);
mu2 = 0.5*(a + d - tmp);
% Sort eigen values by absolute value abs(Lambda1)<abs(Lambda2)
check=abs(mu1)>abs(mu2);
L1=mu1;
L1(check)=mu2(check);
L2=mu2;
L2(check)=mu1(check);
Ix=v1x;
Ix(check)=v2x(check);
Iy=v1y;
Iy(check)=v2y(check);
end
Notice my comment above - Why is v2x now the correct eigenvector value? It was b multiplied by two and then normalized to the magnitude of v2x,v2y; Why does this work? (and it does). It must be a shortcut, factorization, etc. but I don't see it and haven't seen anyplace else that does this.
I'm just curious.
Thanks
Rick