SIFT--关键点定位

SIFT主要分四步,这篇主要解释第二步: 关键点的定位。本文将从:定位关键点位置、选取合适的关键点、问题。三个部分来阐述。


定位关键点位置

上篇论文我们提到,通过DoG相邻层之间的比较来获取关键点。还是以图来看。

差分金字塔

即为了寻找尺度空间的极值点,每一个采样点都要和它所有的相邻点进行比较,看是否比它的图像域和尺度域的相邻点大或者小。如图,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的18个点共8+18=26点比较。目的是以确保在尺度空间和二维图像位置空间都检测到极值点。也就是说极值点的比较是在一个3x3的立方体内进行。

具体搜索过程从每组的第二层开始,以第二层为当前层,对第二层的DoG图像中的每个点取一个3x3的立方体,立方体上下层分别为第一层和第三层,即在这三层中搜索得到的极值点既有位置坐标(DoG的图像坐标),又有空间尺度坐标(层坐标)。

第二层搜索完后,再以第三层作为当前层,第二层和第四层分别作为当前层的上下俩层。后面搜索过程类似。

以上,搜索过程完毕,因为以上极值点的搜索是在离散空间中进行的,这个极值点并不是真正意义上的极值点。我们需要知道离散空间得到的极值点与连续空间的极值点之间的差别。用已知的离散空间点插值方法得到连续空间极值点的方法叫做子像元插值。

下图是离散空间极值点与连续空间极值点之间的关系。
离散空间与连续空间

以下从一元函数插值开始引入,利用泰勒展开式,如何得离散空间中真正的极值点。
 D(x,y,σ)  进行泰勒展开得到如下:
这里写图片描述

对上式求导并将结果置0得到极值位置如下:
这里写图片描述

将极值点的位置代入上面第一个式子中,得到结果如下:
这里写图片描述


具体的泰勒展开推导见下:
这里写图片描述

这里写图片描述

这里写图片描述

这里用到 给出矩阵  h(x)  求导的推导。
这里写图片描述

根据上面的推导,做如下推导
这里写图片描述

对于三维子像元插值,  x(x,y,σ)  为三维矢量。当  x^  (相对于插值中心点的偏移量)在任何方向上的偏移量大于0.5时,意味着差值中心点已经偏移到它的临近点上,所以这样的点需要删除。
以上,通过对DoG函数进行泰勒展开,我们能够确定极值点的位置。


合适关键点

上一篇我们讲过,通过在DoG空间之间的比较所确定的关键点并不是最合适的关键点,我们需要对这些特征点做俩个操作:

1、从中去除低响应的特征点。
2、去掉边缘响应强的特征点。

去除低响应的特征点

见上面的推导,当  D(x^)<0.03  时,其响应值过小,这样的点 易受噪声的干扰而变得不稳定,所以需要删除。

去除边缘响应

为了得到稳定的特征点,只是删除DoG响应值低的点是不够的。由于DoG对图像的边缘有较强的响应值,而一旦特征点落在图像的边缘上,这些点就是不稳定的点。所以也要去除这些边缘效应强的特征点。作者采用特征点周围的Hessian矩阵来解决。

一个平坦的DoG相应峰值往往在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率可以通过2x2的Hessian矩阵求出:
Hessian矩阵

以上,D值可以通过求取邻近点像元的差分得到。H的特征值与D的主曲率成正比。这里避免求取具体的特征值,因为我们只关心特征值的比例。
 λ  为Hessian矩阵的特征值。令  α=λmax   β=λmin  ,即有如下:

 Tr(H)=Dxx+Dyy=α+β 

 Det(H)=DxxDyy(Dyy)2=αβ 

如果  r  为最大特征值与最小特征值之间的比值,即设  α=rβ  ,这样便有
 Tr(H)2Det(H)2=(α+β)2αβ=(rβ+β)2rβ2=(r+1)2r 

上式的结果只与俩个特征值的比例有关,而与具体特征值无关。当俩个特征值相等时,  (r+1)2r  的值最小,随着  r  的增加,  (r+1)2r  的值也增加。所以要想检查主曲率的比值小于某一阈值  r  ,只要检查下式是否成立:
 Tr(H)2Det(H)<(r+1)2r 

Lowe在论文中给出  r=10  。也就是说,对于主曲率比值大于10的特征点将被删除,否则这些特征点将被保留。上述运算比求取矩阵H的具体特征值计算量要小的多。


一些问题

以下是定位关键点过程的一些疑惑:
1、在DoG空间中相邻的26个点间比较得到最大值或者最小值??
中心点与26个点分别比较俩次,看是否有最大值或是否有最小值。

2、在DoG空间3x3立方体间26个点进行比较得到待选关键点,那么如果中心点在边缘点呢???
如果中心点在边缘点,直接舍弃。

3、  σ  在计算中到底如何取值????
opensift中以第二层尺度  σ  作为初始值开始计算,Lowe论文中(一直推导的)是以第一层开始的。

SIFT - DCT变换结合了尺度不变特征变换(SIFT)和离散余弦变换(DCT)的特点,以下从原理、应用及相关技术进行介绍。 ### 原理 SIFT(尺度不变特征变换)是一种在图像中检测和描述局部特征的算法,它具有尺度、旋转和光照不变性。其主要步骤包括尺度空间极值检测、关键点定位、方向分配和关键点描述符生成。DCT(离散余弦变换)是一种将信号从时域转换到频域的变换方法,常用于图像压缩和特征提取,它将图像的空间域信息转换为频域系数,能够突出图像的全局特征。SIFT - DCT变换结合了两者的优势,先通过SIFT提取图像的局部特征点,再对包含这些特征点的区域进行DCT变换,从而得到同时具有局部和全局特征的特征表示 [^1]。 ### 应用 在医学图像水印技术中,SIFT - DCT变换有重要应用。基于SIFT - DCT感知哈希的医学图像水印算法,利用医学图像变换域中的鲁棒哈希序列构建零水印,不修改医学图像的特征,能适应医学数据特点,抵抗强攻击,具有很强的鲁棒性 [^1]。此外,在图像超分辨检测中,SIFT配准法作为稳定化方法之一,结合DCT相关特性可能有助于更准确地对多帧低分辨率图像进行处理,以实现超分辨 [^3]。 ### 相关技术 在图像特征提取方面,SIFT - DCT变换与其他特征提取方式有对比。如SIFT - SIFT方式提取的特征点和MSER - SIFT提取的特征点数量不同,虽然MSER - SIFT精度会有些下降,但时间上有显著提升 [^2]。在图像处理系统中,还涉及多种与SIFT - DCT变换相关的功能,如运动模糊调节、滤波检测、边缘检测等。运动模糊调节支持去运动模糊功能及多种参数调节;滤波检测支持多种图像滤波功能;边缘检测支持多种算子进行边缘检测及特定阈值调整的边缘检测功能 [^3]。 ### 代码示例 以下是一个简单的Python示例,展示如何使用OpenCV库进行SIFT特征提取和DCT变换: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE) # SIFT特征提取 sift = cv2.SIFT_create() keypoints, descriptors = sift.detectAndCompute(image, None) # 对图像进行DCT变换 dct_image = cv2.dct(np.float32(image)) # 显示结果 cv2.drawKeypoints(image, keypoints, image) cv2.imshow('SIFT Keypoints', image) cv2.imshow('DCT Image', np.log(1 + np.abs(dct_image))) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值