Harris角點檢測算法


一,角點

   角點還沒有明確的數學定義。
  一般的角點檢測都是對有具體定義的、或者是能夠具體檢測出來的興趣點的檢測。這意味着興趣點可以是角點,也可以是在某些屬性上強度最大或者最小的孤立點、線段的終點,或者是曲線上局部曲率最大的點。在實踐中,通常大部分稱為角點檢測的方法檢測的都是興趣點,而不是獨有的角點。因此,如果只要檢測角點的話,需要對檢測出來的興趣點進行局部檢測,以確定出哪些是真正的角點。
  目前的角點檢測算法可歸納為3類:基於灰度圖像的角點檢測、基於二值圖像的角點檢測、基於輪廓曲線的角點檢測。角點是圖像很重要的特征,對圖像圖形的理解和分析有很重要的作用。對灰度圖像、二值圖像、邊緣輪廓曲線的角點檢測算法進行綜述,分析了相關的算法,並對各種檢測算法給出了評價。
二,Harris算法
  Harris角點提取算法:Harris 角點提取算法是Chris Harris 和Mike Stephens 在H.Moravec 算法的基礎上發展出的通過自相關矩陣的角點提取算法,又稱Plessey算法。Harris角點提取算法這種算子受信號處理中自相關面數的啟發,給出與自相關函數相聯系的矩陣M。M 陣的特征值是自相關函數的一階曲率,如果兩個曲率值都高,那么就認為該點是角點特征。

  算法流程

  • 1.利用水平,豎直差分算子對圖像的每個像素進行濾波以求得Ix,Iy,進而求得M中的四個元素的值。

    代碼中如果窗口數組array為-1,0,1,-1,0,1,-1,0,1}則是求解X方向的,如果為{-1,-1,-1,0,0,0,1,1,1}為Y方向的,則Ix和Iy求解結束,求解IX2相對比較簡單,像素相乘即可。

  • 2.對M的四個元素進行高斯平滑濾波,為的是消除一些不必要的孤立點和凸起,得到新的矩陣M。
  • 3.3.接下來利用M計算對應每個像素的角點響應函數R,即:
  • 4、局部極大值抑制,同時選取其極大值
  • 5.在矩陣R中,同時滿足R(i,j)大於一定閾值threshold和R(i,j)是某領域內的局部極大值,則被認為是角點

三,代碼

 1 from pylab import *
 2 from PIL import Image
 3 from PCV.localdescriptors import harris
 4 """
 5 Example of detecting Harris corner points (Figure 2-1 in the book).
 6 """
 7 # 讀入圖像
 8 im = array(Image.open(r'b3.jpg').convert('L'))
 9 # 檢測harris角點
10 harrisim = harris.compute_harris_response(im)
11 # Harris響應函數
12 harrisim1 = 255 - harrisim
13 figure()
14 gray()
15 #畫出Harris響應圖
16 subplot(141)
17 imshow(harrisim1)
18 print (harrisim1.shape)
19 axis('off')
20 axis('equal')
21 threshold = [0.01, 0.05, 0.1]
22 for i, thres in enumerate(threshold):
23     filtered_coords = harris.get_harris_points(harrisim, 6, thres)
24     subplot(1, 4, i+2)
25     imshow(im)
26     print (im.shape)
27     plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
28     axis('off')
29 show()

四,運行結果

 4.1紋理平坦的圖

   4.1.1正面

   

   4.1.2側面

   

   4.1.3旋轉

   

   4.1.4相對較遠處

   

    4.1.5較亮情況

   

 4.2垂直或水平邊緣多

    4.2.1正面

   

    4.2.2側面

   

   4.2.3旋轉

   

    4.2.4相對較遠處

   

 4.3紋理角點豐富

     4.3.1正面

  

     4.3.2側面

   

   4.3.3旋轉

   

   4.3.4相對較遠處

    

五,結論以及實驗中遇到的問題

 5.1實驗結果分析

1. Harris角點具有旋轉不變性。

Harris角點檢測通過窗口對應的二階矩陣的特征值得到角點響應值R,從而判斷角點。當圖像轉動時,角點區域的像素點梯度坐標和擬合橢圓對應地發生旋轉,但是矩陣的特征值(也可以理解為數據點區域的擬合橢圓)不變,因此圖像旋轉不影響角點的檢測。

2. Harris角點檢測算子對亮度和對比度的變化不靈敏
  這是因為在進行Harris角點檢測時,使用了微分算子對圖像進行微分運算,而微分運算對圖像密度的拉升或收縮和對亮度的抬高或下降不敏感。換言之,對亮度和對比度的仿射變換並不改變Harris響應的極值點出現的位置,但是,閾值的選擇可能會影響角點檢測的結果。

3. Harris角點檢測算子不具有尺度不變性

當圖像被縮小或放大時,在檢測窗口尺寸不變的前提下,在窗口內所包含圖像的內容是完全不同的,角點檢測的性能也會發生改變。

 5.2實驗中遇到的問題

  PCV,是一個很老的包了,從下載地址:https://github.com/jesolem/PCV (原鏈接,適用於python2),但在python3的時代里已不適用。需要將原文件里的多個print語句改寫成python3的形式才能正常安裝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM