Matlab 图像到极坐标变换

Matlab 图像到极坐标变换,matlab,transformation,polar-coordinates,Matlab,Transformation,Polar Coordinates,我需要将黑白图像转换为极坐标。原始图像保存在矩阵中。现在,我迭代原始图像的每个像素,然后计算每个像素的极坐标变换,如下所示: originX = 0; originY = 0; for x = 1:columns for y = 1:rows r = sqrt((x-originX)^2 + (y-originY)^2); a = atand((y-originY)/(x-originX)); polarTrans(r, a) =

我需要将黑白图像转换为极坐标。原始图像保存在矩阵中。现在,我迭代原始图像的每个像素,然后计算每个像素的极坐标变换,如下所示:

originX = 0;
originY = 0;



for x = 1:columns
    for y = 1:rows
        r = sqrt((x-originX)^2 + (y-originY)^2);
        a = atand((y-originY)/(x-originX));

        polarTrans(r, a) = origImage(x,y);
    end
end
问题是,为像素计算的新位置不是正整数值,所以我不能简单地将它们保存到另一个矩阵polarTrans中。你有什么建议吗?如果不是在矩阵中,我应该如何保存转换后的图像?

矢量化,我的朋友

% compute all [x,y] pairs for the whole image 
[x,y]=meshgrid(1:columns -Xorigin,1:rows -Yorigin);

% Ta-da! 
[alpha,rho]=cart2pol(x,y)

现在像素
[i,j]
在笛卡尔坐标系中是
[x(i,j),y(i,j)]
,在极坐标系中是
[rho(i,j),alpha(i,j)]
。您不需要以任何其他方式存储
originImage
。每当你想知道一个特定像素值的极坐标时,你只需要做
[rho(i,j),alpha(i,j)]
,对于
原始图像(i,j)
像素值。

关于一个(x,y)矩阵的值
极坐标(x,y)=[ra origImag(x,y)]
你能详细说明结果吗?矩阵将是什么样子?我得到了“下标赋值维度不匹配”。当我尝试它时。我失败了,它确实是
polarTrans(x,y:)=[ra origImag(x,y)]
我的意思是,一个3D矩阵。如果你愿意,你也可以用一个单元格。哦,我知道这是一个3D矩阵。那么,我有没有办法,例如,执行imshow(polarTrans)来绘制变换后的矩阵?关于绘制,您可以查看,也许它会帮助您。请注意,它使用了一个类似于的方案。它是
[alpha,rho]=cart2pol(x,y)
相反,角度的顺序是第一,半径是第二,同样
cart2pol
不是
car2pol
。(+1)虽然对于矢量化,我的朋友,实际上,矢量化是Matlab教给我们的最糟糕的东西。@AboAmmar opps我从内存中写的,让我来解决这个问题。你为什么不喜欢矢量化?它让我们变得懒惰?我喜欢矢量化,它让我们的生活变得轻松,但它与计算机在引擎盖下的工作方式完全相反,它通过保持大矩阵和向量的分配来消耗巨大的内存,有时还隐藏真正的算法。由于性能原因,几乎所有其他语言都不鼓励矢量化。我希望有一台真正的并行计算机存在。@AboAmmar fair,但是啊,它太有用了,特别是对于科学(MATLAB!)。一般来说,如果你担心内存或低水平计算,要么你不使用MATLAB,要么在幕后学习它是如何工作的(无论如何,最后一个总是被鼓励的)