Pore-SIFT原理
PSIFT(Pore-Scale-invariant feature transform)是一種檢測局部特征的算法,該算法通過求一幅圖中的特征點(diǎn)(Interest points,or corner points)及其有關(guān)Scale 和 Orientation 的描述子得到特征并進(jìn)行圖像特征點(diǎn)匹配,以得出圖像匹配的效果。
構(gòu)建尺度空間
影像在不同的尺度下用高斯濾波器(Gaussian filters)進(jìn)行卷積(convolved),然后利用連續(xù)高斯模糊化影像差異來找出關(guān)鍵點(diǎn)。關(guān)鍵點(diǎn)是根據(jù)不同尺度下的高斯差(Difference of Gaussians,DoG)的最大值(不同于SIFT,這里Pore-SIFT只尋找高斯差最大的關(guān)鍵點(diǎn))。 由上式可知DoG影像是原始影像與不同尺度倍率的高斯模糊后之差值。Pore-SIFT算法為了求得在不同尺度倍率之下DoG影像的極大值,先將原始影像與不同尺度倍率的高斯模糊進(jìn)行卷積,這些經(jīng)高斯模糊處理后的影像依其尺度倍率以2倍為一單位分組,并且通常為一個選定后的定值,因此在每一組內(nèi)經(jīng)高斯模糊處理后的影像數(shù)量相同,此時將同一組相鄰的經(jīng)高斯模糊處理后的影像兩兩相減可得其DoG影像Figure 1。
DOG尺度空間極值檢測
在尺度空間中,每一個采樣點(diǎn)要和333的鄰域內(nèi)與其他點(diǎn)進(jìn)行比較,若該點(diǎn)為鄰域內(nèi)的最大值(如Figure 2所示),則將該點(diǎn)作為候選點(diǎn)。由于時在多尺度下尋找的候選點(diǎn),該候選點(diǎn)為該鄰域內(nèi)的極大值點(diǎn),利用該點(diǎn)所提取出的特征能具有非常好的尺度不變特征,對于圖像小范圍的縮放與模糊具有良好的魯棒性。
邊緣響應(yīng)的去除
在不同尺寸空間下可能找出過多的關(guān)鍵點(diǎn),有些關(guān)鍵點(diǎn)可能相對不易辨識或易受噪聲干擾。Pore-SIFT算法的下一步將會借由關(guān)鍵點(diǎn)附近像素的資訊、關(guān)鍵點(diǎn)的尺寸、關(guān)鍵點(diǎn)的主曲率來定位各個關(guān)鍵點(diǎn),借此消除位于邊上或是易受噪聲干擾的關(guān)鍵點(diǎn)。一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個2×2 的Hessian矩陣H求出:
曲率滿足要求的點(diǎn)應(yīng)滿足如下要求,其中r是給定的閾值,一般取r=10:
經(jīng)過計(jì)算后剩余下的點(diǎn)便是下一步的候選點(diǎn)。
計(jì)算關(guān)鍵點(diǎn)主方向并旋轉(zhuǎn)
在方位定向中,關(guān)鍵點(diǎn)以相鄰相素的梯度方向分布作為指定方向參數(shù),使關(guān)鍵點(diǎn)描述子能以根據(jù)此方向來表示并具備旋轉(zhuǎn)不變性。 經(jīng)高斯模糊處理后的影像 ,在
尺寸下的梯度量
與方向
可由相鄰之像素值計(jì)算:
計(jì)算每個關(guān)鍵點(diǎn)與其相鄰像素之梯度的量值與方向后,為其建立一個以10度為單位36條的直方圖。每個相鄰像素依據(jù)其量值大小與方向加入關(guān)鍵點(diǎn)的直方圖中,最后直方圖中最大值的方向即為此關(guān)鍵點(diǎn)的方向, 將圖像進(jìn)行正交旋轉(zhuǎn),旋轉(zhuǎn)至主方向 (Figure 3),確保每個PSIFT特征旋轉(zhuǎn)不變性。
關(guān)鍵點(diǎn)描述子
找到關(guān)鍵點(diǎn)的位置、尺寸并賦予關(guān)鍵點(diǎn)方向后,將可確保其移動、縮放、旋轉(zhuǎn)的不變性。此外還需要建立一個描述子向量,使其在不同光線與視角下皆能保持其不變性。 首先每個88的子區(qū)域內(nèi)建立一個8方向的直方圖,在關(guān)鍵點(diǎn)周圍2828的區(qū)域中一共64個子區(qū)域(子區(qū)域的大小為44),計(jì)算每個像素的梯度量值大小與方向后加入此子區(qū)域的直方圖中(8個方向)的梯度大小(如圖Figure 4所示),共可產(chǎn)生648=512維,并將其歸一化,該向量即為關(guān)鍵點(diǎn)的描述子。將每個點(diǎn)提取出的512維特征向量組成一個特征矩陣, 至此形成一張完整圖像的Pore-SIFT特征描述符矩陣(大小k*512,k為特征點(diǎn)個數(shù) )
Pore-SIFT特征匹配
得到不同圖像的Pore-SIFT特征后,利用特征便可比較兩張圖像的相似之處,在此使用傳統(tǒng)的計(jì)算特征歐式距離的方法,生成的Image_A、Image_B兩幅圖的描述子,(分別是k1512維和k2512維),就將兩圖中各個scale(所有scale)的描述子進(jìn)行匹配,匹配上512維即可表示兩個特征點(diǎn)匹配上了。實(shí)際操作中,為了減少誤差,增強(qiáng)魯棒性,取圖像Image_A中的某個關(guān)鍵點(diǎn),并找出其與圖像Image_B中歐式距離最近的前兩個關(guān)鍵點(diǎn),在這兩個關(guān)鍵點(diǎn)中,如果最近的距離除以次近的距離小于某個比例閾值,則接受這一對匹配點(diǎn)。降低這個比例閾值,PSIFT匹配點(diǎn)數(shù)目會減少,但更加穩(wěn)定。閾值的取值范圍在0.4~0.8之間都是可以接受的,根據(jù)不同的需求有不同的取值。
用于人臉匹配有很好的效果。
個人實(shí)現(xiàn)的PSIFT的Python代碼:https://github.com/BlackJocker1995/PSIFT_python