1.SIFT(尺度不变特征变换)原理
SIFT包括兴趣点检测器和描述子。SIFT描述子具有非常强的稳健性,经常和许多不同的兴趣点检测器结合使用。SIFT特征对于尺度,旋转和亮度都具有不变性,因此,它可用于三维视角和噪声的可靠匹配。
SIFT 描述子h(x, y,θ)是对特征点附近邻域内高斯图像梯度统计结果的一种表示,它是一个三维的阵列,但通常将它表示成一个矢量。矢量是通过对三维阵列按一定规律进行排列得到的。特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。
SIFT算法的实现步骤:
1、构建尺度空间,检测极值点,获得尺度不变性;
2、特征点过滤并进行精确定位,剔除不稳定的特征点;
3、在特征点处提取特征描述符,为特征点分配方向值;
4、生成特征描述子,利用特征描述符寻找匹配点;
5、计算变换参数。
2.SIFT图像特征匹配
代码为:
from PIL import Image
from pylab import *
import sys
from PCV.localdescriptors import sift
if len(sys.argv) >= 3:
im1f, im2f = sys.argv[1], sys.argv[2]
else:
im1f = ‘…/data/crans_1_small.jpg’
im2f = ‘…/data/crans_2_small.jpg’
im1 = array(Image.open(im1f))
im2 = array(Image.open(im2f))
sift.process_image(im1f, ‘out_sift_1.txt’)
l1, d1 = sift.read_features_from_file(‘out_sift_1.txt’)
figure()
gray()
subplot(121)
sift.plot_features(im1, l1, circle=False)
sift.process_image(im2f, ‘out_sift_2.txt’)
l2, d2 = sift.read_features_from_file(‘out_sift_2.txt’)
subplot(122)
sift.plot_features(im2, l2, circle=False)
#matches = sift.match(d1, d2)
matches = sift.match_twosided(d1,