日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SIFT特征提取分析

發(fā)布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SIFT特征提取分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SIFT特征提取分析

SIFT(Scale-invariant feature transform)是一種檢測局部特征的算法,該算法通過求一幅圖中的特征點(diǎn)(interest points,or corner points)及其有關(guān)scale 和 orientation 的描述子得到特征并進(jìn)行圖像特征點(diǎn)匹配,獲得了良好效果,詳細(xì)解析如下:

算法描述

SIFT特征不只具有尺度不變性,即使改變旋轉(zhuǎn)角度,圖像亮度或拍攝視角,仍然能夠得到好的檢測效果。整個算法分為以下幾個部分:

1.?構(gòu)建尺度空間

這是一個初始化操作,尺度空間理論目的是模擬圖像數(shù)據(jù)的多尺度特征

高斯卷積核是實(shí)現(xiàn)尺度變換的唯一線性核,于是一副二維圖像的尺度空間定義為:


其中 G(x,y,σ)?是尺度可變高斯函數(shù)?

(x,y)是空間坐標(biāo),是尺度坐標(biāo)。σ大小決定圖像的平滑程度,大尺度對應(yīng)圖像的概貌特征,小尺度對應(yīng)圖像的細(xì)節(jié)特征。大的σ值對應(yīng)粗糙尺度(低分辨率),反之,對應(yīng)精細(xì)尺度(高分辨率)。為了有效的在尺度空間檢測到穩(wěn)定的關(guān)鍵點(diǎn),提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與圖像卷積生成。

下圖所示不同σ下圖像尺度空間:



關(guān)于尺度空間的理解說明:2kσ中的2是必須的,尺度空間是連續(xù)的。在 ?Lowe的論文中 ,將第0層的初始尺度定為1.6(最模糊),圖片的初始尺度定為0.5(最清晰). 在檢測極值點(diǎn)前對原始圖像的高斯平滑以致圖像丟失高頻信息,所以 Lowe 建議在建立尺度空間前首先對原始圖像長寬擴(kuò)展一倍,以保留原始圖像信息,增加特征點(diǎn)數(shù)量。尺度越大圖像越模糊。?


圖像金字塔的建立:對于一幅圖像I,建立其在不同尺度(scale)的圖像,也成為子八度(octave),這是為了scale-invariant,也就是在任何尺度都能夠有對應(yīng)的特征點(diǎn),第一個子八度的scale為原圖大小,后面每個octave為上一個octave降采樣的結(jié)果,即原圖的1/4(長寬分別減半),構(gòu)成下一個子八度(高一層金字塔)。



尺度空間的所有取值,i為octave的塔數(shù)(第幾個塔),s為每塔層數(shù)

由圖片size決定建幾個塔,每塔幾層圖像(S一般為3-5)0塔的第0層是原始圖像(或你double后的圖像),往上每一層是對其下一層進(jìn)行Laplacian變換(高斯卷積,其中σ值漸大,例如可以是σ, k*σ, k*k*σ),直觀上看來越往上圖片越模糊。塔間的圖片是降采樣關(guān)系,例如1塔的第0層可以由0塔的第3down sample得到,然后進(jìn)行與0塔類似的高斯卷積操作。


2.?LoG近似DoG找到關(guān)鍵點(diǎn)<檢測DOG尺度空間極值點(diǎn)>

為了尋找尺度空間的極值點(diǎn),每一個采樣點(diǎn)要和它所有的相鄰點(diǎn)比較,看其是否比它的圖像域和尺度域的相鄰點(diǎn)大或者小。如圖所示,中間的檢測點(diǎn)和它同尺度的8個相鄰點(diǎn)和上下相鄰尺度對應(yīng)的9×2個點(diǎn)共26個點(diǎn)比較,以確保在尺度空間和二維圖像空間都檢測到極值點(diǎn)。 一個點(diǎn)如果在DOG尺度空間本層以及上下兩層的26個領(lǐng)域中是最大或最小值時,就認(rèn)為該點(diǎn)是圖像在該尺度下的一個特征點(diǎn),如圖所示。


同一組中的相鄰尺度(由于k的取值關(guān)系,肯定是上下層)之間進(jìn)行尋找


s=3的情況

?在極值比較的過程中,每一組圖像的首末兩層是無法進(jìn)行極值比較的,為了滿足尺度變化的連續(xù)性(下面有詳解) 我們在每一組圖像的頂層繼續(xù)用高斯模糊生成了?3 幅圖像,高斯金字塔有每組S+3層圖像。DOG金字塔每組有S+2層圖像.
========================================== 這里有的童鞋不理解什么叫“為了滿足尺度變化的連續(xù)性”,現(xiàn)在做仔細(xì)闡述: 假設(shè)s=3,也就是每個塔里有3層,則k=21/s=21/3,那么按照上圖可得Gauss Space和DoG space 分別有3個(s個)和2個(s-1個)分量,在DoG space中,1st-octave兩項分別是σ,kσ; 2nd-octave兩項分別是2σ,2kσ;由于無法比較極值,我們必須在高斯空間繼續(xù)添加高斯模糊項,使得形成σ,kσ,k2σ,k3σ,k4σ這樣就可以選擇DoG space中的中間三項kσ,k2σ,k3σ(只有左右都有才能有極值),那么下一octave中(由上一層降采樣獲得)所得三項即為2kσ,2k2σ,2k3σ,其首項2kσ=24/3。剛好與上一octave末項k3σ=23/3尺度變化連續(xù)起來,所以每次要在Gaussian space添加3項,每組(塔)共S+3層圖像,相應(yīng)的DoG金字塔有S+2層圖像。 ==========================================

使用Laplacian of Gaussian能夠很好地找到找到圖像中的興趣點(diǎn),但是需要大量的計算量,所以使用Difference of Gaussian圖像的極大極小值近似尋找特征點(diǎn).DOG算子計算簡單,是尺度歸一化的LoG算子的近似,有關(guān)DOG尋找特征點(diǎn)的介紹及方法詳見http://blog.csdn.net/abcjennifer/article/details/7639488,極值點(diǎn)檢測用的Non-Maximal Suppression


3.?除去不好的特征點(diǎn)

這一步本質(zhì)上要去掉DoG局部曲率非常不對稱的像素。


通過擬和三維二次函數(shù)以精確確定關(guān)鍵點(diǎn)的位置和尺度(達(dá)到亞像素精度),同時去除低對比度的關(guān)鍵點(diǎn)和不穩(wěn)定的邊緣響應(yīng)點(diǎn)(因?yàn)镈oG算子會產(chǎn)生較強(qiáng)的邊緣響應(yīng)),以增強(qiáng)匹配穩(wěn)定性、提高抗噪聲能力,在這里使用近似Harris Corner檢測器。

①空間尺度函數(shù)泰勒展開式如下:,對上式求導(dǎo),并令其為0,得到精確的位置, 得

②在已經(jīng)檢測到的特征點(diǎn)中,要去掉低對比度的特征點(diǎn)和不穩(wěn)定的邊緣響應(yīng)點(diǎn)。去除低對比度的點(diǎn):把公式(2)代入公式(1),即在DoG Space的極值點(diǎn)處D(x)取值,只取前兩項可得:


若 ??,該特征點(diǎn)就保留下來,否則丟棄。

③邊緣響應(yīng)的去除
一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個2×2 的Hessian矩陣H求出:

導(dǎo)數(shù)由采樣點(diǎn)相鄰差估計得到。

D的主曲率和H的特征值成正比,令α為較大特征值,β為較小的特征值,則

令α=γβ,則

?(r + 1)2/r的值在兩個特征值相等的時候最小,隨著r的增大而增大,因此,為了檢測主曲率是否在某域值r下,只需檢測

if?(α+β)/?αβ> (r+1)2/r, throw it out. ??在Lowe的文章中,取r=10。



4.?給特征點(diǎn)賦值一個128維方向參數(shù)

上一步中確定了每幅圖中的特征點(diǎn),為每個特征點(diǎn)計算一個方向,依照這個方向做進(jìn)一步的計算,?利用關(guān)鍵點(diǎn)鄰域像素的梯度方向分布特性為每個關(guān)鍵點(diǎn)指定方向參數(shù),使算子具備旋轉(zhuǎn)不變性。


為(x,y)處梯度的模值和方向公式。其中L所用的尺度為每個關(guān)鍵點(diǎn)各自所在的尺度。至此,圖像的關(guān)鍵點(diǎn)已經(jīng)檢測完畢,每個關(guān)鍵點(diǎn)有三個信息:位置,所處尺度、方向,由此可以確定一個SIFT特征區(qū)域。


梯度直方圖的范圍是0~360度,其中每10度一個柱,總共36個柱。隨著距 ????? 中心點(diǎn)越遠(yuǎn)的領(lǐng)域其對直方圖的貢獻(xiàn)也響應(yīng)減小.Lowe論文中還提到要使用高斯函數(shù)對直方圖進(jìn)行平滑,減少突變的影響。

在實(shí)際計算時,我們在以關(guān)鍵點(diǎn)為中心的鄰域窗口內(nèi)采樣,并用直方圖統(tǒng)計鄰域像素的梯度方向。梯度直方圖的范圍是0~360度,其中每45度一個柱,總共8個柱, 或者每10度一個柱,總共36個柱。Lowe論文中還提到要使用高斯函數(shù)對直方圖進(jìn)行平滑,減少突變的影響。直方圖的峰值則代表了該關(guān)鍵點(diǎn)處鄰域梯度的主方向,即作為該關(guān)鍵點(diǎn)的方向


直方圖中的峰值就是主方向,其他的達(dá)到最大值80%的方向可作為輔助方向

由梯度方向直方圖確定主梯度方向

該步中將建立所有scale中特征點(diǎn)的描述子(128維)

Identify peak and assign orientation and sum of magnitude to key point. ? The user may choose a threshold to exclude key points based on their?assigned sum of magnitudes.


關(guān)鍵點(diǎn)描述子的生成步驟


?通過對關(guān)鍵點(diǎn)周圍圖像區(qū)域分塊,計算塊內(nèi)梯度直方圖,生成具有獨(dú)特性的向量,這個向量是該區(qū)域圖像信息的一種抽象,具有唯一性。


5. 關(guān)鍵點(diǎn)描述子的生成

首先將坐標(biāo)軸旋轉(zhuǎn)為關(guān)鍵點(diǎn)的方向,以確保旋轉(zhuǎn)不變性。以關(guān)鍵點(diǎn)為中心取8×8的窗口。

Figure.16*16的圖中其中1/4的特征點(diǎn)梯度方向及scale,右圖為其加權(quán)到8個主方向后的效果。

圖左部分的中央為當(dāng)前關(guān)鍵點(diǎn)的位置,每個小格代表關(guān)鍵點(diǎn)鄰域所在尺度空間的一個像素,利用公式求得每個像素的梯度幅值與梯度方向,箭頭方向代表該像素的梯度方向,箭頭長度代表梯度模值,然后用高斯窗口對其進(jìn)行加權(quán)運(yùn)算。


圖中藍(lán)色的圈代表高斯加權(quán)的范圍(越靠近關(guān)鍵點(diǎn)的像素梯度方向信息貢獻(xiàn)越大)。然后在每4×4的小塊上計算8個方向的梯度方向直方圖,繪制每個梯度方向的累加值,即可形成一個種子點(diǎn),如圖右部分示。此圖中一個關(guān)鍵點(diǎn)由2×2共4個種子點(diǎn)組成,每個種子點(diǎn)有8個方向向量信息。這種鄰域方向性信息聯(lián)合的思想增強(qiáng)了算法抗噪聲的能力,同時對于含有定位誤差的特征匹配也提供了較好的容錯性。


計算keypoint周圍的16*16的window中每一個像素的梯度,而且使用高斯下降函數(shù)降低遠(yuǎn)離中心的權(quán)重。

在每個4*4的1/16象限中,通過加權(quán)梯度值加到直方圖8個方向區(qū)間中的一個,計算出一個梯度方向直方圖。

這樣就可以對每個feature形成一個4*4*8=128維的描述子,每一維都可以表示4*4個格子中一個的scale/orientation.?將這個向量歸一化之后,就進(jìn)一步去除了光照的影響。

5. 根據(jù)SIFT進(jìn)行Match

生成了A、B兩幅圖的描述子,(分別是k1*128維和k2*128維),就將兩圖中各個scale(所有scale)的描述子進(jìn)行匹配,匹配上128維即可表示兩個特征點(diǎn)match上了。


實(shí)際計算過程中,為了增強(qiáng)匹配的穩(wěn)健性,Lowe建議對每個關(guān)鍵點(diǎn)使用4×4共16個種子點(diǎn)來描述,這樣對于一個關(guān)鍵點(diǎn)就可以產(chǎn)生128個數(shù)據(jù),即最終形成128維的SIFT特征向量。此時SIFT特征向量已經(jīng)去除了尺度變化、旋轉(zhuǎn)等幾何變形因素的影響,再繼續(xù)將特征向量的長度歸一化,則可以進(jìn)一步去除光照變化的影響。?當(dāng)兩幅圖像的SIFT特征向量生成后,下一步我們采用關(guān)鍵點(diǎn)特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點(diǎn)的相似性判定度量。取圖像1中的某個關(guān)鍵點(diǎn),并找出其與圖像2中歐式距離最近的前兩個關(guān)鍵點(diǎn),在這兩個關(guān)鍵點(diǎn)中,如果最近的距離除以次近的距離少于某個比例閾值,則接受這一對匹配點(diǎn)。降低這個比例閾值,SIFT匹配點(diǎn)數(shù)目會減少,但更加穩(wěn)定。為了排除因?yàn)閳D像遮擋和背景混亂而產(chǎn)生的無匹配關(guān)系的關(guān)鍵點(diǎn),Lowe提出了比較最近鄰距離與次近鄰距離的方法,距離比率ratio小于某個閾值的認(rèn)為是正確匹配。因?yàn)閷τ阱e誤匹配,由于特征空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。Lowe推薦ratio的閾值為0.8。但作者對大量任意存在尺度、旋轉(zhuǎn)和亮度變化的兩幅圖片進(jìn)行匹配,結(jié)果表明ratio取值在0. 4~0. 6之間最佳,小于0. 4的很少有匹配點(diǎn),大于0. 6的則存在大量錯誤匹配點(diǎn)。(如果這個地方你要改進(jìn),最好給出一個匹配率和ration之間的關(guān)系圖,這樣才有說服力)作者建議ratio的取值原則如下:

ratio=0. 4 對于準(zhǔn)確度要求高的匹配;
ratio=0. 6 對于匹配點(diǎn)數(shù)目要求比較多的匹配;?
ratio=0. 5 一般情況下。
也可按如下原則:當(dāng)最近鄰距離<200時ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分錯誤匹配點(diǎn)。



當(dāng)兩幅圖像的SIFT特征向量生成后,下一步我們采用關(guān)鍵點(diǎn)特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點(diǎn)的相似性判定度量。取圖像1中的某個關(guān)鍵點(diǎn),并找出其與圖像2中歐式距離最近的前兩個關(guān)鍵點(diǎn),在這兩個關(guān)鍵點(diǎn)中,如果最近的距離除以次近的距離少于某個比例閾值,則接受這一對匹配點(diǎn)。降低這個比例閾值,SIFT匹配點(diǎn)數(shù)目會減少,但更加穩(wěn)定。

?

實(shí)驗(yàn)結(jié)果:







Python+opencv實(shí)現(xiàn):


[python]?view plaincopy
  • import?cv2??
  • import?numpy?as?np??
  • #import?pdb??
  • #pdb.set_trace()#turn?on?the?pdb?prompt??
  • ??
  • #read?image??
  • img?=?cv2.imread('D:\privacy\picture\little?girl.jpg',cv2.IMREAD_COLOR)??
  • gray?=?cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)??
  • cv2.imshow('origin',img);??
  • ??
  • #SIFT??
  • detector?=?cv2.SIFT()??
  • keypoints?=?detector.detect(gray,None)??
  • img?=?cv2.drawKeypoints(gray,keypoints)??
  • #img?=?cv2.drawKeypoints(gray,keypoints,flags?=?cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)??
  • cv2.imshow('test',img);??
  • cv2.waitKey(0)??
  • cv2.destroyAllWindows()??



  • C實(shí)現(xiàn):


    [cpp]?view plaincopy
  • //?FeatureDetector.cpp?:?Defines?the?entry?point?for?the?console?application.??
  • //????
  • //??Created?by?Rachel?on?14-1-12.????
  • //??Copyright?(c)?2013年?ZJU.?All?rights?reserved.????
  • //????
  • ??
  • #include?"stdafx.h"??
  • #include?"highgui.h"??
  • #include?"cv.h"??
  • #include?"vector"??
  • #include?"opencv\cxcore.hpp"??
  • #include?"iostream"??
  • #include?"opencv.hpp"??
  • #include?"nonfree.hpp"??
  • #include?"showhelper.h"??
  • ??
  • using?namespace?cv;??
  • using?namespace?std;??
  • ??
  • int?_tmain(int?argc,?_TCHAR*?argv[])??
  • {??
  • ????//Load?Image???
  • ????Mat?c_src1?=??imread(?"..\\Images\\3.jpg");??
  • ????Mat?c_src2?=?imread("..\\Images\\4.jpg");??
  • ????Mat?src1?=?imread(?"..\\Images\\3.jpg",?CV_LOAD_IMAGE_GRAYSCALE);??
  • ????Mat?src2?=?imread(?"..\\Images\\4.jpg",?CV_LOAD_IMAGE_GRAYSCALE);??
  • ????if(?!src1.data?||?!src2.data?)??
  • ????{?std::cout<<?"?--(!)?Error?reading?images?"?<<?std::endl;?return?-1;?}??
  • ??
  • ????//sift?feature?detect??
  • ????SiftFeatureDetector?detector;??
  • ????std::vector<KeyPoint>?kp1,?kp2;??
  • ??
  • ????detector.detect(?src1,?kp1?);??
  • ????detector.detect(?src2,?kp2?);??
  • ????SiftDescriptorExtractor?extractor;??
  • ????Mat?des1,des2;//descriptor??
  • ????extractor.compute(src1,kp1,des1);??
  • ????extractor.compute(src2,kp2,des2);?????
  • ????Mat?res1,res2;???
  • ????int?drawmode?=?DrawMatchesFlags::DRAW_RICH_KEYPOINTS;??
  • ????drawKeypoints(c_src1,kp1,res1,Scalar::all(-1),drawmode);//在內(nèi)存中畫出特征點(diǎn)??
  • ????drawKeypoints(c_src2,kp2,res2,Scalar::all(-1),drawmode);??
  • ????cout<<"size?of?description?of?Img1:?"<<kp1.size()<<endl;??
  • ????cout<<"size?of?description?of?Img2:?"<<kp2.size()<<endl;??
  • ??
  • ????//write?the?size?of?features?on?picture??
  • ????CvFont?font;??????
  • ????double?hScale=1;?????
  • ????double?vScale=1;??????
  • ????int?lineWidth=2;//?相當(dāng)于寫字的線條??????
  • ????cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC,?hScale,vScale,0,lineWidth);//初始化字體,準(zhǔn)備寫到圖片上的?????
  • ????//?cvPoint?為起筆的x,y坐標(biāo)?????
  • ????IplImage*?transimg1?=?cvCloneImage(&(IplImage)?res1);??
  • ????IplImage*?transimg2?=?cvCloneImage(&(IplImage)?res2);??
  • ??????????
  • ????char?str1[20],str2[20];??
  • ????sprintf(str1,"%d",kp1.size());??
  • ????sprintf(str2,"%d",kp2.size());??
  • ??
  • ??
  • ????const?char*?str?=?str1;??
  • ????cvPutText(transimg1,str1,cvPoint(280,230),&font,CV_RGB(255,0,0));//在圖片中輸出字符???
  • ??
  • ????str?=?str2;??
  • ????cvPutText(transimg2,str2,cvPoint(280,230),&font,CV_RGB(255,0,0));//在圖片中輸出字符???
  • ??
  • ????//imshow("Description?1",res1);??
  • ????cvShowImage("descriptor1",transimg1);??
  • ????cvShowImage("descriptor2",transimg2);??
  • ??
  • ????BFMatcher?matcher(NORM_L2);??
  • ????vector<DMatch>?matches;??
  • ????matcher.match(des1,des2,matches);??
  • ????Mat?img_match;??
  • ????drawMatches(src1,kp1,src2,kp2,matches,img_match);//,Scalar::all(-1),Scalar::all(-1),vector<char>(),drawmode);??
  • ????cout<<"number?of?matched?points:?"<<matches.size()<<endl;??
  • ????imshow("matches",img_match);??
  • ????cvWaitKey();??
  • ????cvDestroyAllWindows();??
  • ??
  • ????return?0;??
  • }??





  • =============================== 基本概念及一些補(bǔ)充 什么是局部特征?   ?局部特征從總體上說是圖像或在視覺領(lǐng)域中一些有別于其周圍的地方   ?局部特征通常是描述一塊區(qū)域,使其能具有高可區(qū)分度   ?局部特征的好壞直接會決定著后面分類、識別是否會得到一個好的結(jié)果 ?局部特征需具備的特性   ?重復(fù)性   ?可區(qū)分性   ?準(zhǔn)確性   ?數(shù)量以及效率   ?不變性 ?局部特征提取算法-sift   ?SIFT算法由D.G.Lowe 1999年提出,2004年完善總結(jié)。后來Y.Ke將其描述子部分用PCA代替直方圖的方式,對其進(jìn)行改進(jìn)。 ?  ?SIFT算法是一種提取局部特征的算法,在尺度空間尋找極值點(diǎn),提取位置,尺度,旋轉(zhuǎn)不變量   ?SIFT特征是圖像的局部特征,其對旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性。   ?獨(dú)特性好,信息量豐富,適用于在海量特征數(shù)據(jù)庫中進(jìn)行快速、準(zhǔn)確的匹配。   ?多量性,即使少數(shù)的幾個物體也可以產(chǎn)生大量SIFT特征向量。   ?可擴(kuò)展性,可以很方便的與其他形式的特征向量進(jìn)行聯(lián)合。 尺度空間理論   ?尺度空間理論目的是模擬圖像數(shù)據(jù)的多尺度特征   ?其基本思想是在視覺信息圖像信息處理模型中引入一個被視為尺度的參數(shù), 通過連續(xù)變化尺度參數(shù)獲得不同尺度下的視覺處理信息, 然后綜合這些信息以深入地挖掘圖像的本質(zhì)特征。 描述子生成的細(xì)節(jié)   ?以極值點(diǎn)為中心點(diǎn),并且以此點(diǎn)所處于的高斯尺度sigma值作為半徑因子。對于遠(yuǎn)離中心點(diǎn)的梯度值降低對其所處區(qū)域的直方圖的貢獻(xiàn),防止一些突變的影響。   ?每個極值點(diǎn)對其進(jìn)行三線性插值,這樣可以把此極值點(diǎn)的貢獻(xiàn)均衡的分到直方圖中相鄰的柱子上 歸一化處理   ?在求出4*4*8的128維特征向量后,此時SIFT特征向量已經(jīng)去除了尺度變化、旋轉(zhuǎn)等幾何變形因素的影響。而圖像的對比度變化相當(dāng)于每個像素點(diǎn)乘上一個因子,光照變化是每個像素點(diǎn)加上一個值,但這些對圖像歸一化的梯度沒有影響。因此將特征向量的長度歸一化,則可以進(jìn)一步去除光照變化的影響。   ?對于一些非線性的光照變化,SIFT并不具備不變性,但由于這類變化影響的主要是梯度的幅值變化,對梯度的方向影響較小,因此作者通過限制梯度幅值的值來減少這類變化造成的影響。 PCA-SIFT算法   ?PCA-SIFT與標(biāo)準(zhǔn)SIFT有相同的亞像素位置,尺度和主方向。但在第4步計算描述子的設(shè)計,采用的主成分分析的技術(shù)。   ?下面介紹一下其特征描述子計算的部分:     ?用特征點(diǎn)周圍的41×41的像斑計算它的主元,并用PCA-SIFT將原來的2×39×39維的向量降成20維,以達(dá)到更精確的表示方式。     ?它的主要步驟為,對每一個關(guān)鍵點(diǎn):在關(guān)鍵點(diǎn)周圍提取一個41×41的像斑于給定的尺度,旋轉(zhuǎn)到它的主方向?;計算39×39水平和垂直的梯度,形成一個大小為3042的矢量;用預(yù)先計算好的投影矩陣n×3042與此矢量相乘;這樣生成一個大小為n的PCA-SIFT描述子。 ===============================

    輔助資料:





    ===============================


    Reference:

    Lowe SIFT 原文:http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

    SIFT 的C實(shí)現(xiàn):https://github.com/robwhess/opensift/blob/master/src

    MATLAB 應(yīng)用Sift算子的模式識別方法:http://blog.csdn.net/abcjennifer/article/details/7372880

    http://blog.csdn.net/abcjennifer/article/details/7365882

    http://en.wikipedia.org/wiki/Scale-invariant_feature_transform#David_Lowe.27s_method

    http://blog.sciencenet.cn/blog-613779-475881.html

    http://www.cnblogs.com/linyunzju/archive/2011/06/14/2080950.html

    http://www.cnblogs.com/linyunzju/archive/2011/06/14/2080951.html

    http://blog.csdn.net/ijuliet/article/details/4640624

    http://www.cnblogs.com/cfantaisie/archive/2011/06/14/2080917.html? (部分圖片有誤,以本文中的圖片為準(zhǔn))


    原文地址:http://blog.csdn.net/abcjennifer/article/details/7639681

    總結(jié)

    以上是生活随笔為你收集整理的SIFT特征提取分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。