Opencv学习进阶篇---图像特征SIFT

图像特征—SIFT
图像尺度空间

在一定范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,所以要让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同尺度下都存在的特点
尺度空间的获取通常通过高斯模糊来实现

在这里插入图片描述
σ的值控制着模糊的程度,σ的值越大,模糊程度越高
在这里插入图片描述
多分辨率金字塔每一层都有对应多个模糊度不同的图像
在这里插入图片描述

高斯差分金字塔

对相同分辨率的的图像进行差分计算:找差分结果较大的,特征(不同)点,然后用向量做代替
在这里插入图片描述
在这里插入图片描述
DOG空间极值检测:
为了寻找尺度空间的极值点,每个像素点要和其图像区域(同一尺度空间)和尺度域u(相邻的尺度空间)的所有相邻点进行比较,当其大于(或者小于)所有相邻点时,该点就是极值点。如下图所示,中间的检测点要和其所在图像的33邻域的8个点进行比较,也要与上下两层的18个点进行比较,总共需与26个点比较。
注意:每一层最上面的那层图像和最下面的那层图像无法做此操作,因为没有上下层
在这里插入图片描述
关键点的精确定位:
这些关键候选点是DOG空间的局部极值点,而且这些极值点均为离散的点,精确定位极值点的一种方法是,对尺度空间DOG进行曲线拟合,计算其极值点,从而实现关键点的精确定位。
在这里插入图片描述
求一阶导数为0的点,则该点为真正的极值点。
在这里插入图片描述
三维的,大多数论文中的公式引用是下方这种形式的:
在这里插入图片描述
消除边界效应:
前面做了一系列高斯模糊操作,可能会增加了图像的高斯边界响应,故因在此做消除响应操作
在这里插入图片描述
**特征点的主方向:**将点转化成向量
在这里插入图片描述
每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度、方向。具有多个方向的关键点可以被复制成多份,然后将方向值赋值给赋值后的特征点,一个特征点就产生了多个坐标、尺度相等,但方向不同的特征点。
生成特征描述:
在完成关键点的梯度计算后,使用直方图统计领域内像素的梯度和方向。
方向众多,只统计8个主要的方向进行统计。得到主方向。
当主方向和此方向数量比较接近时,也可以拆分成两个方向,得到两个特征向量。
在这里插入图片描述
为了保证特征矢量的旋转不变性,要以特征点为中心,在附近领域内将坐标轴旋转θ角度,即将坐标轴旋转为特征点的主方向。
在这里插入图片描述
旋转之后的主方向为中心取8
8的窗口,求每个像素的梯度幅值和方向,箭头方向代表梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算,最后在每个44的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,即每个特征值由4个种子点组成,每个种子点有8个方向的向量信息。
在这里插入图片描述
论文中建议每个关键点采用4
4的共16个种子点来描述,这样一个关键点就会产生128维的SIFT特征向量,通常这样写[4,4,8],代表4*4,每个8个方向。
在这里插入图片描述
注意:opencv-python3.4.1.15版本之后的SIFT函数已经取消了授权,无法使用使用该函数。
本例中尝试降版本,最低只能降到3.4.2.16,仍无法使用!!!!

img=cv.imread("E:\OpenCVTests/test_1.jpg")
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift=cv.xfeatures2d.SIFT_create()
kp=sift.detect(gray,None)#封装好的,无法显示,需要调用其他函数
img=cv.drawKeypoints(gray,kp,img)
cv.imshow("drawKeypoints",img)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值