SIFT代码运行与使用--README解读
1、在matlab上运行:
- 提取SIFT特征,并以矩阵形式返回:
[image, descrips, locs] = sift('scene.pgm');
- 在图片上显示关键点:
showkeys(image, locs);
显示结果:
3.提取两幅图片的SIFT特征并匹配、显示出来:
match('scene.pgm','book.pgm');
结果显示
2、用于检测SIFT特征的二进制文件
对于linux系统,可以不用在matlab上运行,可以cd 到sift可执行文件所在的目录,直接在终端运行命令:
./sift -display <book.pgm >result.pgm
会生成result.pgm图片,显示图片的sift特征,相当于matlab中sift然后再showkeys
作者说windows系统也可以生成相同的特征,但是没有尝试
[注意]:作者说可以通过缩放图像分辨率来控制关键点的数量。 尺寸为500像素的图像通常会根据图像内容提供超过1000个关键点,这对于大多数应用来说是足够的。 大多数数码相机的图像在使用前应该大大降低分辨率。 更改图像分辨率是控制关键点数量的最佳方法,因为它是最可靠的大规模关键点,这也比处理大型图像更有效。 当前编译的二进制文件将针对任何维度中尺寸大于约1800像素的图像引发异常。 彩色图像需要适用于灰度(需要转换为灰度图像??)(PGM格式仅适用于灰度图像)
3、使用关键点进行图像匹配的示例
为了描述图像匹配关键点的值,该目录还包含一些简单的C源代码,用于从2个图像中读取关键点,并显示图像之间的最佳匹配,并在连接匹配位置的图像上绘制线条。代码是为Linux编写的,但移植到Windows并不困难。
匹配是在第二张图像中寻找第一张图片中每一个关键点的2个最临近点,并且只接受到第一个最近点的距离小于到第二个最近点的距离的0.6的匹配,可以调大阈值0.6以选择更多匹配,或者调小以选择最可靠的匹配。(具体理由参见论文)
1、为每个测试图像创建关键点:
sift <book.pgm> book.key
sift <scene.pgm> scene.key
省略下面的匹配命令,因为我主要在matlav=b上运行
[注意] 当然,这种匹配方法过于简单,通过使用更高的距离阈值并在所得到的匹配集之间强制执行视点一致性约束以消除异常值,可以找到更多正确的匹配,如我的研究论文中所述。