透视变换--图像拼接

前言

    在图像拼接领域中,透视矩阵起着至关重要的作用,网络上关于这一知识的介绍已经很多,本人在此稍加总结和归纳一下,也方便自己今后查找一些结论性的要点(别人的再怎么好,还是自己的看起来舒服:)),接下来,就让我们对透视矩阵做一番深入性的认识吧。

一、透视矩阵基础介绍

    我们所说的透视矩阵实际上是一个3x3维的矩阵,图像经过它的变换后(即用图像像素矩阵乘以该透视矩阵),可以呈现出各种透视和仿射效果:

    简单看一眼上图,基本可以从图中看出仿射变换和透视变换的区别:仿射变换可以把图像放大、缩小、旋转、或者是变成平行四边形,而透视变换除了获得仿射变换的这些效果之外,还能将图片变成梯形。

二、透视矩阵

    稍微了解了透视矩阵的用途之后,我们来看一下透视矩阵的真正面目吧,它的一般表达形式为:

    只是我们在计算完透视矩阵之后都会把H矩阵的所有元素都除以a33,于是,我们最后得到的H矩阵是这样的:

    ——式2.1

    获得了透视矩阵之后,就可以进行图像的变换了:——式2.2

    其中,u,v分别为当前图片的横坐标和纵坐标,变换后的图像坐标是x’/z’和y’/z’,即以下表达式中的x和y:

     ——式2.3

    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,看看经过各种透视变换后的图片效果:

[plain] view plain copy

  1. img = imread('lena.jpg');  
  2. H =[ 1     0     0;  
  3. 0     1     0;  
  4. 0     0     1];  
  5. tform = projective2d(H);  
  6. img_H = imwarp(img,tform);  
  7. imshow(img_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等

转载自:https://blog.csdn.net/zchang81/article/details/73409974

猜你喜欢

转载自blog.csdn.net/baidu_38172402/article/details/88920639