OpenCV仿射变换+投射变换+单应性矩阵

本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~

  • estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变。
  • getAffineTransform():计算3个二维点对之间的仿射变换矩阵H(2行x3列),自由度为6.
  • warpAffine():对输入图像进行仿射变换
  • findHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 。
  • getPerspectiveTransform():计算4个二维点对之间的透射变换矩阵 H(3行x3列)
  • warpPerspective(): 对输入图像进行透射变换
  • perspectiveTransform():对二维或者三维矢量进行透射变换,也就是对输入二维坐标点或者三维坐标点进行投射变换。
  • estimateAffine3D:计算多个三维点对之间的最优三维仿射变换矩阵H (3行x4列)
  • transform():对输入的N维矢量进行变换,可用于进行仿射变换、图像色彩变换.
  • findFundamentalMat:计算多个点对之间的基矩阵H。

快速解决:

  • 问题1:如何计算3个二维点对之间的仿射变换矩阵?

答:使用getAffineTransform()。

  • 问题2:如何计算多个二维点对之间的仿射变换矩阵(使用误差最小准则 )?

答:使用estimateRigidTransform()或者findHomography。

  • 问题3:如何计算4个二维点对之间的透射变换?

答:使用getPerspectiveTransform()。

  • 问题4:如何计算多个三维点对之间的仿射变换?

答:使用estimateAffine3D。

  • 问题5:如何对输入图像进行仿射变换?

答:使用warpAffine()。

  • 问题6:如何对输入图像进行透射变换?

答:使用perspectiveTransform()。

  • 问题7:如何对输入的二维点对进行仿射变换?

答:使用transform()。

  • 问题8:如何对输入的三维点对进行投射变换?

答:使用perspectiveTransform()。

OpenCV仿射变换+投射变换+单应性矩阵,布布扣,bubuko.com

时间: 2024-10-11 07:36:45

OpenCV仿射变换+投射变换+单应性矩阵的相关文章

单应性(homography)变换的推导

我们的目标是要得到单应性矩阵 $$ H= \begin{bmatrix} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{bmatrix}$$ 矩阵$H$会将一幅图像上的一个点的坐标$a=(x,y,1)$映射成另一幅图像上的点的坐标$b=(x_1,y_1,1)$,也就是说,我们已知$a$和$b$,它们是在同一平面上. 则有下面的公式:

(四)单应矩阵

单应矩阵原理 单应(透射变换)是射影几何中的概念,又称为射影变换.他把一个射影平面上的点映射到另一个平面对应的位置,并且把直线映射为直线,具有保线性质.与对极几何不同的是,对极几何将点映射到线上,而单应矩阵是点对点的关系.要注意的是单应矩阵的适用场景为:当场景中的特征点都落在同一平面上,比如墙.地面等,此时可用单应性估计运动. 单应(透射变换)可以看成是仿射变换的拓展.仿射变换在图形中的变换包括:平移.缩放.旋转.斜切及它们的组合形式.这些变换的特点是:平行关系和线段的长度比例保持不变,即保持物

OpenCV,计算两幅图像的单应矩阵

平面射影变换是关于其次3维矢量的一种线性变换,可以使用一个非奇异的$3 \times 3$矩阵H表示,$X' = HX$,射影变换也叫做单应(Homography).计算出两幅图像之间的单应矩阵H,那么应用这个关系可以将一个视图中的 所有点变换到另一个视图中. 上图,最右边图像是将最左边图像进行了一次射影变换,变换到中间图像视图后的图像. 使用OpenCV可以调用库函数findHomography计算两幅图像的单应矩阵,其声明如下 Mat findHomography(InputArray sr

SLAM入门之视觉里程计(5):单应矩阵

在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵\(H\),然后调用射影变换函数,将一幅图像变换到另一幅图像的视角中.当时只是知道通过单应矩阵,能够将图像1中的像素坐标\((u_1,v_1)\)变换到图像2中对应的位置上\((u_2,v_2)\),而没有深究其中的变换关系. 单应(Homography)是射影几何中的概念,又称为射影变换.它把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直线映射为直线

从零开始一起学习SLAM | 神奇的单应矩阵

小白最近在看文献时总是碰到一个奇怪的词叫"homography matrix",查看了翻译,一般都称作"单应矩阵",更迷糊了.正所谓:"每个字都认识,连在一块却不认识"就是小白的内心独白.查了一下书上的推导,总感觉有种"硬凑"的意味,于是又找到了师兄... 神奇的单应矩阵小白:师兄~单应矩阵是什么鬼啊?我看书上的推导,每一步勉强能看懂,但还是不太理解其背后的物理意义,感觉不能转化为自己理解的方式啊师兄:哦,我第一次看的时候也是

特征提取与匹配、基础矩阵、单应矩阵、极限约束

Ubuntu16.04 + opencv2.4.9 一.特征提取与匹配 (以ORB特征为例) features.cpp 1 #include<iostream> 2 #include<opencv2/core/core.hpp> 3 #include<opencv2/highgui/highgui.hpp> 4 #include<opencv2/features2d/features2d.hpp> 5 #include<opencv2/calib3d/

线性求解单应矩阵 Homography

定义: 2D单应:给定图像$\mathbb{P}^{2}$中的特征点集$\mathbf{x}_i$和另一幅图像在$\mathbb{P}^{2}$ 中对应的特征点集$\mathbf{x}_{i}^{'}$,  将$\mathbf{x}_i$映射到$\mathbf{x}^{'}_{i}$的射影变换.在实际情况中,点$\mathbf{x}_{i}$和$\mathbf{x}^{'}_{i}$是两幅图像上的点,每幅图像都视为一张射影平面$\mathbb{P}^{2}$ $\mathbf{x}^{'}_{i

【OpenCV新手教程之十八】OpenCV仿射变换 &amp;amp; SURF特征点描写叙述合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中.我们一起探讨了OpenCV

【OpenCV入门教程之十八】OpenCV仿射变换 &amp; SURF特征点描述合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中