Plot the principle axes from regionprops3 over an isoplot of an ellipsoid
9 ビュー (過去 30 日間)
古いコメントを表示
I have a problem where I have a binary image stack which I process with regionprops3. I can recover the principle axes directions and scaling from this function but when I plot them the output does not appear to be related to the ellipsoid at all. I have tried plotting both the rows and columns of the eigenvector matrix from regionprops3 but nothing seems to work.
As an example:
%%Example Code
x = 0:1:100
y = 0:1:100
z = 0:1:100
dx = .1
[X,Y,Z] = meshgrid(x,y,z);
%Define an ellipse
ell = 1*(X-50).^2 + 100*(Y-50).^2 + 3*(Z-50).^2 + 3*(Z-50).*(X-50) < 500 ;
T = regionprops3(ell ,'PrincipalAxisLength', 'Orientation' , 'centroid','EigenVectors','EigenValues')
c=T.Centroid
%Principle axes ?
axis_mat= ( (T.EigenVectors{1}) *(diag( (T.PrincipalAxisLength) ) ) )
%plot principle axis vectors
figure(1)
quiver3(c(1),c(2) ,c(3) , axis_mat(1,1),axis_mat(2,1),axis_mat(3,1))
hold on
quiver3(c(1),c(2) ,c(3), axis_mat(1,2),axis_mat(2,2),axis_mat(3,2))
quiver3(c(1),c(2) ,c(3), axis_mat(1,3),axis_mat(2,3),axis_mat(3 ,3))
xlim( [0,100] )
ylim( [0,100 ] )
zlim( [0,100 ] )
xlabel('X')
ylabel('Y' )
zlabel('Z')
%plot ellipsoid
isosurface(X,Y,Z,(ell),1 - 1e-6)
alpha(.2)
0 件のコメント
回答 (1 件)
Yash
2024 年 2 月 13 日
The issue with your code is that the quiver3 function expects the direction vectors to be normalized. In your code, you are directly using the eigenvectors as the direction vectors, which are not normalized. To fix this, you need to normalize the eigenvectors before plotting them. You can normalize the eigenvectors using the vecnorm function before plotting them with quiver3.
% Normalize the eigenvectors
axis_mat = axis_mat ./ vecnorm(axis_mat);
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Axis Labels についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!