[數字圖像處理] 特徵點/關鍵點(KeyPoint)和角點檢測算子

目錄

特徵點/關鍵點

Harris角點

FAST角點

角點檢測算子對比


特徵點/關鍵點

試想,從不同的距離,不同的方向、角度,不同的光照條件下觀察一個物體時,物體的大小、形狀、明暗都會有所不同。但我們依然可以判斷它是同一件物體。 這是因爲什麼呢?特徵點!

特徵點可以看作是不同視角圖片之間的映射,穩定的局部特徵點應該具有以下特性:

1)可重複性、顯著性

2)抗圖片變換(包括外貌變換(亮度、光照)和幾何變換(平移、選擇、尺度))

其中,在大小、方向、明暗不同的圖像中,同一特徵點應具有足夠相似的描述,就稱之爲可復現性

                              

特徵點(關鍵點)的應用場景:

  • 圖片的配準/拼接
  • 運動跟蹤
  • 物體識別
  • 機器人導航
  • 3D重建

Harris角點

Harris角點檢測算子的原理是基於特徵點具有局部差異性

假設現在有一個足夠小的觀察窗口,在任何方向上移動小觀察窗,導致大的像素變動的區域就是Harris角點。

如圖所示,第一張圖在平滑區域移動,則任何方向都不會出現像素的變動,第二張圖在垂直方向移動,則不會出現像素變動,直到第三張圖,觀察窗口移動到角點區域,則在任何方向上的移動都會出現像素的大的變動

數學模型

1)求偏移(u, v)後窗內圖像變化

               

2)取E(u, v)最大的區域

判斷

將上面的公式進行泰勒式展開:

                          

其中H被稱爲Harris矩陣:

                                 

進而可以得到Harris矩陣的兩個特徵值(x、y方向上的變化情況),根據這兩個特徵值就可以判斷觀察到的是什麼樣的區域:

  • 直線(邊緣區域):一個特徵值大,另一個特徵值小(t1大於0,t2約等於0或者相反)。
  • 平面(光滑區域):兩個特徵值都小,且近似相等(t1約等於t2約等於0)。
  • 角點(特徵點區域):兩個特徵值都大,且近似相等(t1和t2等大於0)。

 Harris角點響應

只有當兩個特徵值同時取得最大值,C才取得較大值,k越小,檢測越敏感。

Harris算子的處理流程

     

代碼

import numpy as np
import cv2 as cv

filename = 'pic/chessboard.png'
img = cv.imread(filename)
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray = np.float32(gray)

dst = cv.cornerHarris(gray, 2, 3, 0.04)
#result is dilated for marking the corners, not important

dst = cv.dilate(dst,None)
# Threshold for an optimal value, it may vary depending on the image.

img[dst>0.01*dst.max()]=[0,0,255]

# cv.namedWindow("dst", cv.WINDOW_NORMAL)
cv.imshow('dst',img)

if cv.waitKey(0) & 0xff == 27:
    cv.destroyAllWindows()

FAST角點

FAST(Feature from Accelerated Segment Test)

若某像素點與其周圍領域內足夠多的像素點處於不同的區域,則該像素點可能爲角點,也就是某些屬性與衆不同。

數學模型

1)確定一個閾值t,觀察某像素點爲中心的一個半徑等於3像素的離散化的圓,這個圓的邊界上有16個像素。

2)如果在這個大小爲16個像素的圓上有n個連續的像素點,它們的像素值要麼都比Ip+t大,要麼都比Ip−t小,則p就是一個角點。

                                                                          

角點檢測算子對比

Moravec算子[1977]

它是一種基於灰度方差的角點檢測方法,該算子計算圖像中某個像素點沿水平、垂直方向上的灰度差異,以確定角點位置,是第一個角點檢測算法,也是角點家族的開山鼻祖。

Harris算子[1988]

Harris不止是考察水平、垂直4個方向上的灰度差異,而是考察了所有方向上的灰度差異,並且具有旋轉不變性和對部分仿射變換的穩定性。

Shi-Tomasi算子[1994]

它是對Harris角點算子的改進,並且有一個直接“叫囂”Harris算子的名字——“Good Features to Track”,在opencv中實現函數是goodfeaturesToTrack。它通過考察自相關矩陣M的兩個特徵值中的較小者來確定就角點,大部分情況下,有比Harris更好的檢測效果。

FAST算子[2006]

它通過考察像素點與其鄰域內16個像素點的差異來確定特徵點(角點),並且通過分割測試算法對檢測效率做了極大的提升。基本可以滿足實時檢測系統的要求,在現今計算機視覺領域賺足了眼球。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章