SIFT--关键点定位
定位关键点位置
上篇论文我们提到,通过DoG相邻层之间的比较来获取关键点。还是以图来看。
即为了寻找尺度空间的极值点,每一个采样点都要和它所有的相邻点进行比较,看是否比它的图像域和尺度域的相邻点大或者小。如图,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的18个点共8+18=26点比较。目的是以确保在尺度空间和二维图像位置空间都检测到极值点。也就是说极值点的比较是在一个3x3的立方体内进行。
具体搜索过程从每组的第二层开始,以第二层为当前层,对第二层的DoG图像中的每个点取一个3x3的立方体,立方体上下层分别为第一层和第三层,即在这三层中搜索得到的极值点既有位置坐标(DoG的图像坐标),又有空间尺度坐标(层坐标)。
第二层搜索完后,再以第三层作为当前层,第二层和第四层分别作为当前层的上下俩层。后面搜索过程类似。
以上,搜索过程完毕,因为以上极值点的搜索是在离散空间中进行的,这个极值点并不是真正意义上的极值点。我们需要知道离散空间得到的极值点与连续空间的极值点之间的差别。用已知的离散空间点插值方法得到连续空间极值点的方法叫做子像元插值。
下图是离散空间极值点与连续空间极值点之间的关系。
以下从一元函数插值开始引入,利用泰勒展开式,如何得离散空间中真正的极值点。
对
对上式求导并将结果置0得到极值位置如下:
将极值点的位置代入上面第一个式子中,得到结果如下:
具体的泰勒展开推导见下:
这里用到 给出矩阵
根据上面的推导,做如下推导
对于三维子像元插值,
以上,通过对DoG函数进行泰勒展开,我们能够确定极值点的位置。
合适关键点
上一篇我们讲过,通过在DoG空间之间的比较所确定的关键点并不是最合适的关键点,我们需要对这些特征点做俩个操作:
1、从中去除低响应的特征点。
2、去掉边缘响应强的特征点。
去除低响应的特征点
见上面的推导,当
去除边缘响应
为了得到稳定的特征点,只是删除DoG响应值低的点是不够的。由于DoG对图像的边缘有较强的响应值,而一旦特征点落在图像的边缘上,这些点就是不稳定的点。所以也要去除这些边缘效应强的特征点。作者采用特征点周围的Hessian矩阵来解决。
一个平坦的DoG相应峰值往往在横跨边缘的地方有较大的主曲率,而在垂直边缘的方向有较小的主曲率。主曲率可以通过2x2的Hessian矩阵求出:
以上,D值可以通过求取邻近点像元的差分得到。H的特征值与D的主曲率成正比。这里避免求取具体的特征值,因为我们只关心特征值的比例。
设
如果
上式的结果只与俩个特征值的比例有关,而与具体特征值无关。当俩个特征值相等时,
Lowe在论文中给出
一些问题
以下是定位关键点过程的一些疑惑:
1、在DoG空间中相邻的26个点间比较得到最大值或者最小值??
中心点与26个点分别比较俩次,看是否有最大值或是否有最小值。
2、在DoG空间3x3立方体间26个点进行比较得到待选关键点,那么如果中心点在边缘点呢???
如果中心点在边缘点,直接舍弃。
3、
opensift中以第二层尺度