• 沒有找到結果。

第二章 尺度不變特徵轉換

第一節 特徵點抓取

在 SIFT 演算法中,特徵點包含了許多圖形上的元素,並非只有尺 度的差異。SIFT 的特徵描述,對於以下元素具有不變性:「尺度」、「旋 轉」、「明度」、「視角與視點」。在人類的肉眼中,很容易理解一張圖片 中擁有的各項特徵。但是對於機器、電腦,如何將這些看似「顯眼」、「特 殊」的區塊化為重要的特徵值,在 SIFT 中需要透過以下的步驟:

一、建構尺度空間(Construct a scale space):

真實世界中的物件,其意義是只存在於某些尺度中。例如盆栽中的 一朵花,人類的眼睛可能看來是清楚、完美的。但是如果將尺度放大到 整個銀河系來看,這朵花幾乎是不存在的。因此在處理圖像的過程中,

為了要找出那些顯眼的特徵,首先要進行物件的模糊化。在 SIFT 中,

程式會將圖像模糊後將大小縮為一半,這個步驟稱為一個「octave」,每 個 octave 會產生五個圖像,象徵著這個圖像的「尺度」被增加了。

圖 3 SIFT 尺度圖

資料來源:出自 Sinha (2000)。

由圖 3 可發現每個進程後,圖片會縮小一半、並且漸進模糊。此步 驟是 Lowe 認為最佳的尺度變化,即四個 octave、五次模糊。模糊化的 過程為採用高斯模糊(Gaussian blur),其採用的公式如圖 4:

𝐿(𝑥, 𝑦, 𝜎) = 𝐺(𝑥, 𝑦, 𝜎) ∗ 𝐼(𝑥, 𝑦) 𝐺(𝑥, 𝑦, 𝜎) = 1

2𝜋𝜎2𝑒−(𝑥2+𝑦2)/2𝜎2

圖 4 高斯模糊公式表

資料來源:出自 Sinha (2000)。

圖 4 公式中,L 為模糊化後的圖像、G 為高斯模糊的參數、I 為原始圖像。

在本步驟中,程式可得到一系列經過高斯模糊處理的圖像,並在之後的 步驟中繼續加以應用。

二、高斯拉普拉斯近似(Perform LoG approximation):

在前一步當中,程式產生了一組逐漸模糊、收縮的圖像群,接下來 要運用這些圖像產生另一組圖像,以下稱為「差異性高斯(Difference of Gaussians,DoG)」圖像群,這組圖像將會是找出關鍵點的重要圖像。

一般的高斯拉普拉斯程序大致為將圖形模糊化,接著計算其二階導數

(又稱拉普拉斯算子)。經過這個程序的圖像,可以被輕易地標示出圖 中的邊緣或角,這些元素對於尋找關鍵點是相當好的素材。但是二階導 數計算對於雜訊相當敏感,圖像中的雜訊容易造成程式的誤判,於是前 一步進行的模糊化將能有效地過濾雜訊,達到穩定計算之目的。二階導 數的計算量非常密集,對於程式執行的效率會有一定程度的影響。因此 在 SIFT 演算法中,Lowe 使用以下的方法來快速求出需要的圖像群。

圖 5 DoG 圖像群產生示意圖

資料來源:出自 Sinha (2000)。

由圖 5 可以看出,在 SIFT 演算法中,程式只是對兩個連續的高斯 模糊圖像做相減,如此可以快速得出兩個圖片之間的差異圖像群 DoG,

取代原本需要密集運算的二階導數法。

三、尋找關鍵點(Find key points):

前一步程式求出了高斯的差異值,而這一步將會尋找這些值當中的

最大值與最小值,並且將他們標示出來。在本步驟中包含兩個部分:「在

DoG 圖像中尋找最大值、最小值」以及「尋找子像素的最大值、最小值」。 第一部分,程式將經歷每一個像素,並且檢查所有鄰近它的像素,

這樣的像素將會有 26 個,示意圖如圖 6:

圖 6 像素探訪示意圖

資料來源:來自 Sinha (2000)。

X 代表正被檢查的像素,在其立體空間相鄰的所有像素點是接著要被檢 查的範圍。此搜尋法看似瑣碎費時,但事實上有許多的像素點在檢查完 26 個鄰居之前就會先被程式判定無用而遺棄,只有被認定有價值的像素 會被檢查完。另外,最上面與最下面的尺度因為沒有足夠的鄰居,可以 直接省略。

圖 7 特徵抓取示意圖

圖 7 為本部分的示意圖,程式在三個 DoG 圖像中計算差異,可以得 出如圖 7 右側的關鍵點圖。在下一步中,程式將刪除掉對比對過程較為 不佳的關鍵點,以達到節省特徵點比對時間的效果。

四、去除不佳的關鍵點(Get Rid of Bad Keypoints):

為了消除對於比對沒有幫助且耗費時間的關鍵點,SIFT 使用一個步 驟進行不佳關鍵點的消去。首先是消除對比度較低的關鍵點,程式會訂 定一個臨界值,當一關鍵點的 DoG 值之絕對值小於該臨界值時,此關鍵 點將會被視為無效,並予以刪除;接著進行「邊緣」的刪除,程式給定 關鍵點兩個垂直的梯度(gradient),並判斷兩個梯度的值。當兩梯度都 較小時,視為平面;一大一小則為邊緣;兩梯度都大時則定義為角。夾 角為圖像辨識中相當優良的特徵,所以當一個點的兩個梯度皆大於臨界 值時,此點將不會被忽略。透過以上步驟,可以從圖 8 看出變化:

圖 8 消除不佳特徵點

五、決定關鍵點的方向性(Assign an orientation to the key points):

程式進行特徵點偵測後,將知道在甚麼尺度會得到這些特徵點,於 是已達成「尺度不變」。而在有可用且穩定的關鍵點群後,程式將會對 關鍵點的方向性做定位來確保「旋轉的不變性」。

這個步驟的做法首先要收集所有關鍵點的梯度方向以及大小,但是 要蒐集完一張大圖片上所有的資料勢必會消耗許多時間,因此程式會依 這些關鍵點的「尺度」來決定需要的收集區大小。在這塊收集區中,程 式會找出這個區域中最突出(prominent)的方向來指定為關鍵點的方向,

如圖 9 所示:

圖 9 定位關鍵點方向

資料來源:出自 Sinha (2000)。

六、產生 SIFT 特徵(Generate SIFT Features):

在一系列的轉換、處理之後,每個關鍵點將轉換成為一個特殊的「指 紋(fingerprint)」,這個指紋將能夠將這些關鍵點表示為獨一無二的特徵

點。這個指紋包含了 128 個數值,相當於這關鍵點周圍的 16 個像素區 塊的 8 個向量定義值,並且在解決掉可能發生的旋轉度、明度問題後,

程式將能產出一個關於整張圖像的特徵值資料:

圖 10 圖片特徵資料內容

資料來源:自製。

相關文件