Harris角點檢測


目錄

       一、特征的定義

       二、Harris角點檢測原理

      1.灰度變化描述

      2.E(u,v)E(u,v)簡化

      3.如何度量角點響應

       三、實現Harris角點檢測

OpenCV可以檢測圖像的主要特征,然后提取這些特征、使其成為圖像描述符,這類似於人的眼睛和大腦。這些圖像特征可作為圖像搜索的數據庫。此外,人們可以利用這些關鍵點將圖像拼接起來,組成一個更大的圖像,比如將許多圖像放在一塊,然后形成一個360度全景圖像,這里我使用python+OpenCV來檢測圖像角點特征

一 特征定義

什么是特征?粗略的講,特征就是有意義的圖像區域,該區域具有獨特特征和易於識別性。因此角點及高密度區域都是很好的特征,而大量重復的模式或低密度區域(例如圖像中的藍色天空)則不是很好的特征。邊緣可以將圖像分為兩個區域,因此也可以看做好的特征。大多數特征檢測算法都會涉及圖像的角點的識別,由於某些算法在識別和提取某類型特征的時候有較好的效果,所以知道輸入圖像是什么很重要,這樣做有利於選擇最合適的OpenCV工具包。

二  Harris角點檢測原理

什么是角點?

角點是一類具有特定特征的點,角點也是處在一個無論框框往哪邊移動 框框內像素值都會變化很大的情況而定下來的點

如上圖有三個顏色的框框,如果我們對藍色框框進行移動,無論是水平還是垂直的方向移動都不會對框框內像素造成很大的變化,這種是內部區域

如果我們對黑色的框框進行移動,那么水平方向上移動像素值是不會有什么太大的變化的,如果是垂直方向上移動那么就會變化很大,這種一般稱為邊緣區域

最后的重點,我們對紅色的框框進行移動,無論是往哪個方向進行偏移都會對框框內的像素值造成很大的變動,那么紅色框框框住的區域的邊角點,我們就稱為角點

Harris角點檢測的基本思想:算法基本思想是使用一個固定窗口在圖像上進行任意方向上的滑動,比較滑動前與滑動后兩種情況,窗口中的像素灰度變化程度,如果存在任意方向上的滑動,都有着較大灰度變化,那么我們可以認為該窗口中存在角點。

 

1、灰度變化描述

 當窗口發生[u,v][u,v]移動時,那么滑動前與滑動后對應的窗口中的像素點灰度變化描述如下:

其中:[u,v][u,v]是窗口WW的偏移量;(x,y)(x,y)是窗口WW所對應的像素坐標位置,窗口有多大,就有多少個位置;I(x,y)I(x,y)是像素坐標位置(x,y)(x,y)的圖像灰度值;I(x+u,y+v)I(x+u,y+v)是像素坐標位置(x+u,y+v)(x+u,y+v)的圖像灰度值;w(x,y)w(x,y)是窗口函數,最簡單情形就是窗口WW內的所有像素所對應的ww權重系數均為1.但有時候,我們會將w(x,y)w(x,y)函數設置為以窗口WW中心為原點的二元正太分布。如果窗口WW中心點是角點時,移動前與移動后,該點在灰度變化貢獻最大;而離窗口WW中心(角點)較遠的點,這些點的灰度變化幾近平緩,這些點的權重系數,可以設定小值,以示該點對灰度變化貢獻較小,那么我們自然使用二元高斯函數來表示窗口函數;

2、E(u,v)E(u,v)化簡

首先需要了解泰勒公式,任何一個函數表達式,均可有泰勒公式進行展開,以逼近原函數,我們可以對下面函數進行一階展開

所以E(u,v)E(u,v)表達式可以更新為:

 

3、如何度量角點響應

通常用下面表達式進行度量,對每一個窗口計算得到一個分數R,根據R的大小來判定窗口內是否存在harris特征角。分數R根據下面公式計算得到:

這里λ1,λ2λ1,λ2是矩陣M的2個特征值,kk是一個指定值,這是一個經驗參數,需要實驗確定它的合適大小,通常它的值在0.04和0.06之間,它的存在只是調節函數的形狀而已。

 R取決於M的特征值,對於角點|R||R|很大,平坦的區域|R||R|很小,邊緣的R為負值;

如何通過矩陣判斷角點的? 其實上面,已經推導出E(u,v)E(u,v)的表達式,看看這個表達式其中矩陣M是實對稱矩陣,那么E表達式其實就是二次型,uu,vv代表窗口滑動方向以及滑動量,EE代表灰度變化,通過矩陣M進行特征值求解,而特征值所對應的特征向量即為灰度變化方向。如果兩個特征值較大,則表示有兩個方向灰度變化較快。所以可以直接通過求解MM的特征值進行角點判斷.

三  實現Harris角點檢測

Harris角點檢測可以分為5個步驟:

1、計算圖像I(x,y)I(x,y)在xx和yy兩個方向的梯度IxIx,IyIy;

2、計算圖像兩個方向梯度的乘積;

3、使用高斯函數對I2xIx2、I2yIy2、IxIyIxIy進行高斯加權(取σ=2,ksize=3),計算中心點為(x,y)(x,y)的窗口WW對應的矩陣MM;

4、計算每個像素點(x,y)(x,y)處的Harris響應值RR;

5、過濾大於某一閾值tt的RR值;

 

代碼實現

 

復制代碼
# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
"""
Example of detecting Harris corner points (Figure 2-1 in the book).
"""
# 讀入圖像
im = array(Image.open(r'C:\Users\LE\PycharmProjects\untitled\light_1.jpg').convert('L'))
# 檢測harris角點
harrisim = harris.compute_harris_response(im)
# Harris響應函數
harrisim1 = 255 - harrisim
figure()
gray()
#畫出Harris響應圖
subplot(141)
imshow(harrisim1)
print harrisim1.shape
axis('off')
axis('equal')
threshold = [0.01, 0.05, 0.1]
for i, thres in enumerate(threshold):
filtered_coords = harris.get_harris_points(harrisim, 6, thres)
subplot(1, 4, i+2)
imshow(im)
print im.shape
plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
axis('off')
show()

復制代碼

第一組:紋理平坦

正面圖

 

運行結果

 

正面遠圖

 

 

 運行結果:

 

旋轉圖

運行結果:

 

有光線圖

 

 

 運行結果:

 

 

側面圖

 

 

 運行結果:

 

 

結論:在紋理平坦的圖片中,近遠圖對比角點數基本一樣,旋轉圖與原圖的區別不大,側面的檢測角點數大於正面 ,光亮很強時檢測不到角點,牆面的棱角也會被檢測到。

第二組:邊緣多圖

正面圖

 運行結果

 遠景圖

運行結果

 

側面圖

 

運行結果

 

 

 亮光線圖

 

 

 運行結果:

 

旋轉圖

 

 

 運行結果

 

結論:與正面圖相比,側面圖角點少一點,遠景圖和旋轉圖差別不大,亮光線圖角點會多一點點

第三組:角點豐富圖

正面圖

 

運行結果

旋轉圖

 

 

 運行結果:

 

近景圖

 

 

 運行結果

 

亮光線圖

 

 

運行結果:

 

遠景圖

 

 

 運行結果:

 

 

結論:與正面圖相比,近景圖和旋轉圖沒有太大差別,遠景圖角點較多,亮光線圖角點較少。

小結:

①觀察得到:我將這三組實驗閾值分別設為0.01,0.05,0.1,由實驗結果可看出,每一組的實驗都隨着閾值的增加,檢測到的角點逐漸減少。

②遇到的問題:剛開始讀幾張超高清圖片時出現RuntimeWarning: invalid value encountered in dividereturn Wdet / Wtr這樣的報錯 ,一直不知道什么原因浪費了很多時間,后來百度得知圖片轉換為矩陣時發生溢出,改小圖片像素得以解決。還有圖片路徑的問題,一定不要直接粘貼復制,需要手動敲寫,不然也會報錯。

分析:

k為閾值

假設已經得到了矩陣M的特征值λ1λ20λ1≥λ2≥0,令λ2=αλ1λ2=αλ1,0α10≤α≤1。由特征值與矩陣M的直跡和行列式的關系可得:

 

 從而可以得到角點的響應:

 

 假設R≥0,則有:

 

對於較小的α值:

 

 由此,可以得出結論,增大k的值,降低角點檢測的靈敏度,減少被檢測角點的數量;減少k值,增加角點檢測的靈敏度,增加被檢測角點的數量。

 

四、總結:

1.計算簡單:Harris 算子中只用到灰度的一階差分以及濾波,操作簡單。

2.提取的點特征均勻而且合理:Harris 算子對圖像中的每個點都計算其興趣值,然后在鄰域中選擇最優點。在紋理信息豐富的區域,Harris 算子可以提取出大量有用的特征點,而在紋理信息少的區域,提取的特征點則較少。

3.穩定:Harris算子的計算公式中只涉及到一階導數,因此對圖像旋轉、灰度變化不太敏感,是比較穩定的一種點特征提取算子。

 


免責聲明!

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



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