我想知道是否有人帮助我了解如何将顶部图像转换为底部图像。图像可在以下链接中找到。顶部图像是笛卡尔坐标。底部图像是转换后的极坐标图像
问问题
4619 次
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 回答