图像拼接之转透视矩阵
来源:互联网 发布:韶关市网络问政平台 编辑:程序博客网 时间:2024/06/05 08:17
前言
在图像拼接领域中,透视矩阵起着至关重要的作用,网络上关于这一知识的介绍已经很多,本人在此稍加总结和归纳一下,也方便自己今后查找一些结论性的要点(别人的再怎么好,还是自己的看起来舒服:)),接下来,就让我们对透视矩阵做一番深入性的认识吧。
一、透视矩阵基础介绍
我们所说的透视矩阵实际上是一个3x3维的矩阵,图像经过它的变换后(即用图像像素矩阵乘以该透视矩阵),可以呈现出各种透视和仿射效果:
简单看一眼上图,基本可以从图中看出仿射变换和透视变换的区别:仿射变换可以把图像放大、缩小、旋转、或者是变成平行四边形,而透视变换除了获得仿射变换的这些效果之外,还能将图片变成梯形。
二、透视矩阵
稍微了解了透视矩阵的用途之后,我们来看一下透视矩阵的真正面目吧,它的一般表达形式为:
只是我们在计算完透视矩阵之后都会把H矩阵的所有元素都除以a33,于是,我们最后得到的H矩阵是这样的:
——式2.1
x和y分别为变换后图像的横坐标和纵坐标。
透视矩阵中的元素组合有着其特殊功能:a11、a12、a21、a22能控制图像的缩放、修剪以及旋转,a31、a32能控制图像的平移,a13、a23能将图像进行透视变换。
三、几种典型的仿射变换:
既然透视变换包括了仿射变换,在这里让我们先来了解一下基本的仿射变换吧:
1、 平移变换(Translation):
将图像的每一像素点平移(x+tx,y+ty),变换矩阵为,变换效果如下:2、缩放变换(scale):
将整体图像横坐标放大(缩小)sx倍,纵坐标放大(缩小)sy倍,变换矩阵为,变换效果如下:3、剪切变换(shear):
剪切变换并不是把图像进行裁剪,而是将方形变平行四边形的过程,其变换矩阵如下:——纵向剪切——横向剪切 ——相当于横向剪切和纵向剪切的组合
变换效果如下:
4、旋转变换(rotation)
指的是将图像以其中心位置旋转某一角度,其变换矩阵为:变换效果如下:
如果需要对图片进行一个简单的仿射变换,我们可以用几个不同功能的仿射矩阵进行组合:img*H1*H2*H3(img代表的是图像矩阵,H1是第一次变换的矩阵,H2是第二次变换的矩阵,H3是第三次变换的矩阵)
在此附一小段matlab代码,大家可以更改里面的透视矩阵H,看看经过各种透视变换后的图片效果:下图列出了一些常用的转换矩阵(该图来源于网络,在此对矩阵做了转置处理):
四、确定变换后图像的尺寸大小
我们写代码时,需要定义一个新图像变量以接收这个变换后的图像,那这个新图像的大小该如何确定呢?(第一次写这代码时发现拼接结果不对,调试半天后发现是定义这个新图像时没有赋予正确的尺寸)
其实很简单,我们只需要确定原图像四个顶点经过透视变换计算后的新坐标,即可确定新图像的大小。
按照这个思路,将原图四个顶点的坐标分别代入2.3式中的u和v变量,可以得到转换过后的顶点坐标:由以上四个坐标可以获得变换后的图像尺寸:
五、根据对应坐标求透视矩阵
有时,我们已经找到了两图中对应的匹配点,需要通过这些匹配点求其相应的透视矩阵,这个问题的典型应用就是图像的无缝拼接,它首先需要分别找到两图中的特征点(sift、surf特征等等),然后在两图中匹配对应的特征点(即图1的特征点在图2中出现的位置),之后通过这些匹配特征点的坐标,计算出透视矩阵。要计算透视矩阵,我们还是要回到公式2.3,透视矩阵所求的变量共有8个(a33=1,其余都是要求的对象),根据方程组求解的基本知识,我们需要8个等式才能求出这8个变量,而取4对匹配点代入公式2.3正好可以组成8个等式,剩下的就是方程组求解的问题了。
在此顺带一提,如果你已经知道图片将要变换后的样子(比如要将图片变形放入某一固定模板),四个顶点正好可以作为四个匹配点代入上式,从而获得透视矩阵。
六、总结
本文避免了复杂的理论介绍,直接从应用角度出发,介绍了透视矩阵的功能以及应用,若有错误和不足,请批评指正。七、参考
参考博文链接:http://www.cnblogs.com/ghj1976/p/5199086.html
http://blog.csdn.net/hudaliquan/article/details/52121832等
- 图像拼接之转透视矩阵
- 图像拼接之透视矩阵
- 玩转透视矩阵
- [转]透视矩阵
- opencv之图像拼接
- 图像拼接之MATLAB实现
- 软件光栅器三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
- opencv学习--图像拼接之 Stitcher
- OPenCV 图像拼接之------stitching和stitching_detailed
- opencv自带之图像拼接
- 图像拼接-硬拼接
- 图像拼接
- 图像拼接
- 图像拼接
- 图像拼接
- 图像拼接
- 图像拼接
- 图像拼接
- 删除Mac中的Windows启动项
- AVC(H.264) FLV 打包
- 栈退出应用程序
- LeetCode hard 45. Jump Game II
- 斐波那契数列
- 图像拼接之转透视矩阵
- 【Tensorflow】辅助工具篇——tensorflow slim(TF-Slim)介绍
- CAS SSO 单点登录 第二篇
- memset函数使用指南
- Java 线程池 Executor框架(2)FutureTask
- ffmpeg关于timebase的理解
- 回顾总结-----第九届中国云计算大会,量子计算机为最大亮点
- 前端后台的curd
- Java 8 Streams map 示例