【问题标题】:Transforming an image coordinate to circle coordinates将图像坐标转换为圆坐标
【发布时间】:2019-08-28 02:10:21
【问题描述】:

所以我正在尝试将普通正方形 x,y 坐标的图像坐标转换为圆形坐标,如下所示。

为此,正方形图像的中心必须是圆坐标系中的原点,即 0。

在 Matlab 中,他们有一个名为“cart2pol”的函数,其中:

cart2pol(x,y)

但是,x,y 参数是圆坐标,因此在使用 cart2pol 之前,如何将普通的方形坐标系转换为圆形坐标系?

【问题讨论】:

  • stackoverflow.com/questions/20924085/… andy 有帮助吗?它在python中,您仍然可以轻松地将代码转换为matlab吗?
  • However, the x,y argument are the circular coordinates - 不,他们不是。它们是笛卡尔(正方形)坐标。纠正这个误解后还有问题吗?
  • "但是,x,y 参数是圆坐标" ...根本不是,实际上相反:以完整形式 [theta,rho] = cart2pol(x,y);, xy笛卡尔 坐标(输入),函数将返回thetarho 作为极坐标 坐标(输出)。这正是您要问的。
  • "正方形图像的中心必须是圆坐标系中为0的原点"...所以在调用cart2pol之前从笛卡尔坐标中减去中心,如[i - floor(N/2), j - floor(N/2)]

标签: image matlab image-processing


【解决方案1】:

我认为您应该能够使用cart2pol(x,y),它为您提供一些笛卡尔输入xy(以及z 用于圆柱)的极坐标(2d)或圆柱(3d)坐标。

第一张图片中的坐标:ij。第二张图片中的坐标:thetarho

N = 400; % example: 400x400 pixels

% shift origin into center
% Matlab uses 1 to N indexing not 0 to N-1
xo = (N)/2; % center of image
yo = (N)/2;

% Define some sample points in the image (coords from top-left of image)
% 0 deg, 90 deg, 180 deg, 270 deg
i = [350 200 50 200];
j = [200 1 200 350];

% get polar coordinates from cartesian ones (theta in radians)
% -(j-yo) due to opposite direction of j to mathematical positive direction of coord.system
[theta, rho] = cart2pol(i-xo, -(j-yo));
rho = rho/(N/2); % scaling for unit circle

theta-pi to pi 范围内,所以如果您需要0 to 2pi0 to 360,您仍然需要进行映射。

【讨论】:

  • 谢谢。查看github.com/amirtahmasbi/matlab-zernike-moments/blob/master/… 中的第 84 行到第 89 行,我注意到他在第 85 行和第 86 行预定义了 x 和 y 的范围。现在,如果我的 M 和 N 都是 8,并且我打印第 85 行和第 86 行,为什么范围一样吗?
  • 不过我知道,他试图压缩 -1 和 1 之间的范围,但有什么理由坚持使用公式 -1+1/M:2/M:1-1/米;和-1+1/N:2/N:1-1/N;?
  • 我认为这个公式只是用于 -1:1 之间的线性间距。而且我假设这个区域的不同间距也会起作用。但我对这些多项式没有经验,所以不能肯定。
猜你喜欢
  • 2013-09-22
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 2016-04-14
相关资源
最近更新 更多