码迷,mamicode.com
首页 > 其他好文 > 详细

图像处理的仿射变换和透视变换

时间:2016-05-12 20:00:07      阅读:1212      评论:0      收藏:0      [点我收藏+]

标签:

图像处理的仿射变换和透视变换

其实一直也没理解“仿射”俩字是啥意思,但是大家都这么叫,其实仿射变换和透视变换更直观的叫法可以叫做“平面变换”和“空间变换”或者“二维坐标变换”和“三维坐标变换”。如果这么命名的话,其实很显然,这俩是一回事,只不过一个是二维坐标(x,y),一个是三维坐标(x,y,z)。也就是:

仿射变换:
技术分享

透视变换:
技术分享

从另一个角度也能说明三维变换和二维变换的意思,仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面。透视变换的方程组有8个未知数,所以要求解就需要找到4组映射点,四个点就刚好确定了一个三维空间。

写个程序求解线性方程组相信不是什么难事。

解出方程组之后,就可以按照上面的方程,找到与结果图像上对应的源像素点。然后做插值。

看一下效果啊:

原图:
技术分享

仿射变换之后:
技术分享

透视变换之后:
技术分享

从上图也能看出来区别,仿射变换之后还是平行四边形,透视变换之后就只剩下四边形了。图像的旋转缩放理论上都能用仿射变换来实现(90度、180度、270度的旋转用仿射变换实现不划算)。透视变换的用途可能更多一些,比如:
你扫到的二维码是这样的:
技术分享
这样你直接读二维码信息肯定不行,所以需要透视变换一下,成这样:
技术分享
就可以读出信息了。

刚才讲,求解仿射变换需要3组对应的点,求解透视变换需要4组对应的点,如果找到的映射点的数量少于3组或4组就肯定解不出来,但是如果多于3组或4组怎么办?那就要最小二乘法做拟合,找到一个最佳变换方程。这个不细说了。

图像处理的仿射变换和透视变换

标签:

原文地址:http://blog.csdn.net/u012590570/article/details/51355600

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!