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

2023-11-07

☞ ░ 老猿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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仿射变换原理和其OpenCV-Python实现知识汇总 的相关文章

  • C语言入门

    什么是C语言 C语言是一门通用计算机编程语言 广泛应用于底层开发 C语言的设计目标是提供一种能以简易 的方式编译 处理低级存储器 产生少量的机器码以及不需要任何运行环境支持便能运行的编程 语言 尽管C语言提供了许多低级处理的功能 但仍然保持
  • 定时开机电路设计

    在一些情况下 比如电池供电 需要定时采集数据并传输 并且对功耗要求比较高时 就需要电路实现采集完成后关机 且能够定时自动启动的功能 一种方法是 采集完成后 通过单片机关闭外围电路的电源 且单片机本身处于低功耗模式 只保留RTC工作 设置定时
  • 学姐去微软了

    这篇文章是我邀请在微软工作的学姐写的 最近正好是金九银十校招季 所以我邀请学姐写下当年她面试时的一些经验 希望对大家有帮助 自我介绍 烤冷面 女 hitCS专业本 硕 2018年之前没有PM实习经验 2018年暑期实习拿到腾讯和微软的PM岗
  • 量化涌现:信息论方法识别多变量数据中的因果涌现

    来源 集智俱乐部 作者 Fernando E Rosas Pedro A M Mediano Henrik J Jensen等 译者 潘佳栋 审校 梁金 编辑 邓一雪 导语 大量个体聚集起来 常常涌现出新的复杂结构 鸟儿聚集起来形成兼具灵活
  • 利用hbase api在本地访问并操作服务器的hbase数据库

    最近因为实验室项目需要 开始研究了hbase 然后想一次性往集群服务器上写入大量的数据 并存到hbase中 考虑到在hbase shell下只能单个数据put 这样对于批量插入数据的要求完全不合适 于是就研究起hbase的java api
  • 14个SpringBoot优化小妙招,看完后同事说写代码像写诗!

    大家好 我是东哥 每次聊到代码优化 都会有很多人说理论 架构 核心思路 其实我觉得代码优化这事说简单了很简单 说复杂了吧它也有一定的难度 但是我觉得有一个良好的编码习惯很重要 下面分享一下14个springboot项目中优化代码的小技巧 让
  • n行Python代码系列:三行程序将提取HTML中的纯文本信息

    老猿Python博文目录 https blog csdn net LaoYuanPython article details 98245036 一 引言 最近看到好几篇类似 n行Python代码 的博文 看起来还挺不错 简洁 实用 传播了知
  • Gavin Wood Web3峰会最新演讲:波卡不是智能合约平台,而是平台的平台(全文)...

    在波卡上 每个平台都在用高性能 高效率和最优的方式做着自己擅长的事 而不必让它们的用户用底层平台的货币进行支付 从而将可定制性和灵活性提高了一个台阶 本文谨代表作者个人观点 不代表火星财经立场 该内容旨在传递更多市场信息 不构成任何投资建议
  • 关于C++函数返回值的使用方式以及局部对象何时析构的问题

    关于C 局部对象何时析构的探讨 我之前一直笼统的认为局部在函数调用结束之后 所有的局部变量会立刻析构 经过仔细分析之后才发现还有很多细节 这里对比了函数返回值的使用 Test t t fun 赋值 和 Test t fun 初始化 假设有一
  • python列表增加元素的三种方法

    本文主要介绍了关于python列表增加元素的几种操作方法 主要有insert方法 extend方法和append方法 每种方法给大家介绍的非常详细 希望对你有所帮助 1 insert方法 该方法包含两个参数 第一个参数为插入的位置参数 第二
  • 【NLP】自然语言处理技术在自动生成足球比赛战报上的应用

    1 背景介绍 自动生成新闻看似是一个很成熟的技术 很多年前就有各种应用 但是深入了解后我们可以发现机器自动生成的文章一般都是复述一些数字和简单的趋势变化 所以自动生成新闻的技术广泛应用在金融 体育领域 原因就是这类报道需要基于一定的事实 而
  • 去国企1年后,我后悔了!重回大厂内卷

    文章来源 cnblogs com peiyu1988 html 01 前言 2019年初 我通过一整天的笔试及面试加入一家 某一线城市国资委全资控股 某集团的研究机构 中央研究院 任职高级软件工程师 中级职称 在这边工作了整整一年 目前已经
  • 看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

    2020年已经过去 无论我们过得顺遂平安 还是过得无比艰难 我们应该都会记住这一年 回顾2020年 在这个不同寻常的疫情之年 科技成为人类抗击疫情的关键 而人工智能技术投入抗疫战争之中 可以说是人类有史以来的第一次 而与此同时 AI技术已经
  • 快速学习Python基础知识(3)

    一 输入输出 1 1 input输入函数的使用 input函数 是获取键盘输出 保存成一个字符串 注意 input 函数的返回值是一个字符串类型 即便你输入的是数字 返回的也会以一个字符串的形式返回给我们 inputStr input 提示
  • 手机知识:手机的快充技术是什么,看完本文你就懂了

    目录 1 什么是手机快充 2 目前主流的手机快充协议 2 1 PD协议 2 2 PE协议 联发科 2 3 QC协议 高通 2 4 VOOC闪充 OPPO厂商 2 5 SCP FCP闪充 华为厂商 2 6 FlashCharge闪充 Vivo
  • 基于RGB颜色空间使用OpenCV-Python实现照片换底

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 前一阵子家人报考教师资格证考试 因报名需要将蓝底的数字相片换成白底的 老猿虽然在学习图像处理相关开发技术 但并没有熟练使用的图像编辑
  • python到底值不值得学,自学两年,有话说!!

    首先说说笔者自己 笔者从小就对计算机有浓厚的兴趣 无奈家里穷 买不起 考大学的时候又阴差阳错的进了文科专业 高大上的工商管理专业 第一台计算机 还是大二的时候花了600买的二手货 海尔品牌机 赛扬466cpu 那时候主流的cpu奔腾500
  • Python 程序设计习题(4) —— 列表与元组

    目录 1 Python 习题部分 2 Python 习题讲解 列表 元组 其他 1 Python 习题部分 要想学习一门语言 便少不了练习 故附上部分 Python 习题 供大家学习参考 如有错误之处 还望指正 1 二年级一班举行了数学考试
  • C 语言文件读取全指南:打开、读取、逐行输出

    C 语言中的文件读取 要从文件读取 可以使用 r 模式 FILE fptr 以读取模式打开文件 fptr fopen filename txt r 这将使 filename txt 打开以进行读取 在 C 中读取文件需要一点工作 坚持住 我
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c

随机推荐

  • 数组的方法-sort()

    数组的sort 方法主要用于对数组的元素进行排序 其中 sort 方法有一个可选参数 但是 此参数必须是函数 数组在调用sort 方法时 如果没有传参将按字母顺序 字符编码顺序 对数组中的元素进行排序 如果想按照其他标准进行排序 就需要进行
  • Vue路由+NodeJs环境搭建

    Vue路由 NodeJs环境搭建 一 Vue路由 第一步 引入js文件 第二步 创建两个组件展示相关的功能 第三步 形成组件与请求路径的对应关系 第四步 将路由关系和路由对象绑定 第五步 将路由关系和vue实例绑定 第六步 发起请求 第七步
  • 1、docker 镜像操作

    1 创建 拉取镜像 docker hub https hub docker com 搜索对应的镜像 搜索 nvidia cuda 在tags里最终选择 10 2 cudnn7 devel ubuntu18 04版本 最终完整的镜像名 nvi
  • 域名,端口,IP总结

    前言 真正的房子只有几个门 但是一个IP地址的端口可以有65536 即 2 16 个之多 端口是通过端口号来标记的 端口号只有整数 范围是从0 到65535 2 16 1 我们知道 一台拥有IP地址的主机可以提供许多服务 比如Web服务 F
  • 智能交通技术(ITSTech)公号推广简介

    2023年9月14日更新 一 智能交通技术 微信公众号 简介 关注智能交通 车路协同 交通规划 交通改善 智慧城市等领域新理论和技术发展 交流大数据 云边端计算 人工智能 区块链等技术的应用经验 推广智能交通技术在交通规划 交通运输监管 交
  • hj212协议如何和php通讯,HJ212数据传输标准报文解析

    HJ212分为2005年 HJ T212 2005 和2017年 HJ212 2017 的版本 略有不同 网上没找到非常官方的渠道下载 在这贴一份2017年版本的下载地址 TCP IP通讯包组成 名称 类型 长度 描述 包头 字符 2 固定
  • 有符号数和无符号数

    1 数值 针对二进制来讲 有 有符号数 signed 和无符号数 unsigned 因为计算机无法区分一个二进制数是有符号数还是无符号数 因此我们在定义时要明确该数值是有符号数还是无符号数 无符号类型需要通过unsigned关键字指定 否则
  • 下载bison和flex的好地方

    http sourceforge net projects gnuwin32 这里的bison和flex我觉得是最好用的 捣乱的
  • vue el-form-item给多个表单项绑定rules校验规则

    vue el form item给多个表单项绑定rules规则 如图所示 我们想要在element的表单里 给多个input添加校验规则 只需要在内部添加el form item项 并在el form item项里绑定prop和rules规
  • 基于Prompt的MLM文本分类

    简介 常规NLP做文本分类时常用Transfer Learning的方式 在预训练bert上加一个分类层 哪个输出节点概率最大则划分到哪一类别 而基于Prompt的MLM文本分类是将文本分类任务转化为MLM Masked Language
  • 自动驾驶前沿综述:基于深度强化学习的自动驾驶算法

    作者 TIM 编辑 汽车人 原文链接 https zhuanlan zhihu com p 477372894 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心技术交流群 后台回复 数据集下载 获
  • python弹窗程序教程(附源码解析)

    python弹窗程序教程 附源码解析 声明 此程序仅供娱乐整蛊 使用者后果自负 本人概不负责 代码可能有雷同 如有侵权 请联系小编 引言 弹窗是程序的一种显示内容的形式 例如警告 提示等 而弹窗还有一种特殊的呈现形式 恶意程序 有人说不就是
  • VUE3写后台管理(3)

    VUE3写后台管理 3 1 环境 1 node 2 vite 3 Element plus 4 vue router 5 element icon 6 less 7 vuex 8 vue demi 9 mockjs 10 axios 11
  • Top 5 Best Open Source Projects on GitHub 2023

    这里介绍Github上 5 个增长最快的开源项目 它们为原有的解决方案提供了更加具有成本效益的替代方案 并为开发者 数据分析师和企业提供了高可用的工具产品 利用开源的优势 这5个项目拓展了强大而有效的解决方案 是值得收藏 分享以及探索尝试的
  • wayland 概述

    wayland 背景 强烈推荐在阅读本文前先浏览以下文档 Wayland Architecture 概述 wayland 是一种用于用于显示服务器的协议 它规定了客户端如何与服务器进行通信 也就是说 wayland 仅仅只是标准化 了客户端
  • 数据太大,long放不下的问题。numberOutOf Range

    数据库返回的数据 long存不下 改为用String类型
  • 缺失值填充5——AutoEncoder填充序列缺失值

    AutoEncoder可以参考 pytorch实现基本AutoEncoder与案例 AutoEncoder填充缺失值的思路是 在完整的数据集上训练一个AutoEncoder 把有缺失的数据拿过来 先全零填充原有的值 再通过AutoEncod
  • Eigen库 矩阵基本操作:转置矩阵,逆矩阵,伴随矩阵,特征值

    include
  • WebLogic 之安全配置

    WebLogic 之安全配置 前段时间Java的反序列化漏洞吵得沸沸扬扬 因工作原因需要对weblogic进行安全配置 网上关于weblogic的安全配置的内容都不是很全面 可能是因为weblogic已经比较成熟了吧 本文就总结一下在整个过
  • 仿射变换原理和其OpenCV-Python实现知识汇总

    老猿Python博文目录 https blog csdn net LaoYuanPython 一 仿射变换概念和类型 图像几何变换又称为图像空间变换 是各种图像处理算法的基础 它是在不改变图像内容的情况下 对图像像素进行空间几何变换的处理方