簡體   English   中英

如何從圖像坐標轉換為笛卡爾坐標

[英]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和其他一些體積可視化工具繪制圖像,但是從這些繪制中我仍然有很多驚喜。

  1. 該代碼已編寫為符合圖像坐標系(例如,請參見:vertexCoords),它是我假定的左手坐標系。 盡管如此,圖像仍顯示在笛卡爾(右手)坐標系中。 我試圖將其顯示為下圖,但這完全沒有發生。
  2. 我想知道是否已經編寫了可視化功能來以它們的方式顯示圖像。

圖像坐標系: 圖像坐標系

展望未來,我還要編寫代碼的其他方面,例如,如果我有上面的輸入圖像sphereVoxels ,除了對其進行可視化之外,我還想在其中找到北,東南,西,頂部和底部的位置圖像,以及頂點的數量和計數坐標,以及更多。

我預計,如果我不堅持使用一個坐標系,這可能會使我感到困惑,並且考慮到可視化工具主要使用右手坐標系,因此我從一開始就希望堅持使用。 但是,我真的不知道該怎么做。

右側坐標系:

右手坐標系

有什么建議可以解決這個問題嗎?

調用meshgridxy軸的尺寸會切換(與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM