矩阵的一个重要作用是将空间中的点变换到另一个空间中。这个作用在国内的《线性代数》教学中基本没有介绍。要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中一种方法,单应性变换会涉及到单应性矩阵。单应性变换的目标是通过给定的几个点(通常是4对点)来得到单应性矩阵。下面单应性矩阵的推导过程。

$$

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$,它们是在同一平面上。 则有下面的公式:

\begin{equation}

b=Ha^T

\end{equation}

即:

\begin{equation}

\left\{

\begin{aligned}

x_1=h_{11}x + h_{12}y + h_{13}\\

y_1=h_{21}x + h_{22}y + h_{23}\\

1=h_{31}x + h_{32}y + h_{33} \\

\end{aligned}

\right.

\end{equation}

由上面这个公式中的$1=h_{31}x + h_{32}y + h_{33}$可得到下面两个等式

\begin{equation}

\left\{

\begin{aligned}

x_1=\frac{x_1}{1}=\frac{h_{11}x + h_{12}y + h_{13}}{h_{31}x + h_{32}y + h_{33}}\\

y_1=\frac{y_1}{1}=\frac{h_{21}x + h_{22}y + h_{23}}{h_{31}x + h_{32}y + h_{33}}\\

\end{aligned}

\right.

\end{equation}

\begin{equation*}

\Rightarrow

\end{equation*}

\begin{equation}

\left\{

\begin{aligned}

h_{11}x+h_{12}y+h_{13}=h31xx_1+h_{32}yx_1+h_{33}x_1\\

h_{21}x + h_{22}y + h_{23}=h31xy_1+h_{32}yy_1+h_{33}y_1\\

\end{aligned}

\right.

\end{equation}

\begin{equation*}

\Rightarrow

\end{equation*}

\begin{equation}

\label{eq1}

\left\{

\begin{aligned}

0=h31xx_1+h_{32}yx_1+h_{33}x_1-(h_{11}x+h_{12}y+h_{13})\\

0=h31xy_1+h_{32}yy_1+h_{33}y_1-( h_{21}x + h_{22}y + h_{23})\\

\end{aligned}

\right.

\end{equation}

对于方程$\eqref{eq1}$ ,可写成一个矩阵与一个向量相乘,即:

\begin{equation}

\label{eq2}

\begin{bmatrix}

-x & -y &-1&0&0&0&xx_1&yx_1&x_1 \\

0&0&0& -x & -y &-1&xy_1&yy_1&y_1 \\

\end{bmatrix} h=0

\end{equation}

其中,$h=[h_{11} , h_{12} , h_{13} , h_{21} , h_{22} , h_{23} , h_{31} , h_{32} , h_{33}]^T$,是一个9维的列向量。若令:

\begin{equation}

A=\begin{bmatrix}

-x & -y &-1&0&0&0&xx_1&yx_1&x_1 \\

0&0&0& -x & -y &-1&xy_1&yy_1&y_1 \\

\end{bmatrix}

\end{equation}

则$\eqref{eq2}$可以记为

\begin{equation}

Ah=0

\end{equation}

这里的$A\in R^{2\times 9}$。这只是1对点所得到的矩阵$A$,若有4对点,则得到的矩阵$A\in R^{8\times 9}$。如何求解向量$h$呢?方法很简单,真接对$A$进行SVD分解,即

\begin{equation}

U*\Sigma*V^T

\end{equation}

然后取$V$的最后一列出来作为求解$h$。因为矩阵$A$是行满秩,即只有一个自由度。

具体实现时,先要得到两幅图,然后在两幅图之间找到4对点的坐标,由此得到矩阵$A$,然后在matlab中可以这样实现:

[U,S,V]=svd(A);

h=V(:,9);

H= reshape(h,3,3);

由单应性矩阵可以得到仿射变换,还可以在单应性矩阵上做图像拼接。

【Computer Vision】图像单应性变换/投影/仿射/透视

一.基础概念 1. projective transformation  = homography = collineation. 2. 齐次坐标:使用N+1维坐标来表示N维坐标,例如在2D笛卡尔坐标 ...

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

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

相机标定 和 单应性矩阵H

求解相机参数的过程就称之为相机标定. 1.相机模型中的四个平面坐标系: 1.1图像像素坐标系(u,v) 以像素为单位,是以图像的左上方为原点的图像坐标系: 1.2图像物理坐标系(也叫像平面坐标系)(x ...

python opencv3 FLANN单应性匹配

git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...

opencv 仿射变换 投射变换, 单应性矩阵

仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform( ...

OpenCV-Python 特征匹配 + 单应性查找对象 | 四十五

目标 在本章节中,我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象. 基础 那么我们在上一环节上做了什么?我们使用了queryImage,找到 ...

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

平面射影变换是关于其次3维矢量的一种线性变换,可以使用一个非奇异的$3 \times 3$矩阵H表示,$X' = HX$,射影变换也叫做单应(Homography).计算出两幅图像之间的单应矩阵H,那 ...

相机标定:PNP基于单应面解决多点透视问题

利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

随机推荐

PHP分页类,生成分页html字符串

Web动画API教程1:创建基本动画

本人转载自: Web动画API教程1:创建基本动画

android 左右翻页

布局: <?xml version="1.0" encoding="utf-8"?>

设计模式学习之工厂方法(Factory Method&comma;创建型模式)(2)

接着上一讲中的简单工厂继续讲解,假如我们有了需要采集新的水果梨子,如果我们使用简单工厂中的方式的话,就会新增一个Pear类,然后实现Fruit类,然后修改FruitFactory类中获取实例的方法 g ...

C&plus;&plus;学习25 纯虚函数和抽象类

在C++中,可以将成员函数声明为纯虚函数,语法格式为: ; 纯虚函数没有函数体,只有函数声明,在虚函数声明结尾加上=0,表明此函数为纯虚函数. 最后的=0并不表示函数返回值为0,它只起形式上的作用,告 ...

Oracle RAC OCR 的备份与恢复

Oracle Clusterware把整个集群的配置信息放在共享存储上,这些信息包括了集群节点的列表.集群数据库实例到节点的映射以及CRS应用程序资源信息.也即是存放在ocr 磁盘(或者ocfs文件) ...

从零开始学C&plus;&plus;之构造函数与析构函数(三):深拷贝与浅拷贝、空类

一.深拷贝与浅拷贝 说得简单点,假设一个类有指针成员,如果在拷贝的时候顺带连指针指向的内存也分配了,就称为深拷贝:如果只是分配指针本身的内存,那就是浅拷贝.浅拷贝造成的问题是有两个指针指向同块内存,d ...

ajax bookstrap美化网页,并实现页面的加载,删除与查看详情

Bookstrap:美化页面: Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS ...

Svn———搭建及配置

一.Svn介绍 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows ...

lamba匿名函数与内置函数&sol;递归

max 循环出的参数给func,func的返回值给key,然后比较那个返回值max(salary,key=func) 匿名函数:max(salary,key=lamba x:salaries[x]) ...

透视变换 单应性矩阵怎么求 matlab,单应性(homography)变换的推导相关推荐

  1. 单应性矩阵和仿射变换_单应矩阵 基本矩阵 本质矩阵的区别与联系

    1. 叉乘 2. 双目系统 3. 对极几何 (Epipolar Geometry) 对极几何定义:是两个视图间的内部射影几何,它只与摄像机的内部参数和相对位姿有关,与场景结构无关. 基线(baseli ...

  2. matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园

    1.Matlab中求矩阵的秩 >> a = rand(6) a = 0.8147 0.2785 0.9572 0.7922 0.6787 0.7060 0.9058 0.5469 0.48 ...

  3. 基于匹配点集对单应性矩阵进行估计

    基于匹配点集对单应性矩阵进行估计 2020/4/28 FesianXu 前言 在立体视觉中,对单应性矩阵进行估计是一个很重要的任务,我们在之前的博文[1,2,3]中的讨论中都或多或少地涉及到了单应性矩 ...

  4. 再谈单应性矩阵及位姿分解

    最近在研究无人驾驶的定位问题,想利用车载摄像头提取的车道线.配合厂商提供的GNSS+IMU(非ADMA级别方案,存在一定误差),还有地图厂商提供的HD map(包含车道线元素)纠正定位.也就是说不依赖 ...

  5. 可追踪性矩阵和需求追溯性矩阵

    文章目录 可追踪性矩阵的维基百科解释 **不同类型的需求可追溯性矩阵** 什么是需求可追溯性矩阵(RTM)? 示例模板 什么是可追溯性矩阵? (TM 值) 什么是需求追踪矩阵? 为什么 RTM 很重要 ...

  6. 单应性矩阵 matlab,matlab 在求定标中单映性矩阵

    从年前就开始编写一个标定的程序,可是总是在不小心程序改动一点,算出来的内参是复数形式,不知道问题出在哪里,构建求单映性矩阵H的矩阵L的时候,如果图像上角点选取不同就会出现很大的差异,今天终于又调试了很 ...

  7. 单应性矩阵 matlab,四点求解单应性矩阵

    网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细说明很少.这里说说自己的理解. 首先贴出matlab代码 % 返回值 H 是一个3*3的矩阵 % pts1 和 pt ...

  8. opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...

  9. 单应性矩阵 matlab,单应性矩阵MATLAB程序

    单应性(Homography)描述的是同一个平面上的点,在两幅视图上的像点之间存在一一对应的映射关系,本质上是将一个目标点在两幅图像中相互转移.对应关系如图所示. 本文计算单应性矩阵在两个图像平面中都 ...

最新文章

  1. ABAP开发常用的表
  2. Python标准库之csv(1)
  3. php复选框样式,如何自定义checkbox样式?附代码
  4. 计算机网络 --- 数据链路层CSMA/CA协议
  5. 新手silverlight练习--五子棋( 二 )
  6. sql server键查找_如何查找SQL Server版本
  7. 三言两语话敏捷(2) - 持续集成
  8. Opencv中convertTo函数2
  9. 【java】信号量机制
  10. 台式机和笔记本快速互拷超大文件
  11. 理解手机中的感应器模块:重力感应/光线感应/电子罗盘/陀螺仪模块功能
  12. CPU设计——RISC-V指令集
  13. project web architecture
  14. word中,去表格格式,把表格转换为文本的方法
  15. 抓包分析 TCP 握手和挥手
  16. 文件实现输入三行hello,实现在每个hello后面换行
  17. Last Corollary CodeForces - 1364D(dfs树找最小环)
  18. Nagios Core 复现
  19. 使用python的wordcloud包实现中文标签云制作
  20. 英特尔oneAPI——异构计算学习总结

热门文章

  1. opencv 所有lib文件
  2. MultiDex 相关问题解决记录
  3. 谷歌身份验证 asp.net core和go的实现
  4. 2021-12-20 WPF上位机 121-三菱PLC协议读写代码的封装
  5. Bitvise SSH Client连接不上linux,“请求被积极拒绝”
  6. 通用的商城系统后台管理ui框架模板
  7. [Synology]群辉 MariaDB安装及配置
  8. 企业运维实战之k8s(HPA、Helm)初学者必看,点赞关注后期不迷路
  9. C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)
  10. 方便ppt制作--iSlide插件