劉志海,尹 翔
(山東科技大學 交通學院,山東 青島 266590)
特征點提取是特征匹配、圖像識別和目標跟蹤等計算機圖像處理項目中應用最廣泛的方法之一。對于圖像中的特征點而言,角點可以說是特征點中最有檢測價值的特征點,圖像的分層、前景背景分離,以及檢測物體的邊緣等都會用到角點。
在人工智能、無人駕駛、視覺SLAM(Simultaneous Localization and Mapping)等先進領域,尤其是在經典的ORB_SLAM 中,FAST 角點檢測算法的使用較多,對該算法的研究和改進也是較為熱門的。經過長時間的發(fā)展,適應各種情況下的各類角點檢測算法紛紛產生,大部分的角點檢測算法都以灰度化處理后的圖像為檢測基礎,相對于彩色圖像,灰度圖像在檢測速度方面有顯著提升,并且依靠灰度值明顯的分層變化來區(qū)分角點。
目前應用廣泛的角點檢測算法有FAST 角點檢測算法、Harris 角點檢測算法和Susan 角點檢測算法。但是FAST 角點檢測算法本身存在單一閾值無法兼顧適應整幅圖像的所有區(qū)域的問題。閾值的設定為固定值對角點的檢測影響很大,而該算法的閾值相對來說依賴于經驗,不適用于整幅圖像?,F有的算法中,角點的數據冗余、漏檢和錯檢的情況十分明顯,這不僅會降低算法的檢測速度,也會降低檢測的正確率。所以本文提出一種基于OTSU 的區(qū)域自適應FAST 角點檢測算法。
FAST 角點檢測算法是近年人工智能、機器視覺、視覺SLAM 等領域中熱門的角點檢測方法,它不僅具有較快的運算速度,還具有很高的精確度,是一個兼?zhèn)溥m用性和性價比的算法。
FAST 角點檢測算法會視圖像中每個點為中心像素點并進行取值,選中像素后以3 個像素點為半徑選取原型窗口上的16 個像素,如圖1所示,為中心點,1~16為需要進行處理的點。
圖1 FAST 角點檢測算法原理圖
最初的FAST 角點檢測算法需要取中心點附近窗口區(qū)域上的連續(xù)16 個像素點,并取這16 個點的灰度值與中心像素點灰度值的差值,如果有連續(xù)個點都大于設定的閾值,則該中心點可以被視為角點的候選點。一般情況下,取9 時效果最佳。
由于需要對每個點都進行16 個像素點的檢測,所以對FAST 角點檢測算法進行了優(yōu)化,優(yōu)先檢測1,5,9,13 號位置的像素點是否符合要求。如果不符合要求則跳過,該優(yōu)化提升了FAST 角點檢測算法的運算速度,提高了檢測效率。
FAST 角點檢測算法步驟如下:
第1 步:首先定義一個閾值,的大小根據經驗設置為選中的像素點的10%。?。?),(9)兩個點,將他們與中心點做差再取絕對值,得到的絕對值與預先設定的閾值進行比較,若所得到的差的絕對值都小于設定的閾值,那么點不是角點,否則進行第2 步。
第2 步:取(1),(5),(9),(13)四個點,將他們與中心點做差再取絕對值,得到的絕對值與預先設定的閾值進行比較,若所得到的絕對值至少有三個點小于閾值,那么點不是角點,否則進行第3 步。
第3 步:取(1)~(16)中的16 個點,將他們與中心點做差再取絕對值,得到的絕對值與預先設定的閾值進行比較,若至少有連續(xù)9 個點的絕對值都小于閾值,那么點是角點。
傳統(tǒng)的FAST 角點檢測算法中,閾值是根據經驗設定的,一般為所選擇中心點像素的10%,那么周圍像素點的比較范圍為:
若角點與周圍環(huán)境的像素差大于閾值,那么該角點將會被忽略。因此引入OTSU 算法自適應閾值的大小,使得與環(huán)境差較小的角點仍然被提取出來。
將圖像按面積進行等分為×份。對每一份圖像使用OTSU 算法,得到該份的圖像閾值,再將閾值代入FAST 算法中。解決了整個FAST 角點檢測算法中閾值取值經驗化的缺點,經過實驗驗證,改進后的FAST 角點檢測算法提高了計算效率和檢測精度。
改進算法的步驟如下:
第1 步:將原圖像轉化成灰度圖像并利用高斯濾波函數進行過濾噪聲處理。接著將圖像等分成×份。并對分割后的每一份圖像進行OTSU 算法處理,計算該子部分圖像的閾值。
對圖像的子部分分別進行處理,子部分的閾值記為,并區(qū)別前景與背景,設為子部分前景像素點的比例,為子部分前景像素的平均灰度;為子部分背景像素點的比例,為子部分背景像素的平均灰度。記為圖像子部分總平均灰度,為類間方差。
×為圖像子部分的大小,圖像子部分中像素灰度值小于閾值的像素個數記作,圖像子部分像素灰度值大于閾值的像素個數記作,則有:
將式(6)代入式(7),得到公式:
遍歷圖像子部分的每個像素可以得到使類間方差最大的閾值′,′即為該圖像子部分的閾值。
第2 步:對分割后的圖像子部分分別使用FAST 角點檢測算法進行處理。取閾值,為第1 步中所取得的閾值與中心像素點灰度值差值的絕對值。若為候選點,則計算圓周上的16 個候選點與中心點的灰度值之差的絕對值,計算公式如式(9)所示:
若C≥,則記為候選點,否則剔除該點。對16 個點進行比較,若連續(xù)9 個以上的點為候選點則該中心點為角點。角點檢測范圍如圖2所示。
圖2 角點檢測范圍
為了驗證本文算法的可靠性,對同一幅圖像分別進行FAST 角點檢測算法、本文改進的FAST 角點檢測算法以及其他算法的實驗,根據檢測到的角點數量、角點的準確度以及算法的計算速率的結果進行比較。
采用FAST 角點檢測算法、Susan 算法和Harris 算法對圖3 進行實驗。圖4 為進行5×5 等分的圖像,并對每一子部分進行本文算法的實驗。將四者的結果進行對比。
圖3 測試圖像
圖4 分割后的圖像
首先,利用FAST 角點檢測算法對圖3 原始圖像進行處理,得到的實驗結果如圖5所示。從圖中可以直觀觀測出整幅圖像能夠檢測出大部分角點,但有部分角點并沒有檢測出來,同時也產生了角點遺漏,并且局部的角點出現了冗余,在灰度差別不明顯的區(qū)域遺失了部分角點。如圖6所示,Susan 算法在檢測時,消耗的時間很長,角點的冗余情況十分嚴重,并且遺失了部分角點。如圖7所示,Harris 算法對圖3 進行處理,該算法也需要設定固定的閾值,當閾值設置不合理時,會檢測出錯誤的角點,或者丟失角點。
圖5 FAST 角點檢測算法
圖6 Susan 算法
圖7 Harris 算法
最后,利用本文提出的改進的區(qū)域自適應FAST 角點檢測算法檢測圖像中的角點。如圖8所示,圖像在按5×5 比例的分割過程中,會有部分位置的角點被分割,造成角點遺失,所以在分割圖像時,四個邊界各留出三行像素,形成(+3)×(+3),這樣分割后,原有被分割的角點可以被完整地留出。根據算法本身來看,FAST角點檢測算法從檢測的效果來看,圖像中的角點都能檢測出來,角點冗余的情況明顯減少,在圖像灰度差別較小的區(qū)域也可以識別出角點。
圖8 本文改進算法
相比前面三種算法,由對比圖像的檢測結果來看,在角點數和角點分布上,本文算法具有較大的優(yōu)勢。從而驗證了本文提出的改進的區(qū)域自適應FAST 角點檢測算法的可靠性。
統(tǒng)計各個算法的實驗數據,如表1所示。根據數據對比結果可以直觀看出,相比前面三種算法,在角點數、角點檢測準確情況以及所耗時間來看,本文算法具有極大的可靠性,從而驗證了本文所提出的改進的圖像區(qū)域自適應FAST 角點檢測算法的檢測效果。
表1 各算法實驗結果對比
針對傳統(tǒng)FAST 角點檢測算法存在的固定閾值所造成漏檢、誤檢角點的問題,本文提出一種基于OTSU 的區(qū)域自適應FAST 角點檢測算法。通過將圖像分割成×個子部分,再對每一個子部分進行OTSU 算法處理求得閾值,將閾值反饋給FAST 角點檢測算法進行處理,有效地解決了固定閾值不適用于全圖的問題,使得較為隱蔽且不清楚角點可以被檢測到。實驗結果表明,本文算法可以有效提高角點檢測的準確率。