我從以下簡單代碼生成此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
和其他一些卷可視化工具繪製圖像,但仍然是我從圖中不少驚喜。
- 該代碼已被寫入符合圖像座標系(例如參見:vertexCoords),這是我所假定的左手座標系。儘管如此,圖像顯示在笛卡爾(右手)座標系中。我試圖看到如下圖所示,但根本沒有發生。
- 我想知道如果可視化功能已被寫入顯示圖像的方式,他們做。
展望未來,有我寫,例如,如果我有一個輸入圖像sphereVoxels
如上述,除了可視化它的代碼的其它方面,我想要查找圖像中的北,東南,西,頂部和底部位置,以及數量和計算頂點的座標以及更多。
我預計如果我不堅持一個座標系統,並且考慮到可視化工具主要使用右手座標系統,我可能會對此產生困惑,我想從一開始就堅持這一點。但是,我真的不知道如何去做這件事。
右手座標系:
任何建議通過它來獲取?
你想改變軸的方向嗎? 'set(gca,'XDir','reverse','YDir','reverse');'在這段代碼的結尾爲你工作? – user2999345
嗨,謝謝。這實際上只改變軸的方向,因此隻影響可視化。我想要的是一個永久性的轉換,例如,如果我想找到一個位置的像素值,我會使用'P(x,y,z)',而不是'P(y,x,z)'。 – User1333