1. 程式人生 > >計算機視覺(七):特徵檢測/提取(feature detection/extraction)

計算機視覺(七):特徵檢測/提取(feature detection/extraction)

關鍵點檢測和匹配流水線四個階段

① 特徵檢測/提取(feature detection):
      特徵檢測/提取的過程指從每一幅影象中尋找那些能在其他影象中較好匹配的位置。
      另外需要注意的是,這裡也涉及影象分割的內容。分割將影象細分為構成它的子區域或物體。細分的程度取決於要解決的問題。也就是說,在應用中,當感興趣的物體或區域已經被檢測出來時,就停止分割。
② 特徵描述(feature description):
      特徵描述即把檢測到的關鍵點周圍的每一個區域轉化成一個更緊湊和穩定(不變的)的描述子。
      使用影象分割的方法將一幅影象分割成多個區域後,分割後的畫素集合經常需要以一種適合於計算機進一步處理的形式來表示和描述,此時我們可以使用特徵描述子對其進行描述。
③ 特徵匹配(feature matching):
      特徵匹配即在其他影象中高效地搜尋可能的匹配候選。一旦我們從兩幅或多幅影象中提取特徵及其描述子,下一步就是要在這些影象之間建立一些初始化特徵之間的匹配。
④ 特徵跟蹤(feature tracking):
      特徵跟蹤是第三個階段的另一種替代方法,它只在檢測到的特徵點周圍一個小的領域內尋找匹配,因此更適合視訊處理。
以上介紹將貫徹接下來要介紹的特徵檢測/提取、影象分割、特徵描述、特徵匹配、特徵跟蹤。





一、背景知識

1. 影象特徵

      本文主要介紹灰度空間的特徵檢測,所討論的特徵檢測跟特徵提取有相同的概念,特徵被檢測後它可以從影象中被提取出來。我們感興趣的三種影象特徵是孤立點、線、邊緣。
      邊緣畫素是影象中灰度突變的那些畫素,而邊緣是相連邊緣畫素的集合。邊緣檢測器是設計用來檢測邊緣畫素的區域性影象處理方法。
      一條線可視為一條邊緣線段,該線兩側的背景灰度要麼遠亮於該線的畫素的灰度,要麼遠暗於該線的畫素的灰度。
      類似的,孤立點可視為一條線,只是其長度和寬度都為一個畫素。

2. 數字函式的一階導數和二階導數

      我們在空間域濾波器中介紹過一階微分和二階微分的差分形式。若將函式 f ( x + Δ x ) f(x+\Delta x) 展開為關於 x x 的泰勒級數,令 Δ x = 1 \Delta x = 1 ,且只保留該級數的線性項,結果數字差分是:
f x = f ( x ) = f ( x + 1 ) f ( x ) {∂f\over ∂x} = f'(x) = f(x+1) - f(x)       對上式關於 x x 微分,我們得到一個二階導數表示式:
2 f x 2 = f ( x ) x = f ( x + 1 ) f ( x ) = f ( x + 2 ) + f ( x ) 2 f ( x + 1 ) {∂^2f\over ∂x^2} = {∂f'(x)\over ∂x} = f'(x+1) - f'(x) = f(x+2) + f(x) - 2f(x+1)       這一展開是關於點 x + 1 x+1 的,我們的興趣是關於點 x x 的二階導數,故將上式中的變數減1後,得到
2 f x 2 = f ( x ) = f ( x + 1 ) + f ( x 1 ) 2 f ( x ) {∂^2f\over ∂x^2} = f''(x) = f(x+1) + f(x-1) - 2f(x)

3. 導數與影象特徵關係

      ① 一階導數通常在影象中產生較粗的邊緣。
      ② 二階導數對精細細節,如細線、孤立點和噪聲有較強的響應。
      ③ 二階導數在灰度斜坡和灰度臺階過渡處會產生雙邊緣響應。
      ④ 二階導數的符號可用於確定邊緣的過渡是從亮到暗還是從暗到亮。



二、孤立點的檢測

      孤立點的檢測以二階導數為基礎,這意味著使用拉普拉斯運算元(詳細可見空間域濾波器):
2 f ( x , y ) = f ( x + 1 , y ) + f ( x 1 , y ) + f ( x , y + 1 ) + f ( x , y 1 ) 4 f ( x , y ) \nabla^2f(x,y) = f(x+1,y) + f(x-1,y) + f(x,y+1) + f(x,y-1) - 4f(x,y)       輸出是使用如下表達式得到的:
g ( x , y ) = { 1 , R ( x , y ) T | 0 , 其他 g(x,y) = \begin{cases}1, & \text {$|R(x,y) \geq T$|} \\ 0, & \text{其他} \end{cases} 式中, g g 是輸出影象, T T 是一個非負的閾值, R R 由上式的拉普拉斯運算元給出。從直觀上看,這一概念是一個孤立點的灰度將完全不同於其周圍畫素的灰度,因而,使用這種型別的模板可很容易地檢測出這個孤立點。



三、線檢測

      複雜度更高的檢測是線檢測。對於線檢測,可以預期二階導數將導致更強的響應,併產生比一階導數更細的線。我們可以使用拉普拉斯運算元,另外,必須適當處理二階導數的雙線效應,這裡可以使用拉普拉斯的正值實現。
      通常,我們的興趣在於檢測特定方向的線,對於不同方向的線,我們可以使用以下模板(其中角度是相對於正x軸度量的角度):
在這裡插入圖片描述



四、邊緣檢測

1. 邊緣模型

      邊緣檢測基於灰度突變。邊緣的三種模型分別為:臺階模型、斜坡模型、屋頂邊緣模型,如圖1所示:
在這裡插入圖片描述

圖1    從左到右分別為臺階模型、斜坡模型、屋頂邊緣模型(理想表示)以及它們的相應灰度剖面

      一階導數的幅度可用於檢測影象中的某個點處是否存在一個邊緣(存在邊緣則導數不為0);二階導數的符號可用於確定一個邊緣畫素是位於該邊緣的暗測還是位於該邊緣的亮側(正為暗、負為亮)。
      圍繞一條邊緣的二階導數有兩個附加性質:① 對影象中的每條邊緣,二階導數生成兩個值(一個不希望的特點);② 二階導數的零交叉點可用於定義粗邊緣的中心,具體見圖2。
在這裡插入圖片描述

圖2    由一條理想垂直邊緣分開的兩個恆定灰度區域;邊緣附近的細節,顯示了一個水平灰度剖面及其一階導數和二階導數

      執行邊緣檢測有以下三個步驟:
① 為降噪對影象進行平滑處理。
② 邊緣點的檢測。這是一個區域性操作,從一幅影象中提取所有的點,這些點是變為邊緣點的潛在候選者。
③ 邊緣定位。這一步的目的是從候選邊緣點中選擇組成邊緣點集合的真實成員。
      以下討論實現這三個步驟的一些技術。

2. 基本邊緣檢測

以下邊緣檢測使用一階導數。
① Roberts運算元
      Roberts運算元以求對角畫素之差為基礎,該運算元用於識別對角線方向的邊緣:
g x = ( z 9 z 5 )         g y = ( z 8 z 6 ) g_x = (z_9 - z_5)\ \ \ 和\ \ \ g_y = (z_8 - z_6)       模板如下圖所示:
在這裡插入圖片描述

② Prewitt運算元
      Prewitt運算元使用以 z 5 z_5 為中心的 3 × 3 3\times 3 鄰域對 g x g_x g y g_y 的近似如下式所示:
g x = ( z 7 + z 8 + z 9 ) ( z 1 + z 2 + z 3 ) g_x = (z_7 + z_8 + z_9) - (z_1 +z_2 +z_3)