用于角点检测的FAST算法
使用FAST進行特征檢測
1.選擇圖像中是否要識別為興趣點的像素ppp,使其強度為IpI_pIp?
2.選擇適當的閾值ttt
3.考慮被測像素周圍有16個像素的圓圈。(見下圖)
4.現在,如果圓中存在一組(共16個像素)nnn個連續的像素,它們均比Ip+tI_p + tIp?+t亮,或者比Ip?tI_p-tIp??t都暗,則像素ppp是一個角。(在上圖中顯示為白色虛線)。n被選為12。
5.建議使用高速測試以排除大量的非角區域。此測試僅檢查1、9、5和13處的四個像素(如果第一個1和9太亮或太暗,則對其進行測試。如果是,則檢查5和13)。如果p是一個角,則其中至少三個必須全部比Ip+tI_p + tIp?+t亮或比Ip?tI_p-tIp??t暗。如果以上兩種情況都不是,則ppp不能為角。然后,可以通過檢查圓中的所有像素,將完整的分段測試標準應用于通過的候選項。該檢測器本身具有很高的性能,但有幾個缺點:
6.它不會拒絕n <12的候選對象。
7.像素的選擇不是最佳的,因為其效率取決于問題的順序和角落外觀的分布。
8.高速測試的結果被丟棄了。
9.彼此相鄰地檢測到多個特征。
機器學習的方法解決了前三點。使用非最大抑制來解決最后一個問題。
讓機器學習一個角檢測器
1.選擇一組圖像進行訓練(最好從目標應用程序域中進行訓練)
2.在每個圖像中運行FAST算法以查找特征點。
3.對于每個特征點,將其周圍的16個像素存儲為矢量。對所有圖像執行此操作以獲得特征向量P。
4.這16個像素中的每個像素(例如xxx)可以具有以下三種狀態之一:
1.取決于這些狀態,特征矢量PPP被細分為3個子集,PdP_dPd?, PsP_sPs?, PbP_bPb?。
2.定義一個新的布爾變量KpK_pKp?,如果ppp是一個角,則為true,否則為false。
3.使用ID3算法(決策樹分類器)使用變量KpK_pKp?查詢每個子集,以獲取有關真實類的知識。它選擇x,該x通過KpK_pKp?的熵測得的有關候選像素是否為角的信息最多。
4.遞歸地將其應用于所有子集,直到其熵為零為止。
5.這樣創建的決策樹用于其他圖像的快速檢測。
非最大抑制
在相鄰位置檢測多個興趣點是另一個問題。通過使用非極大抑制來解決。
1.計算所有檢測到的特征點的得分函數VVV。VVV是ppp與16個周圍像素值之間的絕對差之和。
2.考慮兩個相鄰的關鍵點并計算它們的VVV值。
3.丟棄較低VVV值的那個。
OpenCV中的高速拐角檢測器
它被稱為OpenCV中的任何其他特征檢測器。 如果需要,您可以指定閾值,是否要應用非極大抑制,要使用的鄰域等。 對于鄰域,定義了三個標志,分別為cv.FAST_FEATURE_DETECTOR_TYPE_5_8,cv.FAST_FEATURE_DETECTOR_TYPE_7_12和cv.FAST_FEATURE_DETECTOR_TYPE_9_16。 以下是有關如何檢測和繪制FAST特征點的簡單代碼。
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('simple.jpg',0) # 用默認值初始化FAST對象 fast = cv.FastFeatureDetector_create() # 尋找并繪制關鍵點 kp = fast.detect(img,None) img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0)) # 打印所有默認參數 print( "Threshold: {}".format(fast.getThreshold()) ) print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) ) print( "neighborhood: {}".format(fast.getType()) ) print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) ) cv.imwrite('fast_true.png',img2) # 關閉非極大抑制 fast.setNonmaxSuppression(0) kp = fast.detect(img,None) print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) ) img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0)) cv.imwrite('fast_false.png',img3)查看結果。第一張圖片顯示了帶有nonmaxSuppression的FAST,第二張圖片顯示了沒有nonmaxSuppression的FAST.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的用于角点检测的FAST算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv 车道线检测(一)
- 下一篇: 理解Netty中的零拷贝(Zero-Co