我需要将黑/白图像转换为极坐标。原始图像保存在矩阵中。现在,我正在迭代原始图像的每个像素,我像这样计算每个像素的极坐标变换:
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 中。你有什么建议吗?如果没有在矩阵中,我还应该如何保存变换后的图像?
答案 0 :(得分:1)
Vectorize,我的朋友。
% 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)]
,originImage(i,j)
像素值。