☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░

一、仿射变换概念和类型

图像几何变换又称为图像空间变换,是各种图像处理算法的基础。它是在不改变图像内容的情况下,对图像像素进行空间几何变换的处理方式。它将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置,其实质是改变像素的空间位置,估算新空间位置上的像素值。

图像的几何变换包括透视变换和仿射变换,透视变换又称为投影变换、投射变换、投影映射,透视变换是将图片投影到一个新的视平面,它是二维(x,y)到三维(X,Y,Z)、再到另一个二维(x’,y’)空间的映射。

仿射变换又称为图像仿射映射,可以认为是透视变换的一种特殊情况,是透视变换的子集,仿射变换是从二维空间到自身的映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间,也就是图像仿射变换等于图像线性变换和平移的组合。

仿射变换包括平移(translation)、旋转(rotation)、缩放(scaling)、错切(shear )四种类型:

平移和旋转两者的组合不改变图像的大小和形状,只有图像的位置(平移变换)和朝向(旋转变换)发生改变,称之为欧式变换(Euclidean transformation)或刚体变换(rigid transformation),刚性变换是最一般的变换
缩放又分为等比例缩放(uniform scaling)和非等比例缩放(non-uniform scaling),如果缩放系数为负数,则会叠加翻转(reflection,又翻译为反射、镜像),因此翻转可以看成是特殊的缩放
欧式变换和等比例缩放保持了图像外观没有变形,因此二者的组合称为相似变换(similarity transformation)
错切是保持图形上各点的某一坐标值不变,而另一坐标值关于该保持不变坐标值进行线性变换。坐标不变的轴称为依赖轴,其余坐标轴称为方向轴。错切分为水平错切和垂直错切。

二、基本仿射变换矩阵

在《https://blog.csdn.net/LaoYuanPython/article/details/113788380 图像仿射变换原理3:仿射变换类型及变换矩阵详解》中介绍了包括平移(translation)、旋转(rotation)、缩放(scaling)、错切(shear )四种类型仿射变换的变换矩阵。

  • 平移变换基本仿射变换矩阵

  • 旋转变换基本仿射变换矩阵(θ为顺时针旋转角度)

  • 水平错切基本仿射变换矩阵(α为错切角)

  • 垂直错切基本仿射变换矩阵(β为错切角)

  • 缩放变换基本仿射变换矩阵(kx和ky分布为水平缩放因子和垂直缩放因子)

  • 上面介绍的仿射矩阵实际上并不是标准称呼上的仿射矩阵,而是一种用于两个平面间进行透视变换的3*3单应性矩阵,真正的仿射矩阵是2*3的矩阵,比单应性矩阵少一行,OpenCV中warpAffine函数使用的矩阵就是2*3的矩阵。

三、老猿关于仿射变换的总结文章

下面是老猿这阵子学习的成果总结,阅读这些文章可以让对仿射变换甚至线性代数无基础的人员快速理解仿射变换的原理、仿射变换过程以及OpenCV-Python关于仿射变换的支持能力及应用。
注意:前面星号标记的原理相关文章为付费专栏文章:

  1. *https://blog.csdn.net/LaoYuanPython/article/details/113743213 图像仿射变换原理1:齐次坐标来龙去脉详解 :本文从基础的欧式空间、投影空间、笛卡尔坐标、向量、矩阵、线性空间着手介绍,从向量空间的点和向量的表示法着手说明齐次坐标概念引入的过程,并介绍了齐次坐标的作用

  2. *https://blog.csdn.net/LaoYuanPython/article/details/113804210 图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵:图像线性变换是仿射变换的子集,包括图像的旋转、错切、缩放以及几者的组合叠加,线性变换的图像和原图像相比,坐标原点保持不变、直线变换后是直线或原点,平行线变换后还是平行。所有图像线性变换都可以使用图像变换矩阵和图像平面空间向量的乘积来表示,本文分析了图像线性变换的代数表示方法以及对应变换矩阵。

  3. *https://blog.csdn.net/LaoYuanPython/article/details/113788380 图像仿射变换原理3:仿射变换类型及变换矩阵详解:本文介绍了仿射变换的类型及其关系以及仿射变换矩阵,基本的仿射变换包括平移、旋转、缩放和错切,镜像可以看做特殊的缩放。实际中一般图像的仿射变换就是平移、旋转、缩放和错切的叠加组合,每叠加一个处理,就进行一次仿射变换矩阵和齐次坐标的乘法,再进行一次处理则再乘一次对应变换的矩阵。

  4. *https://blog.csdn.net/LaoYuanPython/article/details/113841635 图像仿射变换原理4:组合变换及对应变换矩阵:本文介绍了组合(也称复合)仿射变换的概念、变换过程以及变换矩阵,并以绕指定点旋转的组合变换、指定直线作为依赖轴的组合变换详细介绍了变换过程和变换矩阵的构成,有助于深入理解仿射变换的概念和处理过程。

  5. *https://blog.csdn.net/LaoYuanPython/article/details/113879385 图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现:本节以绕图像中心点顺时针循环旋转的组合仿射变换和以图像中心点开始与x轴成30°夹角的线段作为依赖轴的循环错切的组合仿射变换为例,详细介绍了二者的OpenCV-Python实现。通过相关案例的介绍,对前面4节介绍的仿射变换原理将有更深入的认识。

  6. https://blog.csdn.net/LaoYuanPython/article/details/113832562 OpenCV-Python图像处理:仿射变换详解:本节介绍了仿射变换的概念、类型、基本仿射变换矩阵、OpenCV-Python与仿射变换相关的主要函数及语法说明,并提供了两种不同方式实现的图像旋转和任选三个点将圈定子图放大的示例。通过阅读相关内容可以有助于大家理解仿射变换的概念和仿射变换的OpenCV-Python实现方法。

  7. https://blog.csdn.net/LaoYuanPython/article/details/113924512 OpenCV仿射变换:getAffineTransform的案例 :本部分介绍了OpenCV-Python的getAffineTransform函数,并通过在图像上任选三个点指定为结果图像的左上角、左下角、右下角,从而实现原图像三个点圈定范围的子图像通过仿射变换实现整体放大。

  8. https://blog.csdn.net/LaoYuanPython/article/details/113866576 OpenCV-Python仿射变换开发中遇到的坑 : 本文介绍了老猿在使用OpenCV-Python进行仿射变换开发中遇到的坑,这些问题可能大家或多或少会碰到,这些问题涉及基本知识的理解、官方资料的坑等方面。

四、老猿使用的网上参考资料

在学习过程中老猿查阅了大量资料,以下是老猿认为比较有价值的部分文章:

  1. 仿射变换及其变换矩阵的理解
  2. [Python图像处理] 三十六.OpenCV图像几何变换万字详解(平移缩放旋转、镜像仿射透视)
  3. 线性变换
  4. 线性代数(一)矩阵、矩阵乘法的由来
  5. 基本图像变换:线性变换,仿射变换,投影变换
  6. 仿射变换与投影变换
  7. 【Computer Vision】图像单应性变换/投影/仿射/透视
  8. 如何通俗地讲解「仿射变换」这个概念?
  9. 图像处理的仿射变换与透视变换
  10. python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective
  11. 坐标系旋转变换公式图解
  12. 变换(二维与三维)
  13. 仿射变换和透视变换
  14. 矩阵本质-基变换与线性变换
  15. 3D图形:矩阵与线性变换

五、后记

当今年元旦期间开始学习OpenCV-Python的仿射变换时,刚开始看到相关公式老猿就懵了,大学学习的线性代数全部还给老师了,基本概念都忘光了。想方设法找了本大学时代的线性代数教材:

从头开始温习,并查阅各种资料,经过40余天的温习和学习,终于将仿射变换的概念、原理以及OpenCV-Python的实现融会贯通了,将其总结出来多篇博文确保对线性代数无基础者都能看懂,肯定能对需要的人有所帮助。

更多图像处理的介绍请参考专栏《OpenCV-Python图形图像处理 https://blog.csdn.net/laoyuanpython/category_9979286.html》和《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》相关文章。

更多图像处理的数学基础知识请参考专栏《人工智能数学基础 https://blog.csdn.net/laoyuanpython/category_10382948.html》

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

如果对文章内容存在疑问,可以在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

仿射变换原理和其OpenCV-Python实现知识汇总相关推荐

  1. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  2. Python列表知识汇总

    Python列表知识汇总 创建列表 #列表的创建#空列表---------------Start--------- List_NULL = [] print(type(List_NULL)) #输出: ...

  3. Python基础知识汇总和应用示例

    Python基础知识汇总和应用示例 文章内容 链接 python库下载网站 python库下载网站 python读取csv文件 python读取csv文件 Python3基础知识:三元表达式.元祖.s ...

  4. 卡尔曼滤波原理和Matlab以及python代码实现

    文章目录 前言 一.卡尔曼滤波原理 最后对卡尔曼滤波的预测步和更新步公式进行总结: 二.Matlab代码 三.Python代码 前言 本文主要讲解卡尔曼滤波的原理以及Matlab和python代码实现 ...

  5. MPC模型预测控制原理和Matlab以及Python代码实现

    MPC模型预测控制原理和代码 一. 介绍模型预测控制(MPC)原理 简要解释一下最优控制最优控制的目标是在一定的约束条件下达到最优的系统表现,那么要让系统达到最优表现,一般是通过定义损失函数J,通过最 ...

  6. 互联网原理和html基础,计算机网络基础知识习题及答案(八)

    计算机网络选择型自测题 1.根据报文交换的基本原理,可以将其交换系统的功能概括为 A)存储系统 B)转发系统 C)存储-转发系统 D) 传输-控制系统 2.TCP/IP网络类型中,提供端到端的通信的是 ...

  7. 最全面的Python重点知识汇总,建议收藏!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨网络,由法纳斯特整理 这是一份来自于 SegmentFault ...

  8. Python数据分析知识汇总

    数据分析 什么是数据分析? 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程. 使用python做数据分析的常用库 numpy 基 ...

  9. 最全面的Python重点知识汇总,建议码住

    这是一份来自于 SegmentFault 上的开发者 @二十一 总结的 Python 重点.由于总结了太多的东西,所以篇幅有点长,这也是博主"缝缝补补"总结了好久的东西. Py2 ...

最新文章

  1. linux 排程命令,Ubuntu 排程設定 :Crontab 排程使用教學
  2. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
  3. hmlt ul li 水平排列
  4. Linux C++、Boost、ACE ......
  5. mysql客户库_你应该知道的10个MySQL客户启动选项
  6. React开发(134):ant design学习指南之form中getFieldValue
  7. c#语言float转换int,C#Float表达式:将结果float转换为int时的奇怪行为
  8. 使用PDF.js实现前端和手机端网页预览PDF文件(可定制,支持本地文件、Base64编码和远程URL跨域方式)
  9. 自如被起诉索赔了!因装修致邻居家房屋漏水...
  10. Linux PXE详解
  11. leapmotion 初识
  12. 宝藏级UI组件库:FirstUI,微信小程序版+uniapp版更新至1.6.0,完美支持vue3
  13. 远程计算机怎么桌面显示不全,桌面显示不全怎么设置
  14. 知识| 四种渲染到底是啥?终于有人讲明白了(上)
  15. MetaLife Web3开放元宇宙vs内卷致命的Web2元宇宙
  16. 张成分析(spanning test):portfolio_analysis.Spanning_test
  17. 计算机学院机考,东华大学计算机学院研究生复试上机考真题.doc
  18. 2019年最新版,百度云不限速下载工具,亲测好用!
  19. 浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
  20. 国内外企业争食海淘:顺丰布局转运业务

热门文章

  1. 阿里云发布混合云存储阵列,助力企业数字化转型
  2. STM32-Arduino编程 CAN总线通信
  3. CSL 的拼图 枚举更新
  4. 人工智能视觉实训平台实验指导书
  5. 【华为云技术分享】华为云:安全的蘑菇街才能让你更美丽
  6. 技术栈:为什么 Node 是小菜前端团队的核心技术栈
  7. 哈尔滨理工大学软件与微电子学院程序设计竞赛(新生赛)
  8. 【OP放大电路设计基础篇】1.op放大器运行
  9. 联想的锋行计算机,联想电脑锋行系列都有哪些型号
  10. 动态交叉神经网络的特点,什么是动态神经网络