3

我想知道是否有人帮助我了解如何将顶部图像转换为底部图像。图像可在以下链接中找到。顶部图像是笛卡尔坐标。底部图像是转换后的极坐标图像

图片

4

1 回答 1

3

这是一个基本的直角坐标到极坐标变换。要进行转换,请扫描输出图像并将 x 和 y 视为 r 和 theta。然后将它们用作 r 和 theta 来查找输入图像中的相应像素。所以是这样的:

int x, y;
for (y = 0; y < outputHeight; y++)
{
    Pixel* outputPixel = outputRowStart (y); // <- get a pointer to the start of the output row
    for (x = 0; x < outputWidth; x++)
    {
        float r = y;
        float theta = 2.0 * M_PI * x / outputWidth;
        float newX = r * cos (theta);
        float newY = r * sin (theta);
        *outputPixel = getInputPixel ( newX, newY ); // <- Should probably do at least bilinear resampling in this function
        outputPixel++;
    }
}

请注意,您可能希望根据您要实现的目标来处理包装。theta 值在 2pi 处换行。

于 2013-08-04T02:03:33.300 回答