我正在将笛卡尔图像转换为极坐标图像。(x,y) => (角度, 半径)
我通过迭代每个像素来填充极坐标图像,并通过进行反向极坐标变换来填充它们。对于给定的(角度,半径)对,我在源笛卡尔图像中的以下位置进行插值:
xcartesianpoint = cos( angle ) * radius + center.x;
ycartesianpoint = sin( angle ) * radius + center.y;
(我用极坐标图像做了一些计算)
然后我将极坐标图像转换回笛卡尔坐标。同样,我通过进行逆变换来填充目标图像。对于给定的 (x,y) 点,我从位于以下位置的极坐标图像点插入值:
angle = atan2(ycartesianPxl, xcartesianPxl) + M_PI;
radius = getRadius(xcartesianPxl, ycartesianPxl);
xpolarpoint = angle /_angleStep; // give the index in the polar image corresponding to the angle
ypolarpoint = (polarImage.height / maxRadius) * radius;
点索引是我用来在给定变换的源图像中插值的浮点值。
这段代码运行良好,但会产生类似的伪像(第一张图像是源,第二张是极坐标转换后的源,以笛卡尔坐标转换回。伪像在远离中心的像素上更明显):
源图像 http://imageshack.us/a/img539/3131/932528.png 转换后的图像 http://imageshack.us/a/img631/5459/3b3365.png
编辑
我如何处理我的极地图像:
我正在对源图像进行极性转换,以使其模糊。这样做是为了获得像模糊一样的缩放/螺旋。模糊是通过对转换回来的极坐标图像进行 FFT 来完成的。如果整个图像被模糊,伪影就不会成为问题,但用户可以指定一个增益遮罩来调制每个像素的模糊半径。因此,一些像素可能完全模糊,而另一些则根本没有。