首页
搜索 搜索

第九篇—仿射变换_热门

哔哩哔哩     2023-05-02 18:03:29

仿射变换


(相关资料图)

仿射变换是指对一个向量进行线性变换,得到另一个向量,变换前后两个向量仍在同一平面上。假设有两个二维向量V和V':

通过线性变换将向量V变为向量V':

将上式展开:

转换为矩阵的乘法:

所以通过矩阵M就可以实现两个向量之间的仿射变换,常见的仿射变换包括:平移、缩放、旋转和翻转。

OpenCV中通过warpAffine()函数实现仿射变换:

仿射变换—平移

对于二维向量V=(x,y)和V'=(x',y'),通过平移变换将V变为V'的操作如下:

转换为矩阵的形式:

代码实现:

结果:

仿射变换—缩放

对于二维向量V=(x,y)和V'=(x',y'),通过缩放变换将V变为V'的操作如下:

转换为矩阵的形式:

代码实现:

结果:

仿射变换—旋转

对于二维向量V=(x,y)和V'=(x',y'),围绕原点将向量V变为向量V'的操作如下:

转换为矩阵的形式:

因为图像的坐标系是以左上角为原点,所以需要对角度theta进行取反,根据三角函数的奇偶性,矩阵M变为:

如果围绕任意点C(a,b)旋转,将变量V变为V'的操作如下:

转换为矩阵的形式:

同理,因为图像的坐标系是以左上角为原点,所以需要对角度theta进行取反,根据三角函数的奇偶性,矩阵M变为:

代码实现:

结果:

为了防止旋转后图片的部分信息被裁剪掉,我们对输出图片的尺寸进行扩充,优化的代码实现如下:

结果:

仿射变换—翻转

翻转包括水平翻转、垂直翻转和镜像翻转,对于二维向量V=(x,y)和V'=(x',y'),通过翻转变换将V变为V'的操作如下:

转换为矩阵的形式:

代码实现:

结果:

X 关闭

大众医药网版权所有Copyright ©  2022 All Rights Reserved.    备案号:豫ICP备20014643号-14   联系邮箱: 905 14 41 07@qq.com