關鍵詞:特徵點檢測
特徵點的性質
Harris角點
做者:李二 日期:23/04/2020 - 27/04/2020node
聲明:對於大多數作遙感研究的人來講,我以爲不必深挖裏面的技術細節,大體瞭解一下特徵點檢測是怎麼回事,用到了什麼思路便可。若是想看技術細節,自有不少其餘博客以及文獻可供參考。web
我這我的喜歡經過講解去啓發,而不是直接將各位看官帶入細節。
李二上次說道:在執行基於圖像的三維重建時,要求不一樣視角的圖像可以同時看到地物的相同地方
,咱們必須在不一樣圖像中精準的找出這些相同的地方,纔可以進行三角定位。算法
通常狀況下,不一樣視角圖像中相同的點千千萬,都能拿來使用嗎?非也!app
咱們須要從圖像中選擇比較有表明性的點。套用張麻子一句話,什麼TM的是TM的表明性的點?編輯器
不妨先看一下圖像是個什麼東西,圖像是一個由亮度和色彩組成的矩陣。咱們要從這個矩陣中找出表明性的元素。表明性的點就是相機視角發生變化後,這些點會保持不變,所以這些點是比較特別的點,所以也叫
特徵點 feature
。svg
特徵點應當具備以下性質:函數
可重複性(repeatable)
:相同的特徵點能夠在不一樣的圖像中找到局部性(localization)
:特徵點僅與一小塊圖像區域有關可區別性(distinctiveness)
:不一樣的特徵點有不一樣的表達高效性(efficiency)
:同一圖像中,特徵點數量應遠小於像素的數量
那圖像中哪些點是特別的點呢?spa
很容易想到,物體的
角點 corner
、邊緣點 edge
應當具備表明性。咱們可以方便的指出,某兩幅圖像中出現了同一個角點。邊緣點則稍微困難一些,畢竟沿着邊緣,圖像局部是類似的。設計
好啦,咱們只須要將圖像中角點提取出來就行了。目前通常認爲角點提取算法的終極算法是Harris角點法
,效率最高的算法是FAST角點法
(若是須要實時功能的話)。指針
咱們須要思考一下,角點能不能做爲穩定的特徵點呢? 對於角點,從遠處看是角點的地方,近處看可能就不顯示爲角點了。或者相機或物體旋轉後,角點在圖像上的外觀會發生變化,我看不容易辨認出這是個角點。
(小注:不是說Harris角點不能用,而是一些狀況下,不那麼好用)
對於特徵點,咱們追求的一個終極目標是:
敲重點: 不一樣視角下,物體的光線條件可能不一致,圖像的分辨率可能不一致,圖像亦可能存在旋轉,物體可能存在平移和旋轉,所以咱們但願這些特徵點在幾何上可以尺度不變、平移旋轉不變,且具備必定的光照不變特色。
接下來,咱們一步一步來看看,如何人工設計一些更加穩定的局部圖像特徵來代替這種普通的角點呢? 咱們先從Harris角點入手,而後逐步對其的旋轉、尺度等幾何不變進行探索。
以指定大小的滑窗 (locality)爲局部特徵搜索域,向任意方向移動滑窗,若是均可以獲得較大的梯度變化(gradient change)
,則該滑窗所在中心點即爲角點。
咱們經過圖像中灰度的變化來建模,圖像中滑窗 處的灰度矩陣爲 ,滑窗移動 後的滑窗的灰度矩陣爲 ,那麼灰度的變化爲:
這裏 爲
滑窗函數(window function)
,其實就是一個加權平均
,咱們能夠將滑窗內每一個像元的權重設爲一致,但更常見的是按照二元Gaussian分佈的形式設置權重。
小注:假如窗口中心點是角點時,移動前與移動後,該點的灰度變化應該最爲劇烈,因此該點權重係數能夠設定大些,表示窗口移動時,該點在灰度變化貢獻較大;而離窗口中心(角點)較遠的點,這些點的灰度變化幾近平緩,這些點的權重係數,能夠設定小點,以示該點對灰度變化貢獻較小,那麼咱們天然想到使用二元高斯函數來表示窗口函數,
根據上式,當滑窗在灰度平坦區域上滑動,滑窗灰度矩陣不會發生變化,那麼 ;當滑窗在邊緣或角點處滑動,滑窗灰度矩陣變化會很大,那麼 就很大。
Harris算法核心思想就是計算灰度發生較大變化時所對應的位置,固然這個較大是指針任意方向上的滑動,並不是單指某個方向。
接下來對公式(1)進行展開(爲何要展開?容易算唄)。咱們對二元函數進行一階泰勒展開(複習一下去吧),就有:
分別是 在 軸方向求一階導。而後就能夠把公式(1)寫成:
寫成矩陣的形式:
(小注,此時不妨假定滑窗內每一個像元的權重一致)
看一個最簡單的例子,當角點與 座標軸對齊時,在下圖窗口內(大白格),有一個角點,只有上側和左側存在邊緣,且在上邊緣, 很大,而 ;在左側邊緣, 很大而 。 因此有
當出現相似這種形式的 則意味着:(1)梯度變化主要沿着 和 軸方向;(2) 若是 或者 約爲0,則這不是一個角點。
實際並不是老是如此簡單,當角點與 座標軸沒有對齊時,通過旋轉變換就能夠將其轉換到與座標軸對齊的角度,而這種旋轉操做可使用矩陣的類似化來表示(具體不講了,由於李二也沒想了解)。但不管如何,矩陣 是對稱矩陣。
來,咱們看看,不一樣情形下, 和 到底有什麼規律。
經過對窗口內的每一個像素的 方向上的梯度與 方向上的梯度進行統計,這裏以 和 爲座標軸,所以每一個像素的梯度座標能夠表示成 。同時用橢圓進行數據集表示。
根據這個圖咱們能夠看出:
(小注:咱們對矩陣 進行特徵值分解)
咱們能夠根據這些特徵來判斷哪些區域存在角點,最直觀的是下圖。雖然咱們的基本思想利用
E(u,v)
來描述角點,但最終發現僅僅使用的是矩陣M
。
然而矩陣的特徵值計算較爲複雜,因此使用下面的方法進行近似計算更爲高效。即便用
角點響應函數 corner response function
其中
爲常數,一般爲0.04 - 0.06
。
剛纔用到了權重係數相等的權重函數,如今咱們能夠用下高斯權重函數(標準正態分佈),此時矩陣 :
好啦,咱們能夠用下圖總結一下。
若是角點響應函數 大於某個閾值,則能夠將角點篩選出來。固然其中還可能會有一些後處理步驟,好比說角點的極大值抑制等,就不說了。
咱們在section 1中提到了特徵點的終極目標是:平移+旋轉+尺度+光線變化後,特徵點保持不變。那麼,Harris角點知足這個須要嗎?話很少說,看圖便知。
那麼,接下來咱們看一下,是否能嘗試設計出一個尺度不變的特徵點檢測方法。那就是大名鼎鼎的SIFT
。
特徵點這塊內容有點多,須要3期的內容。由於特徵點檢測在技術上十分重要,相關算法的一些思路,也極具借鑑價值,因此多寫了一些。
特徵點,能夠用於三維重建(3D reconstruction),也能夠用於圖像匹配(image matching),我比較建議看一下Stanford University的Fei-Fei Li的CS131中的lec5-7.
有的看官可能以爲人眼應該就能夠找出特徵點而後進行匹配。好吧,看來是不當家不知炒菜油和洗潔精的區別(嘿嘿,Mme.Zhang),給個例子
啊,居然還有人能找出來,請收下個人膝蓋,這是我職業以來見過最偉大的對眼。再來一發。