MATLAB图像融合拼接

MATLAB图像融合拼接

本文说明的内容是图像拼接,采用基于特征点的匹配方法将两张定点拍摄的照片进行拼接,合成一张图,将全景图生成简化成两张图片的拼接,具体可以分为以下几点:

掌握图像灰度化、图像投影变换、图像特征点提取、图像仿射矩阵变换及图像融合。

1、在数字图像的预处理中,灰度图像是进行图像识别与处理的基础。彩色图像转换为灰度图像的方法主要有平均值法、最大值法和加权平均值法。

2、图像的投影变换也是图像拼接不可或缺的过程,待拼接的图像素材往往不在一个坐标系下,直接拼接会因为角度的问题导致景物扭曲变形,目前普遍的方式是将图像投影到几何体表面上,如球面,立方体或柱面上。

3、特征点是进行本图像匹配方法的基础,质量的好坏将直接影响匹配的精度和效率,特征点应具有旋转、平移不变形等特性,保证不会因为相机的曝光等原因造成图像的错误匹配。

4、图像特征点提取之后,需要根据特征点计算图像的放射矩阵,从而对图像进行变换而实现拼接。放射变换的过程中,插值的方法确保图像不失真。

5、图像拼接完成后,最后需要将图像融合,使两幅图像不会因为曝光等原因造成可视的匹配错误。


MATLAB图像融合拼接_第1张图片


图1 基于特征点图像拼接步骤

详细步骤:

1、图像的灰度化

在图像处理中,灰度化一直作为预处理的一部分,有时不仅仅是算法的需要,也是将三维降成一维从而减小计算量与增加运行速度的重要方法。彩色图像转换为灰度图像的方法有平均值法、最大值法及加权平均值法,其转换公式为:

平均值法,gray=(R+G+B)/3;

最大值法,gray=max(R,G,B)

加权平均值法,gray=(R×0.3+G×0.59+B×0.11)

其中 R、G、B 为红、绿、蓝分量,gray 为转换后的灰度值。本程序中采用matlab自带的rgb2gray函数,该函数是用加权平均值法计算的。

2、投影到柱面

图像投影是将待拼接的两幅图像投影到同一个坐标系下,这样能避免因角度问题引起图像中景物扭曲变换,可以分为球面投影、柱面投影、立方体投影。理论上,球面投影更加科学,但是球面投影带来的弊端是储存方式,所以柱面投影往往用的是更多的,柱面张开后是矩形,在数据存储方面具有优势。本方案采用柱面投影的方法,以下是投影公式:


MATLAB图像融合拼接_第2张图片
图2 柱面投影几何关系示意图

MATLAB图像融合拼接_第3张图片

3、特征提取

特征提取的算法有许多,其中Lowe提出的SIFT算法是一种非常有名的算法,得到了广泛的应用,也被不断地改良。这种算法是建立了多尺度空间,确定特征点的位置,同时确定特征点所在尺度,以达到尺度抗缩放的目的,并提取旋转不变特征描述符以达到仿射变换的目的。

特征提取分为两步,第一步是特征点的提取,在图像中找到一些具备一定性质的点,第二步为特征点增加描述,使特征点之间能相互区别。

3.1 特征点提取

特征点是图像中的一些特别的点,它是图像经过变化后得到的点,这些点应该具有一些性质:选取的特征明显,易于提取,在待匹配的图中足够多且分布广。

其中SIFT的特征点提取方法是先利用高斯卷积核生成尺度空间,因为高斯卷积核是实现尺度变换的唯一线性核。二维图像的尺度空间定义:

MATLAB图像融合拼接_第4张图片

在寻找特征值时,为了减少计算量,只提取了半张图的特征点,当提取右半张图像的特征点时,每个特征点的横坐标值就需要增加半个图像宽度。

3.2 增加描述因子

仅仅找到特征点并不够,还应该为这些特征点增加一些描述,使特征点具备区别其他特征点的性质,这样就可以通过两幅图的相互匹配的特征点计算得到两幅图的仿射变换矩阵。


MATLAB图像融合拼接_第5张图片


图3 特征点描述因子的示意图

如图3所示,每个点,根据它周围的点的方向,统计起来共同来描述这个点,那么这个点就有了描述因子,可以区别该特征点与其他特征点。该描述因子就具备了尺度不变性及旋转不变性。尺度的变化不改变方向,而旋转的变换只会引起直方图左移或右移。

4、图像排序

通过特征点,可以计算两幅图像的相关程度,就可以确定图像的排序,从而自动为图像寻找正确的顺序。



MATLAB图像融合拼接_第6张图片


图4图片排序示意图

1、将图像分为两类,队列组和待排序组;

2、对待排序组每幅图计算左右半张图的特征点得到TempPointLft与TempPointRht;

3、计算队列组第一张的左半张和最后一张的右半张得到PointLft与PointRht;

4、找到匹配度最大按序排入队列;

5、重复步骤2-4.

5、计算仿射矩阵

得到了两幅图像之间的特征点,并且根据特征点一一对应的关系便可以得到两幅图像之间的相对关系(拉伸,旋转关系)。以此便可以计算出图像之间的仿射变换矩阵。

MATLAB图像融合拼接_第7张图片

如图5所示,一张图片可以通过与仿射矩阵卷积完成变换,矩阵中各个值可以通过表1确定。由于后续的图像融合中需要运用到图像平移量,所以,对于仿射矩阵,不仅要求理解仿射矩阵意义,还需要知道各个参数所代表的变换意义。

表1 放射性变换中变换矩阵T的取值表

仿射性变换类型
平移 1 0 0 1
缩放 0 0 0 0
逆时针旋转 0 - 0
水平切变 1 0 0 1 0
垂直切变 1 0 0 1 0
整体切边 1 0 1 0

6、插值投影变换

在处理投影变换及后续图像融合中仿射变换中,都需要对坐标变换进行插值计算。如果简单的对坐标点取最近值,会使图像产生锯齿边(其实就是灰度值不连续的一种表现)。而双线性插值就能有效的削弱这种现象。


MATLAB图像融合拼接_第8张图片


图6双线性插值示意图


7、图像融合

两幅图像确定了融合位置还是不够的,在融合区域会出现明显的边界,出现这种现象的原因一般有几种:一方面是亮度差值的存在;一方面是因为投影圆柱面,圆柱面的参数理论值与实际值之间的偏差造成;还有可能是图像获取时,采集到的图像本身就会出现边缘失真现象。针对拼接痕迹,采用浅入浅出的方法。拼接部分的两幅图像分别乘一个系数,该系数随着距离的变化而变化。


MATLAB图像融合拼接_第9张图片


图7渐入渐出融合示意图

你可能感兴趣的:(计算机视觉,机器学习,人工智能,算法,python)