问题背景:最近在做图像拼接,思路是首先对输入的两幅图进行特征提取,提取的方法使用的是经典的SIFT(Scale-invariant feature transform)算法;然后进行特征匹配,匹配的思路是将一幅图中的特征点以K-D树的形式进行存储,再遍历另一幅图的所有特征点,在这颗K-D树中寻找与之匹配的特征点;匹配依据为最临近点与次临近点欧氏距离的比值,该比值人为设定,越小,匹配精度越高,相应的匹配点数目也会减少;利用欧氏距离匹配得到的结果,再使用RANASC(Random Sample Consensus)算法进行匹配点的筛选,滤除其中的错配点;使用上一步得到的较为精确的匹配点计算图2到图1的变换矩阵,该矩阵为3行3列,最后一个元素为1,除此之外共8个参数,因此,最少只需要四对匹配点就可以求得该矩阵;最后再基于上述变换矩阵对图2进行透视变换,把图1叠加到变换后的图2上,再做相应的融合,即完成了两幅图片的拼接。
其实上述整个处理流程都是比较常见且通用的方法,具体的代码实现是参考一位博主关于SIFT的讲解。但是在使用过程中,还是出现了不少问题。此处主要介绍在根据变换矩阵进行透视变换时出现的图片信息丢失的问题。
问题描述:先描述一下我遇到的问题和现象。由于暂时还没有理解到透视变换的本质,不过据我的实验效果,我推测是利用一个3*3的矩阵对图片中的每一个像素点求取一个新的坐标位置,再将原始坐标对应的RGB信息赋值到新坐标上,对于变换后可能产生的空隙采用插值的方式进行处理。标题中所谓的“图片信息丢失”问题,即在变换后,原图的某些区域被截取,不能展现完整的原图信息。具体效果如下图所示: