[英]How to convert from the image coordinates to Cartesian coordinates
我有從下面的簡單代碼生成的3D圖像。
% Input Image size
imageSizeY = 200;
imageSizeX = 120;
imageSizeZ = 100;
%# create coordinates
[rowsInImage, columnsInImage, pagesInImage] = meshgrid(1:imageSizeY, 1:imageSizeX, 1:imageSizeZ);
%# get coordinate array of vertices
vertexCoords = [rowsInImage(:), columnsInImage(:), pagesInImage(:)];
centerY = imageSizeY/2;
centerX = imageSizeX/2;
centerZ = imageSizeZ/2;
radius = 28;
%# calculate distance from center of the cube
sphereVoxels = (rowsInImage - centerY).^2 + (columnsInImage - centerX).^2 + (pagesInImage - centerZ).^2 <= radius.^2;
%# Now, display it using an isosurface and a patch
fv = isosurface(sphereVoxels,0);
patch(fv,'FaceColor',[0 0 .7],'EdgeColor',[0 0 1]); title('Binary volume of a sphere');
view(45,45);
axis equal;
grid on;
xlabel('x-axis [pixels]'); ylabel('y-axis [pixels]'); zlabel('z-axis [pixels]')
我曾嘗試使用isosurface
和其他一些體積可視化工具繪制圖像,但是從這些繪制中我仍然有很多驚喜。
展望未來,我還要編寫代碼的其他方面,例如,如果我有上面的輸入圖像sphereVoxels
,除了對其進行可視化之外,我還想在其中找到北,東南,西,頂部和底部的位置圖像,以及頂點的數量和計數坐標,以及更多。
我預計,如果我不堅持使用一個坐標系,這可能會使我感到困惑,並且考慮到可視化工具主要使用右手坐標系,因此我從一開始就希望堅持使用。 但是,我真的不知道該怎么做。
右側坐標系:
有什么建議可以解決這個問題嗎?
調用meshgrid
, x
和y
軸的尺寸會切換(與ndgrid
相反)。 例如,在你的情況下,這意味着rowsInImage
是[120x100x200] = [x,y,z]
數組而不是[100x120x200] = [y,x,z]
數組即使meshgrid
被稱為與在參數y,x,z
順序。 我將這兩行更改為經典的x,y,z
順序:
[columnsInImage, rowsInImage, pagesInImage] = meshgrid(1:imageSizeX, 1:imageSizeY, 1:imageSizeZ);
vertexCoords = [columnsInImage(:), rowsInImage(:), pagesInImage(:)];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.