OpenCV

透视变换之变换为鸟瞰图

2018-09-01  本文已影响0人  SIENTIST

仿射变换:能够将平行四边形变换为另一个平行四边形
透视变换:能够将平行四边形变换为梯形。
仿射变换是透视变换的子集。

先说仿射变换:
仿射变换的数学表达式为



要求出该变换矩阵,需要六个独立的方程,即需要3组不共线的点才能求解。

——————————————————————
再说透视变换:
透视变换(Perspective Transformation)是将成像投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。

透视变换的通用公式为:



其中的变换矩阵各部分负责:


透视变换的数学表达式为:

所以,给定透视变换对应的四对像素点坐标,即原图的坐标和变换后的坐标,联立公式可求得透视变换矩阵;
反之,给定透视变换矩阵,即可对图像或像素点坐标完成透视变换。

图像进行透视变换的2个重要函数:

Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])

src[]为原图的四个坐标点,dst[]为变换后图像上对应的四个坐标点
函数返回值即为透视变换的矩阵
void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)
src为输入的图片, dst为透视变换后的图片, 
m为变换矩阵,就是用上面的getPerspectiveTransform计算出来的

这是我做的鸟瞰图变换:


原图
透视变换后

可以看到,效果还是不错的。只是远的地方就有些变形了

把近处图像的放大了看,鸟瞰图变换的效果是可以的

图片.png

锥桶太碍事了,拿一个没有锥桶的图变换看看:
(我在图上人为画了些直线,以获得更好的观测效果)


原图 透视变换后

把近处图像放大,鸟瞰图变换还是不错的

放大近处的图像
上一篇 下一篇

猜你喜欢

热点阅读