Transforming an image coordinate to circle coordinates
所以我正在尝试将普通正方形 x,y 坐标的图像坐标转换为圆形坐标,如下所示。
为此,正方形图像的中心必须是圆坐标系中的原点为0。
在 Matlab 中,他们有一个名为"cart2pol"的函数,其中:
但是,x,y 参数是圆坐标,因此在使用 cart2pol 之前,我如何将普通的方形坐标系转换为圆形坐标系?
- stackoverflow.com/questions/20924085/... 并且有帮助吗?它在 python 中,您仍然可以轻松地将代码转换为 matlab 吗?
-
However, the x,y argument are the circular coordinates - 不,他们不是。它们是笛卡尔(正方形)坐标。纠正这个误解后还有疑问吗?
-
"然而,x,y 参数是圆坐标" ...根本不是,实际上相反:在完整形式中,[theta,rho] = cart2pol(x,y);、x 和 y 是笛卡尔坐标(输入),并且该函数将返回 theta 和 rho 作为极坐标(在输出中)。这正是您要问的。
-
"正方形图像的中心必须是圆坐标系中为 0 的原点"... 所以在调用 cart2pol 之前从笛卡尔坐标中减去中心,如 [i - floor(N/2), j - floor(N/2)]。
我认为您应该能够使用 cart2pol(x,y),它为您提供一些笛卡尔输入 x 和 y 的极坐标 (2d) 或圆柱 (3d) 坐标(以及圆柱坐标的 z)。
第一张图片中的坐标:i,j。第二张图片中的坐标:theta, rho.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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 2pi 或 0 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/M;和 -1 1/N:2/N:1-1/N;?
-
我认为这个公式仅用于-1:1之间的线性间距。而且我假设这个区域的不同间距也会起作用。但我对这些多项式没有经验,所以不能肯定。