该系列文章为 OpenCV+Python Tutorials的学习笔记
代码托管在Github
转载请注明: http://blog.csdn.net/a352611/article/details/51417779 [三记的博客]
写在文章开始之前:
关于几何变换,常见的资料都没有把数学原理部分讲透彻,基本都是照着课本说,导致我很多地方无法彻底理解.思前想后还是把这一块分成两个部分,一部分专门讲数学,一部分专门讲应用.本文为数学原理部分。
Geometry Transformation 几何变换
对图像的几何变换本质上是一种线性变换,其数学本质为
Inew=TIold
即通过变换矩阵T将原图上的点的位置Iold变换到新的位置,从而得到新的图像Inew
2D平面变换示意图(”Computer Vision: Algorithms and Applications”, Richard Szeliski)
- Translation 平移
- Euclidean(rigid, rotation) 旋转
- Scale 缩放;图中没有画出
- Similarity 相似变换;结合旋转,平移和缩放
- Affine 仿射变换;想象在similarity的基础上用两只手对图像进行按压拉伸
- Projective 投影变换;想象投影仪做的事情,将一个面投影到另外一个面的情况
Homogeneous coordinates 齐次坐标
简单的说法就是对于点P=[x;y]T我们无从得知这是一个点还是向量,之所以纠结这个概念的原因在于:平移对于向量没有意义,但对点有意义。我们希望对线性变换有一个统一的描述,结果发现在Homogeneous coordinates齐次坐标下我们能够和谐统一地描述这些。怎么把一个点转换到齐次坐标下来描述呢?很简单的一个方法是
直接将点P=[x;y]T变为P=[x;y;1]T
而向量P=[x;y]T变为P=[x;y;0]T
由于我们的变换矩阵是一个3x3的矩阵,最后一列的意义就是平移,这样就实现平移对向量无效,也能让线性变换统一写为Pnew=TPoldT为变换矩阵,最后还要从齐次坐标转换回我们的欧几里得坐标。
完整的Homogeneous coordinates概念请翻阅”Multiple View Geometry in computer vision”, Richard Hartley and Andrew Zisserman
平行线相交于一点
Scaling,Rotation,Translation 缩放、旋转、平移
缩放 Scaling
fx,fy分别为x方向和y方向的缩放系数
旋转 Rotation
平移 Translation
只有齐次坐标系下的表示
tx,ty分别为x方向和y方向的平移距离
Affine 仿射变换
Perspective 投影变换