仿射变换:能够将平行四边形变换为另一个平行四边形
透视变换:能够将平行四边形变换为梯形。
仿射变换是透视变换的子集。
先说仿射变换:
仿射变换的数学表达式为
要求出该变换矩阵,需要六个独立的方程,即需要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计算出来的
这是我做的鸟瞰图变换:
可以看到,效果还是不错的。只是远的地方就有些变形了
把近处图像的放大了看,鸟瞰图变换的效果是可以的
锥桶太碍事了,拿一个没有锥桶的图变换看看:
(我在图上人为画了些直线,以获得更好的观测效果)
把近处图像放大,鸟瞰图变换还是不错的