参考:https://www.cnblogs.com/vincentcheng/p/7191014.html、《opencv算法精解》(张平编著)
下面提到的(x,y)是原始四边形图片的四个角点

仿射变换

平移,放大/缩小、旋转

公式表示:x,y是原来坐标值,前面的是变化后坐标


上面公式根据矩阵乘法可改成下面

平移矩阵

缩放矩阵

下面是以坐标原点为基准位置对图像坐标进行缩放,若想以想要缩放的图像为

以图片为中心(x0,y0)进行缩放

旋转矩阵

α在逆时针情况下为正


通过上面两个式子可得到下面的矩阵关系

投影(透视)变换

透视变换: 透视变换将图像投影到一个新的视平面,是二维到三维再到另一个二维(x’, y’)空间的映射。
透视变换前两行和仿射变换相同,第三行用于实现透视变换。透视变换前后,原来共线的三个点,变换之后仍然共线

从上面的矩阵形式,看出矩阵参数的作用范围


转化关系理解为
1、相当与将最初的二维的(x,y)点映射到三维空间(x,y,z),这一步就会出现无数中情况,只要有四个点分别在垂直于x,y平面且过原坐标点的四条直线上就行;为了计算方便可以设定z的值为任何一个常数,但不能将原始的z和预测的z都设置常数,;
2、同理将这个三维空间的(x,y,z)转化为另一个(x‘,y’,z‘)
3、(x‘,y’,z‘)使得转化后的点在x-y平面的投影是目的坐标点(x’,y‘)
再对三维空间中的点映射到新的二维空间,原始坐标值或变化后的坐标值,都相当于图片投影在坐标x,y轴上的投影图片四个角的坐标,因此对于z轴没有要求,也就是说z的值是任意值,但为了计算可将预测四个点坐标z设置为一个常数或原始的四个点坐标z设置为一个常数,但不能同时设置为常数。如果都设置为常数,那么两个四点所在平面必定平行
对于矩阵的计算所有等式来看,为了求得变换矩阵A,将四个坐标的矩阵等式展开后得到12个等式,下面是一个等式展开

最终的等式会出现**:8个关于预测x,y的等式,4个关于预测z的等式**,其中a有下标的,都是是想要求的数据,从上面分析得知有一组z为自己设置的常数,如上图,其他文中提到将z=1,是将A矩阵中的参数
现在的未知参数有4个z,9个a,共13个未知数,但只有12个等式。因为得到一个投影到x-y平面相同投影的四个点z是可以沿着z轴方向平移的
这时只要设定一个z的值,其他12个未知参数也就确定了,也可以确定a中的一个值,然后计算对应的几个z都能变成唯一值。(在opcv中的矩阵就是把a33设置为1),这样做只要能得到正确的x,y坐标值,就没有问题。
仿射变换和透视变换的关系,仿射变换将最初的z都设置为1,而最终得到的预测值的x,y也都可以除以z的值得到(x‘,y’,1)的形式,相当于仿射变换的四个点的z可以都是1 。如下图仿射变换(m31和m32为0,m33是1)

图片的仿射,投影(透视)变换相关推荐

  1. 透视变换(perspective transformation)和射影(投影)变换(projective transformation)

    透视变换(perspective transformation)和射影(投影)变换(projective transformation) 0几点说明 投影和变换的区别. 投影分为:平行投影或者正射投影 ...

  2. OpenCV 实现图片的水平投影与垂直投影,并进行行分割

    前言:对于印刷体图片来说,进行水平投影和垂直投影可以很快的进行分割,本文在OpenCV中如何进行水平投影和垂直投影通过代码进行说明. 水平投影:二维图像在y轴上的投影 垂直投影:二维图像在x轴上的投影 ...

  3. 仿射投影算法 matlab,基于仿射投影算法的时延估计

    Signal Process & System 号与系 基于仿射投影算法的时延估计 摘要:在时间延迟计中,通常利用互相关箅法对8寸延进行估计.然而,互相关算法受操声影较人,在低信比时无法准确对 ...

  4. Python 对图片做垂直投影

    Python 对图片做垂直投影 本文利用opencv对图片进行垂直投影,做出垂直投影图,大体思路:打开图片,灰度化,二值化,按列进行统计,新建一个大小和原图一样的图片,按列进行填充: cv2.cv.G ...

  5. 仿射变换与透视(或投影)变换

    仿射变换:在图形中进行平移.缩放.旋转.倾斜及他们组合形式的变换,又叫平面变换.二维坐标变换:这些变换的特点是:平行关系和线段的长度比例保持不变 透视变换:除了仿射的变换,还有线段长度比例可以改变,又 ...

  6. DirectX 3D_基础之模型表示 顶点格式 三角形 索引 虚拟摄像机 投影窗口 绘制流水线 局部坐标系 观察坐标系 世界坐标系 背面消隐 光照 裁剪 投影 视口变换 光栅化

    每日一语: 当一切都安于现状后,这个社会就无法发展,也就无法从原始社会发展到现代社会,对于人也是一样,如果我们一直安于现状,就无法有更大更好的发展,我们不要想着,一直可以过安逸的生活,程序员这个职业, ...

  7. 目标检测——使用OpenCV读取图片要注意进行维度变换

    注意:使用cv2.imread()读取彩色图片时,OpenCV获得的张量的数据顺序为h*w*c,其中张量的最后一个维度才是通道,所以在送入到torch中之前,需要对张量的维度顺序进行变换: 一个可行的 ...

  8. OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...

  9. 33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……...

    工具箱位置 打开ArcToolBox,找到工具集Projections and Transformations,位置如下:ArcToolbox--Data Management Tools--Proj ...

最新文章

  1. 高动态范围图像-单图
  2. java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))
  3. 【ASP.NET Core 沉思录】CreateWebHostBuilder 是一个 Convension
  4. Class_fileAndroid应用调用方法
  5. scala集合中添加元素_如何在Scala中获得列表的第一个元素?
  6. 游标循环读取的正确逻辑_千分尺的正确使用方法原来是这样?我用了那么多年都用错了...
  7. 主库创建存储过程时从库显示 Error 1049
  8. POJ 2488 A Knight's Journey
  9. windows server 2008 R2 SP1多国语言包官方下载
  10. html 中 鼠标滑轮实现横向滚动
  11. Python数据分析-LOL英雄画像 !
  12. 软件测试必须具备的知识体系(个人总结)
  13. python echarts城市热力图_python如何画热力图?
  14. AMiner发布:2022年人工智能全球最具影响力学者榜单AI 2000
  15. ajax 等待,等待所有的ajax请求都完成
  16. java.io.IOException: java.io.FileNotFoundException: C:\Users\26904\AppData 找不到指定的路径,自动跑到C盘里找,太离谱了。
  17. cocos2d-x游戏开发 跑酷(四) 关联物理世界
  18. AD16 DRC中无法定位到PCB中的具体错误位置解决方法-供参考交流
  19. TalkingData首席金融行业专家鲍忠铁:18亿数据解读移动互联网
  20. Picgo配置Bilibili图床

热门文章

  1. 常见标准波导和法兰尺寸
  2. 省市区联动,解决点击编辑赋值问题
  3. MMDetection的安装
  4. 背靠微博的红豆微课,为什么要去分微信语音直播的蛋糕?
  5. Jquerylist采集不到图片的问题
  6. TCSVT2020:基于新型SAD计算的HEVC低功耗运动估计
  7. 睡眠即醒 蓝牙_众人皆睡你独醒?Bose遮噪睡眠耳塞用黑科技助你酣睡!
  8. pycharm设置删除一行快捷键方法
  9. python+selenium自动化软件测试
  10. 创新工场汪华:创业初期易犯的5个错误