当前位置: 首页 > 滚动 > >正文

第九篇—仿射变换

来源:哔哩哔哩    时间:2023-05-02 17:50:41

仿射变换


(资料图片)

仿射变换是指对一个向量进行线性变换,得到另一个向量,变换前后两个向量仍在同一平面上。假设有两个二维向量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 ©  2015-2023 华夏珠宝网版权所有  备案号:琼ICP备2022009675号-37   联系邮箱:435 227 67@qq.com