Project

General

Profile

v0.2

新增内容

  1. 大幅改进匹配算法
  2. 增加投影矩阵计算、图像缝合内容
  3. 实现两幅图像在平面上的无缝拼接
  4. 实现摄像头在低分辨率条件下的实时视频图像拼接

代码的一些小优化

  • SIFT算法本身、特征点匹配算法用了SPEEDED UP IMAGE MATCHING USING SPLIT AND EXTENDED SIFT FEATURES和VF-SIFT: Very Fast SIFT Feature Matching中提出的方法进行了改写。匹配800*600图像的时间从6秒多压缩到1.2秒左右,且并未感觉到最后融合质量下降。其中,第一篇文章的方法经多次试验,错配率很少提速明显,被完全采纳;第二篇文章的方法部分采纳,其的方法是添加4个独立变量:这样虽然可以进一步提速,但匹配精度下降明显,错配率上升,对投影矩阵计算产生很大影响,经过试验,只添加1个变量能达到时间和质量的平衡。
  • 用RANSAC计算投影矩阵后需使用LM算法进行矫正。传统的方法是用RANSAC算得一个投影矩阵(该矩阵可以使匹配点对达到最多),只对它使用LM算法进行矫正。这样做得缺点是使用这个矩阵进行LM算法矫正未必能矫正到最好。现在提出的方法是对(匹配点对数>匹配点对数最大值*0.9)的投影矩阵均调用LM算法进行矫正,比较那个矩阵能矫正到最好,就采用哪一个。矫正质量采用函数量化,该函数为=Σ(I1匹配点经投影矩阵变换后到对应的I2匹配点的距离)/匹配点对总数。
  • 为保证时效,图像融合采用线性融合,即重叠区域的值I=w*I1+(1-w)*I2。为保证过渡自然,权重函数采用1+cos(x)。算法会判断两幅图的相对位置,由此计算权重函数矩阵(由于摄像头相对位置不变,该矩阵只需计算一次)。权重函数矩阵采用定点整数,以加快融合图像计算的速度。

现在存在的难以解决的问题

  • 图像根据投影矩阵作几何变换使用的是MATLAB库函数imtransform,但是它比较慢。对于一幅图像的融合,使用这个函数占据了大多数的时间(处理融合两幅640*480的图像需时0.2秒左右,其中imtransform占用0.16秒左右)。这个时间不降下来,实时处理就很困难,但是库函数应该已经优化很多,这个时间可能很难再压缩。
  • 图像融合采用的线性融合,这样做得一个缺点是对于离摄像头很近的物体拼接时会有鬼影(这是由于此物体与其他物体不能近似认为在同一平面上,故其投影矩阵与背景的投影矩阵必然不同,且差距明显,因此背景的投影矩阵变换不适用于此物体)。另外,由于本算法是对重叠区域进行线性过渡,过渡的方向是沿x轴方向或y轴方向取其一,故另一方向的过渡会略微不自然。