我正在进行图像变形。图像的真实坐标的变换版本是x和y,并且变换图像的极坐标是r和theta。
(圆柱形变形)。我有转换功能。但我对某些事情感到困惑。我从转换函数中获取极坐标,可以很容易地转换为笛卡尔坐标。但是如何绘制这个转换后的图像呢?因为新尺寸将与旧图像尺寸不同。
编辑:我的图像显示在圆柱体中。我有转换功能将其转换为幻觉图像,如图所示。由于此图像的大小与原始图像不同,如何确保主图像中的所有点都被转换。此外,变换图像中这些点的坐标是极坐标。我可以使用openCV使用变换后的极坐标来形成新图像吗?
答案 0 :(得分:1)
这里有两个问题。在我的理解中,出现了更大的问题,因为您正在将离散积分坐标转换为浮点坐标。另一个问题是所得图像的大小大于或小于原始图像的大小。此外,生成的图像不必是矩形,因此必须进行裁剪,或沿角落填充黑色像素。
根据http://opencv.willowgarage.com/documentation/geometric_image_transformations.html,没有径向转换例程。
I'd suggest you do the following:
- 将原始图像升级为宽度* 2,高度* 2。将新图像设置为黑色。 (cvResize,cvZero)
- 运行原始图像中的每个像素。找到像素的新坐标。将其值的1/9添加到新的所有8个邻居中 坐标和新坐标本身。 (CV_IMAGE_ELEM(...)+ = 1.0 / 9 * ....)
- 将新图像缩小到原始宽度,高度。
- 根据结果,您可能希望使用锐化程序。
醇>
如果你想保留一些超出范围的像素,这是一个不同的问题。基本上你想找到你收到的坐标的最小值和最大值,所以例如你的原始图像有Min,Max = [0,1024]你的新MinNew,MaxNew = [-200,1200]你做了一个函数
normalize(int &convertedx,int &convertedy)
{
convertedx = MinNewX + (MaxNewX-MinNewX)/(MaxX-MinX) * convertedx;
convertedy = ...;
}