使用透视变换来调整图像

use*_*895 10 image transform image-processing computer-vision perspective

我试图在图像上执行偏斜,就像这里显示的那样

http://i.msdn.microsoft.com/3b575a03.TransformedClimber%28en-us,VS.90%29.png.

我有一个像素数组代表我的图像,不知道如何处理它们.

Jac*_*cob 53

更好的方法是通过逆映射.

从本质上讲,你想要"扭曲"图像,对吧?这意味着源图像中的每个像素都会转到预定义的点 - 预定义是一个转换矩阵,它告诉您如何旋转,缩放,平移,剪切等图像,这些图像实际上是对图像进行一些坐标(x,y)并说明, "好吧,这个像素的新位置是(f(x),g(y)).

这基本上就是"翘曲"的作用.

现在,考虑缩放图像...比如说,尺寸的十倍.这意味着,像素at (1,1)成为(10,10)- 然后下一个像素的像素(1,2)成为(10,20)新图像中的像素.但是,如果你继续这样做,你将没有像素的值,(13,13)因为,(1.3,1.3)你的原始图像中没有定义,你的新图像中会有一堆洞 - 你必须使用四个插值为这个值在新图像中它周围的像素,即(10,10) , (10,20), (20,10), (200,2)- 这称为双线性插值.

但这里有一个问题,假设您的转型不是简单的缩放和为仿射(就像你张贴的样本图像) -然后(1,1)就会变得像(2.34,4.21),然后你必须圆他们的输出图像中(2,4),然后你" d必须对新图像进行双线性插值以填充孔或更复杂的插值 - 凌乱吧?

现在,没有办法摆脱插值,但我们只能做一次双线性插值.怎么样?简单的逆映射.

不要将其视为进入新图像的源图像,而应考虑新图像的数据将来自源图像的位置!因此,(1,1)在新图像中,将来自源图像中的一些反向映射,(3.4, 2.1)然后在源图像上进行双线性插值以找出相应的值!

转换矩阵

好的,那么如何为仿射变换定义变换矩阵呢?该网站告诉您如何通过合成不同的转换矩阵进行旋转,剪切等操作.

转换:

替代文字

合成:

替代文字

最终矩阵可以通过按顺序合成每个矩阵来实现,然后将其反转以获得逆映射 - 使用此计算源图像中像素的位置并进行插值.

  • 好评!向上投票以包括参考. (2认同)