将图像从笛卡尔坐标转换为极坐标

罗特姆·埃拉哈

我正在尝试将具有多个具有相同中心的圆的图像从笛卡尔坐标转换为极坐标(以便新图像将是圆,但是是线而不是圆,请参见下面的图像),并且使用以下代码:

[r, c] = size(img);
r=floor(r/2);
c=floor(c/2);
[X, Y] = meshgrid(-c:c-1,-r:r-1);
[theta, rho] = cart2pol(X, Y); 
subplot(221), imshow(img), axis on;
hold on;
subplot(221), plot(xCenter,yCenter, 'r+');
subplot(222), warp(theta, rho, zeros(size(theta)), img);
view(2), axis square;

问题是,我不明白为什么它还能起作用?(显然,这不是我的代码),我的意思是,当我使用功能cart2pol时,我什至没有使用图像,这只是从meshgrid函数生成的一些向量x和y ..另一个问题是,我想以某种方式拥有一个新图像(不仅仅是能够使用wrap函数绘制图像),它是原始图像,但是通过theta和rho坐标(意味着相同的像素,但已重新排列)...我什至不确定如何问这个,最后,我想要一个图像,它是一个矩阵,以便我可以对每一行求和并将矩阵转换为列向量...

例子

Suever

您可以将图像视为2D矩阵,其中每个像素都有X和Y坐标

[(1,1)    (1,2)    (1,3)   ....   (1,c)]
[(2,1)    (2,2)    (2,3)   ....   (2,c)]
[(3,1)    (3,2)    (3,3)   ....   (3,c)]
[....     ....     ....    ....   .... ]
[(r,1)    (r,2)    (r,3)   ....   (r,c)]

在您发布的代码中,它将这些(X,Y)坐标中的每个坐标都使用图像的中心floor(c/2)floor(r/2)作为参考点映射为其等效的极坐标(R,theta)

% Map pixel value at (1,1) to it's polar equivalent
[r,theta] = cart2pol(1 - floor(r/2),1 - floor(c/2));

因此,无论用于(1,1)的像素值如何,现在都应该出现在的新极坐标空间中(r,theta)重要的是要注意,进行此转换时,与图像中实际像素值无关的任何信息都很重要,而我们只想对图像中的每个像素执行此转换。

所以首先我们弄清楚图像的中心在哪里:

[r, c] = size(img);
r = floor(r / 2);
c = floor(c / 2);

然后我们计算出图像中每个点的(X,Y)坐标(在减去中心之后

[X, Y] = meshgrid(-c:c-1,-r:r-1);

现在将所有这些笛卡尔点转换为极坐标

[theta, rho] = cart2pol(X, Y); 

所有经线现在呢,是说“显示的数值img为(X,Y)在其相应的位置(θ表示RHO)”

warp(theta, rho, zeros(size(theta)), img);

现在看来,您想要一个尺寸为[nTheta,nRho]的新2D图像。为此,您可以使用griddata将散布的(θ,rho)图像(由warp上方显示)插入到常规网格中。

% These is the spacing of your radius axis (columns)
rhoRange = linspace(0, max(rho(:)), 100);

% This is the spacing of your theta axis (rows)
thetaRange = linspace(-pi, pi, 100);

% Generate a grid of all (theta, rho) coordinates in your destination image
[T,R] = meshgrid(thetaRange, rhoRange);

% Now map the values in img to your new image domain
theta_rho_image = griddata(theta, rho, double(img), T, R);

看看所有的插值方法griddata找出哪些是最适合您的方案。

还有其他一些问题(例如中心的舍入)导致结果略有错误。下面提供了一个完整的示例

% Create an image of circles
radii = linspace(0, 40, 10);

rows = 100;
cols = 100;
img = zeros(rows, cols);

for k = 1:numel(radii)
    t = linspace(0, 2*pi, 1000);
    xx = round((cos(t) * radii(k)) + (cols / 2));
    yy = round((sin(t) * radii(k)) + (rows / 2));

    toremove = xx > cols | xx < 1 | yy > rows | yy < 1;

    inds = sub2ind(size(img), xx(~toremove), yy(~toremove));

    img(inds) = 1;
end

[r,c] = size(img);
center_row = r / 2;
center_col = c / 2;

[X,Y] = meshgrid((1:c) - center_col, (1:r) - center_row);

[theta, rho] = cart2pol(X, Y);

rhoRange = linspace(0, max(rho(:)), 1000);
thetaRange = linspace(-pi, pi, 1000);

[T, R] = meshgrid(thetaRange, rhoRange);

theta_rho_image = griddata(theta, rho, double(img), T, R);

figure
subplot(1,2,1);
imshow(img);
title('Original Image')

subplot(1,2,2);
imshow(theta_rho_image);
title('Polar Image')

结果

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将笛卡尔坐标转换为极坐标-Matlab

来自分类Dev

枫树,从极坐标转换为笛卡尔坐标?

来自分类Dev

将3D极坐标转换为笛卡尔坐标

来自分类Dev

如何将笛卡尔坐标转换为 360 图像上热点的球面坐标

来自分类Dev

使用imageR将图像从笛卡尔坐标映射到极坐标

来自分类Dev

霍夫变换:将极坐标转换回笛卡尔坐标,但仍无法绘制它们

来自分类Dev

将符号笛卡尔坐标转换为球形

来自分类Dev

opengl,从笛卡尔坐标转换球坐标

来自分类Dev

如何从极坐标中补偿笛卡尔坐标中的误差

来自分类Dev

如何将经度,纬度,高程转换为笛卡尔坐标?

来自分类Dev

尝试将图像添加到极坐标图中会显示“错误:annotation_custom仅适用于笛卡尔坐标”

来自分类Dev

matplotlib结合极坐标和笛卡尔网格数据

来自分类Dev

如何在3D中将圆柱坐标转换为笛卡尔坐标以进行绘制?

来自分类Dev

如何在PostgreSQL中将球面坐标转换为笛卡尔坐标

来自分类Dev

MatOfPoint笛卡尔坐标

来自分类Dev

极坐标图中元素的matplotlib zorder叠加在笛卡尔坐标图上

来自分类Dev

将笛卡尔图像转换为极性,外观差异

来自分类Dev

在MATLAB中将极坐标转换为直角坐标图像

来自分类Dev

有没有办法在 VB.net 中将像素坐标转换为笛卡尔坐标

来自分类Dev

Oracle - 过滤笛卡尔坐标

来自分类Dev

如何提取svg图像的笛卡尔坐标(x,y)?

来自分类Dev

将真实图像坐标转换为宽高比?

来自分类Dev

如何用Sympy证明给定的笛卡尔方程可以写成给定的极坐标方程

来自分类Dev

计算笛卡尔或极坐标系中2个位置之间的角度

来自分类Dev

将UIKit坐标转换为SpriteKit坐标

来自分类Dev

将屏幕坐标转换为舞台坐标

来自分类Dev

将Three.js场景旋转转换为极坐标?

来自分类Dev

笛卡尔坐标中的饼图

来自分类Dev

简单的笛卡尔坐标计算器

Related 相关文章

  1. 1

    将笛卡尔坐标转换为极坐标-Matlab

  2. 2

    枫树,从极坐标转换为笛卡尔坐标?

  3. 3

    将3D极坐标转换为笛卡尔坐标

  4. 4

    如何将笛卡尔坐标转换为 360 图像上热点的球面坐标

  5. 5

    使用imageR将图像从笛卡尔坐标映射到极坐标

  6. 6

    霍夫变换:将极坐标转换回笛卡尔坐标,但仍无法绘制它们

  7. 7

    将符号笛卡尔坐标转换为球形

  8. 8

    opengl,从笛卡尔坐标转换球坐标

  9. 9

    如何从极坐标中补偿笛卡尔坐标中的误差

  10. 10

    如何将经度,纬度,高程转换为笛卡尔坐标?

  11. 11

    尝试将图像添加到极坐标图中会显示“错误:annotation_custom仅适用于笛卡尔坐标”

  12. 12

    matplotlib结合极坐标和笛卡尔网格数据

  13. 13

    如何在3D中将圆柱坐标转换为笛卡尔坐标以进行绘制?

  14. 14

    如何在PostgreSQL中将球面坐标转换为笛卡尔坐标

  15. 15

    MatOfPoint笛卡尔坐标

  16. 16

    极坐标图中元素的matplotlib zorder叠加在笛卡尔坐标图上

  17. 17

    将笛卡尔图像转换为极性,外观差异

  18. 18

    在MATLAB中将极坐标转换为直角坐标图像

  19. 19

    有没有办法在 VB.net 中将像素坐标转换为笛卡尔坐标

  20. 20

    Oracle - 过滤笛卡尔坐标

  21. 21

    如何提取svg图像的笛卡尔坐标(x,y)?

  22. 22

    将真实图像坐标转换为宽高比?

  23. 23

    如何用Sympy证明给定的笛卡尔方程可以写成给定的极坐标方程

  24. 24

    计算笛卡尔或极坐标系中2个位置之间的角度

  25. 25

    将UIKit坐标转换为SpriteKit坐标

  26. 26

    将屏幕坐标转换为舞台坐标

  27. 27

    将Three.js场景旋转转换为极坐标?

  28. 28

    笛卡尔坐标中的饼图

  29. 29

    简单的笛卡尔坐标计算器

热门标签

归档