本文转自:https://blog.csdn.net/danmeng8068/article/details/79442792
正文
仿射变换和透视变换更直观的叫法可以叫做“平面变换”和“空间变换”或者“二维坐标变换”和“三维坐标变换”。一个是二维坐标(x,y),一个是三维坐标(x,y,z)。也就是:
仿射变换:
透视变换:
从另一个角度也能说明三维变换和二维变换的意思,仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面。透视变换的方程组有8个未知数,所以要求解就需要找到4组映射点,四个点就刚好确定了一个三维空间。
图像最常用的是仿射变换一般形式如下:
(x, y)为变换后的坐标,(v, w)为变换前的坐标。通过变换矩阵T,可以进行图像的缩放,旋转,平移等。
空间图像几何变换包括两个主要步骤:
(1) 空间坐标变换
(2)变换坐标的赋值、插值运算
有了上面仿射矩阵的坐标的变换,下面一步就是进行像素灰度级的赋值了。从原始图像映射到变换图像,赋值的时候需要进行插值运算。通常情况下有三种插值运算:最邻近插值法、双线性插值法、双三次插值法。【代码最后做了双线性内插的,保证得到的图像更平滑。】在仿射变换的一般表达式中,有两种基本的变换方法。第一种是forward mapping, 第二种 是inverse mapping(backward mapping)。在inverse mapping 中,(v, w) = T¬-1(x, y)。一般情况下,inverse mapping 比forward mapping更有效。仿射变换的原始坐标中,首先将原坐标变换为齐次坐标(齐次坐标的理解)。并且经过仿射变换后,你有了图像插值的基础,这样你就可以学习Image Warping了。姑且翻译为图像扭曲吧。Image Warping 同时也分为 Forward Warping 和 Backward Warping。
【前向映射一个问题是,输入图像的的两个或多个像素会映射到输出图像的同一个位置,另一种可能是某些输出位置完全没有像素,因此反向映射比前向映射更加有效】
Image Warping:
和Mapping一样,都是从原始图像向目标图像映射。其中(x’,y’)= T(x,y),x,y为原始图像坐标。同理,作为Backward Warping则为相反的方向。
其中,(x,y) =inverse(T (x’,y’))。就是从目标图像向原始图像进行映射了。
总结图像做图像扭曲(warp)步骤是:先根据两幅图像的三对对应点计算出仿射变换矩阵,再将原图像根据这个变换矩阵变换到后图像(插值)(或采取逆向)