1

我正在研究图像变形。图像真实坐标的变换版本是 x 和 y,变换后图像的极坐标是 r 和 theta。

(圆柱形变形)。我有转换功能。但我对某些事情感到困惑。我从可以很容易地转换为笛卡尔坐标的变换函数中得到极坐标。但是如何绘制这个转换后的图像呢?因为新尺寸将不同于旧图像尺寸。

编辑:我有气缸中显示的图像。如图所示,我具有将其转换为幻觉图像的转换功能。由于此图像的大小与原始图像不同,我如何确保主图像中的所有点都被转换。此外,变换图像中这些点的坐标是极坐标。我可以使用 openCV 使用转换后的极坐标形成新图像吗?

在此处输入图像描述

参考:http ://www.physics.uoguelph.ca/phyjlh/morph/Anamorph.pdf

4

1 回答 1

1

你这里有两个问题。据我了解,出现更大的问题是因为您将离散积分坐标转换为浮点坐标。另一个问题是生成的图像的大小大于或小于原始图像的大小。此外,生成的图像不必是矩形的,因此必须将其裁剪或沿角落填充黑色像素。

根据http://opencv.willowgarage.com/documentation/geometric_image_transformations.html没有径向变换例程。

I'd suggest you do the following:
  1. 将原始图像放大为宽*2,高*2。将新图像设置为黑色。(cvResize, cvZero)
  2. 遍历原始图像中的每个像素。找到像素的新坐标。将其值的 1/9 添加到新坐标的所有 8 个邻居以及新坐标本身。(CV_IMAGE_ELEM(...) += 1.0/9 * ....)
  3. 将新图像缩小到原始宽度、高度。
  4. 根据结果​​,您可能需要使用锐化程序。

如果你想保留一些超出范围的像素,那是一个不同的问题。基本上你想找到你收到的坐标的最小值和最大值,例如你的原始图像有 Min,Max = [0,1024] 和你的新 MinNew,MaxNew = [-200,1200] 你做一个函数

normalize(int &convertedx,int &convertedy)
{
convertedx = MinNewX + (MaxNewX-MinNewX)/(MaxX-MinX) * convertedx;
convertedy = ...;
}
于 2013-01-18T20:56:44.803 回答