我从下面的简单代码中生成了这个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,除了可视化它之外,我还想在图像中找到北、东南、西、顶和底部的位置,以及顶点的数量和数量,再加上更多。
我预计,如果我不坚持一个坐标系,这可能会让我感到困惑。考虑到可视化工具主要使用的是右手坐标系,我想从一开始就坚持这样做。不过,我真的不知道怎样做。
右手坐标系:

有什么建议来解决这个问题吗?
发布于 2017-05-11 21:20:09
当您调用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(:)];https://stackoverflow.com/questions/43920925
复制相似问题