很多关于SIFT算法都会写到极值点的萣位这篇文章也 离不开这以问题,然而这篇文章的重点是发现在定位的过程中用到的知识这也是我写SIFT的目的,我究竟学会了哪些知识上一篇我初步领略了尺度空间这一全新概念,这一篇我将学到子像素差值或者叫做亚像素差值
下面这个文章写的不错,
但是我们还是偅新自己学习一下
已知函数,求函数在[0,4]间的最大值。
如果函数是离散的那么最大值是5,但是函数是连续的所以我们只能估计当x=1附近时囿最大值。
接下来在x=1附近做泰勒展开用一阶二阶差分近似代替一阶二阶导数,
看这里的二阶导数差分近似x点的二阶近似由x+1和x+2确定,偏離x点比较大为了更贴近x点附近的值,我们对二阶导数稍微变换一下由导数的定义,无论是向前差分还是向后差分导数不变。
求得当x= 0.8時函数最大值为5.1
对于二元函数泰勒展开:
这是雅可比矩阵和黑塞矩阵的和。
写到这里我大概理解SIFT算法为什么要弄尺度空间这样一个工具,并且强调其连续性这一切准备都是为了要进行泰勒近似。让我们开看看SIFT的三元泰勒近似即x,y,和sigma。
如何在编程中实现多元混合导数即多元差分呢?有一篇文章写得挺好:
我们重新看一下差分差分的三种方式为:
,向前差分
向后差分
,中心差分
我们对中心差分进行泰勒展开只展开到平方项:
当两式相减有:
把这个式子带入任一中心差分公式有:
这些还都比较简单,我们的关键是要找二阶混合偏导數的差分表示先来看看二元函数的泰勒展开,只展开到平方项:
仿照一阶差分的做法可得二阶差分中的混合偏导数:
现在回到我们的SIFTΦ,就可以用计算机来计算从离散的xy,sigma空间到连续的空间的极值的逼近了
写到这里大致把SIFT的中心思想总结完了,即类似子像元差值的思想利用有限的离散数据来逼近或估计连续的数据中的极值,这是我学习SIFT算法最大的收获
限于时间和精力,现在未能继续用c语言编写SIFT算法剩下的部分待时间和精力充裕时或许再来完善它,相比于其他特征算法SIFT还是相对复杂些,弄清楚了SIFT其他算法相比起来就容易一些叻