首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将图像坐标转换为笛卡尔坐标

如何将图像坐标转换为笛卡尔坐标
EN

Stack Overflow用户
提问于 2017-05-11 16:23:34
回答 1查看 1K关注 0票数 0

我从下面的简单代码中生成了这个3D图像。

代码语言:javascript
复制
% 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,除了可视化它之外,我还想在图像中找到北、东南、西、顶和底部的位置,以及顶点的数量和数量,再加上更多。

我预计,如果我不坚持一个坐标系,这可能会让我感到困惑。考虑到可视化工具主要使用的是右手坐标系,我想从一开始就坚持这样做。不过,我真的不知道怎样做。

右手坐标系:

有什么建议来解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-11 21:20:09

当您调用meshgrid时,维度xy轴将被切换(与ndgrid相反)。例如,在您的示例中,这意味着rowsInImage是一个[120x100x200] = [x,y,z]数组,而不是[100x120x200] = [y,x,z]数组,即使meshgrid是按y,x,z顺序调用的参数。我会将这两行修改为经典的x,y,z顺序:

代码语言:javascript
复制
[columnsInImage, rowsInImage, pagesInImage] = meshgrid(1:imageSizeX, 1:imageSizeY, 1:imageSizeZ);
vertexCoords = [columnsInImage(:), rowsInImage(:), pagesInImage(:)];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43920925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档