SIFT特征提取与检索

本文详细介绍了SIFT(尺度不变特征变换)特征提取算法,包括尺度空间极值检测、关键点定位、方向确定和关键点描述四个步骤。通过SIFT算法,实现了对不同条件下图像的稳定特征匹配,具有尺度、旋转不变性。尽管存在实时性和特征点数量等问题,但SIFT在图像不变特征提取中表现出色。
摘要由CSDN通过智能技术生成

SIFT特征提取与检索

1、SIFT特征提取算法介绍

1.1 算法综述
SIFT算法是用来提取图像局部特征的经典算法,SIFT算法的实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。

2、实现步骤

SIFT特征检测主要包括以下4个基本步骤:

  1. 尺度空间极值检测: 搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
  2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
  3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
  4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

3、主要步骤

  1. 建立尺度空间,即建立高斯差分(DoG)金字塔
  2. 在尺度空间中检测极值点,并进行精确定位和筛选创建默认大小的内存存储器
  3. 特征点方向赋值,完成此步骤后,每个特征点有三个信息:位置、尺度、方向 计算特征描述子

在这里插入图片描述

4、两图片SIFT特征匹配

所用素材
在这里插入图片描述
在这里插入图片描述
实现结果:
在这里插入图片描述
当两图像差异极小时:
在这里插入图片描述
实现小结:
由上面两张图可知,SIFT算法匹配出的特征点更多,这是因为SIFT算法具有尺度和旋转不变性,即使两张图大小不一样、角度不一致也不会影响匹配结果,具有准确性和稳定性。

CODE:

from numpy import arange, array
from pylab import *
from PIL import Image
from numpy import *
import os


def process_image(imagename, resultname, params="--edge-thresh 10 --peak-thresh 5"):
    """处理一幅图像,然后将结果保存在文件中"""

    if imagename[-3:] != 'pgm':
        # 创建一个pgm文件
        im = Image.open(imagename).convert('L')
        im.save('tmp.pgm')
        imagename = 'tmp.pgm'

    cmmd = str("sift " + imagename + " --output=" + resultname + " " + params)
    os.system(cmmd)
    print('processed', imagename, 'to', resultname)


def read_features_from_file(filename):
    """读取特征值属性值,然后将其以矩阵形式返回"""

    f = loadtxt(filename)
    return f[:, :4], f[:, 4:]  # 特征位置,描述子

def plot_features(im, locs, circle=False):
    """显示带有特征的图像
        输入:im(数组图像),locs(每个特征的行、列、尺度和方向角度)"""

    def draw_circle(c,r):
        t = arange(0,1.01,.01)*2*pi
        x = r*cos(t) + c[0]
        y = r*sin(t) + c[1]
        plot(x,y,'b',linewidth=2)

    imshow(im)
    if circle:
        for p in<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值