Python-opencv-SIFT尺度不变特征变换

学习目标:

提示:基于Python-opencv-SIFT尺度不变特征变换


学习内容:

提示:SIFT尺度不变特征变换

2004年,不列颠哥伦比亚大学的D.Lowe在他的论文《尺度不变关键点中的独特图像特征》中提出了一种新算法,即尺度不变特征变换(SIFT),该算法提取关键点并计算其描述算符。
SIFT算法主要包括四个步骤:

  1. 尺度空间极值检测
    LoG用作斑点检测器,可检测由于σ的变化而导致的各种大小的斑点。简而言之,σ用作缩放参数。低σ的高斯核对于较小的拐角给出比较高的值,而高的σ的高斯核对于较大的拐角而言非常合适。因此我们可以找到整个尺度核空间上的局部最大值,这给我们(x,y,σ)值的列表,这意味着在(x,y)在σ尺度上有一个潜在的关键点。但这种LoG代价昂贵,因此SIFT算法使用的是高斯差值,它是LoG的近似值。高斯差是作为具有两个不同σ的图像的高斯模糊差而获得的,设为σ和kσ。此过程是针对高斯金字塔中图像的不同八度完成的。
    SIFT
    一旦找到该DoG(高斯差分金字塔),便会在图像上搜索比例和空间上的局部极值。例如,将图像中的一个像素与其8个相邻像素以及下一个比例的9个像素和前一个比例的9个像素进行比较。如果是局部极值,则可能是关键点。从根本上说,关键点是最好的代表。
    在这里插入图片描述
  2. 关键点定位
    一旦找到潜在的关键点位置,就必须对其进行优化以获取更准确的结果。他们使用了标度空间的泰勒级数展开来获得更精确的极值位置,如果该极值处的强度小于阈值,则将其拒绝。
  3. 方向分配
    现在,将方向分配给每个关键点,以实现图像的旋转不变性。根据比例在关键点位置附近采取领域,并在该区域中计算梯度大小和方向。创建了一个具有36个覆盖360度的bin的方向直方图(通过梯度幅度和σ等于关键点比例的1.5的高斯加权圆窗加权)。提取直方图中的最高峰,并且将其超过80%的任何峰也视为计算方向。它创建的位置和比例相同但方向不同的关键点。它有助于匹配的稳定性。
  4. 关键点描述
    现在创建了关键点描述符。在关键点周围采用1616的领域。它分为16个44大小的子块。对于每个子块,创建8bin方向直方图。因此共有128个bin值可用。它被表示为形成关键点描述符的向量。除此之外,还采取了几种措施来实现针对照明变化,旋转等的鲁棒性。
    在这里插入图片描述

学习时间:

提示:1s学废


学习产出:

python-opencv中的SIFT

直接看代码

# 导包
import numpy as np
import cv2 as cv

# 选择一个实验朋友的照片
img1 = cv.imread('D:/hou/xiaohou.jpg')
# 朋友脸太大,缩小下比例
img = cv.resize(img1,(500,500))

# 转个灰度
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 从关键点检测开始并进行绘制
sift = cv.xfeatures2d.SIFT_create()
# sift.detect()函数在图像中找到关键点
# kp是关键点列表,des是一个形状为Number_of_Keypoints*128的数字数组
kp,des = sift.detectAndCompute(gray,None)
# 在关键点的位置绘制小圆圈
# 可选参数【cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS】 -> 具有关键点大小的圆,会显示其方向
img = cv.drawKeypoints(gray,kp,img,flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv.imwrite('D:/sift_detect.jpg',img)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值