1. 程式人生 > >特徵檢測(一)-———harris角點檢測

特徵檢測(一)-———harris角點檢測



1. 不同型別的角點

在現實世界中,角點對應於物體的拐角,道路的十字路口、丁字路口等。從影象分析的角度來定義角點可以有以下兩種定義:

  1. 角點可以是兩個邊緣的角點;
  2. 角點是鄰域內具有兩個主方向的特徵點;

前者往往需要對影象邊緣進行編碼,這在很大程度上依賴於影象的分割與邊緣提取,具有相當大的難度和計算量,且一旦待檢測目標局部發生變化,很可能導致操作的失敗。早期主要有Rosenfeld和Freeman等人的方法,後期有CSS等方法。

基於影象灰度的方法通過計算點的曲率及梯度來檢測角點,避免了第一類方法存在的缺陷,此類方法主要有Moravec運算元、Forstner運算元、Harris運算元、SUSAN運算元等。

image

這篇文章主要介紹的Harris角點檢測的演算法原理,比較著名的角點檢測方法還有jianbo Shi和Carlo Tomasi提出的Shi-Tomasi演算法,這個演算法開始主要是為了解決跟蹤問題,用來衡量兩幅影象的相似度,我們也可以把它看為Harris演算法的改進。OpenCV中已經對它進行了實現,介面函式名為GoodFeaturesToTrack()。另外還有一個著名的角點檢測運算元即SUSAN運算元,SUSAN是Smallest Univalue Segment Assimilating Nucleus(最小核值相似區)的縮寫。SUSAN使用一個圓形模板和一個圓的中心點,通過圓中心點畫素與模板圓內其他畫素值的比較,統計出與圓中心畫素近似的像元數量,當這樣的像元數量小於某一個閾值時,就被認為是要檢測的角點。我覺得可以把SUSAN運算元看為Harris演算法的一個簡化。這個演算法原理非常簡單,演算法效率也高,所以在OpenCV中,它的介面函式名稱為:

FAST()

2. Harris角點

2.1 基本原理

人眼對角點的識別通常是在一個區域性的小區域或小視窗完成的。如果在各個方向上移動這個特徵的小視窗,視窗內區域的灰度發生了較大的變化,那麼就認為在視窗內遇到了角點。如果這個特定的視窗在影象各個方向上移動時,視窗內影象的灰度沒有發生變化,那麼視窗內就不存在角點;如果視窗在某一個方向移動時,視窗內影象的灰度發生了較大的變化,而在另一些方向上沒有發生變化,那麼,視窗內的影象可能就是一條直線的線段。

image

對於影象I(x,y) I(x,y),當在點(x,y) (x,y)處平移(Δx,Δy) (Δx,Δy)後的自相似性,可以通過自相關函式給出:

c(x,y;Δx,
Δy)= (u,v)W(x,y) w(u,v)(I(u,v)I(u+Δx,v+Δy)) 2 
 
c(x,y;Δx,Δy)=∑(u,v)∈W(x,y)w(u,v)(I(u,v)–I(u+Δx,v+Δy))2

其中,W(x,y) W(x,y)是以點(x,y) (x,y)為中心的視窗,w(u,v) w(u,v)為加權函式,它既可是常數,也可以是高斯加權函式。

image

根據泰勒展開,對影象I(x,y) I(x,y)在平移(Δx,Δy) (Δx,Δy)後進行一階近似:

I(u+Δx,v+Δy)=I(u,v)+I x (u,v)Δx+I y (u,v)Δy+O(Δx 2 ,Δy 2 )I(u,v)+I x (u,v)Δx+I y (u,v)Δy I(u+Δx,v+Δy)=I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy+O(Δx2,Δy2)≈I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy

其中,I x ,I y  Ix,Iy是影象I(x,y) I(x,y)的偏導數,這樣的話,自相關函式則可以簡化為:

c(x,y;Δx,Δy) w (I x (u,v)Δx+I y (u,v)Δy) 2 =[Δx,Δy]M(x,y)[ΔxΔy ] c(x,y;Δx,Δy)≈∑w(Ix(u,v)Δx+Iy(u,v)Δy)2=[Δx,Δy]M(x,y)[ΔxΔy]

其中

M(x,y)= w [I x (x,y) 2 I x (x,y)I y (x,y) I x (x,y)I y (x,y)I y (x,y) 2  ]=[ w I x (x,y) 2  w I x (x,y)I y (x,y)  w I x (x,y)I y (x,y) w I y (x,y) 2  ]=[AC CB ] M(x,y)=∑w[Ix(x,y)2Ix(x,y)Iy(x,y)Ix(x,y)Iy(x,y)Iy(x,y)2]=[∑wIx(x,y)2∑wIx(x,y)Iy(x,y)∑wIx(x,y)Iy(x,y)∑wIy(x,y)2]=[ACCB]

也就是說影象I(x,y) I(x,y)在點(x,y) (x,y)處平移(Δx,Δy) (Δx,Δy)後的自相關函式可以近似為二項函式:

c(x,y;Δx,Δy)AΔx 2 +2CΔxΔy+BΔy 2  c(x,y;Δx,Δy)≈AΔx2+2CΔxΔy+BΔy2

其中

A= w I 2 x ,B= w I 2 y ,C= w I x I y  A=∑wIx2,B=∑wIy2,C=∑wIxIy

二次項函式本質上就是一個橢圓函式。橢圓的扁率和尺寸是由M(x,y) M(x,y)的特徵值λ 1 λ 2  λ1、λ2決定的,橢賀的方向是由M(x,y) M(x,y)的特徵向量決定的,如下圖所示,橢圓方程為:

[Δx,Δy]M(x,y)[ΔxΔy ]=1 [Δx,Δy]M(x,y)[ΔxΔy]=1

image

橢圓函式特徵值與影象中的角點、直線(邊緣)和平面之間的關係如下圖所示。共可分為三種情況:

  • 影象中的直線。一個特徵值大,另一個特徵值小,λ 1 λ 2  λ1≫λ2λ 2 λ 1  λ2≫λ1。自相關函式值在某一方向上大,在其他方向上小。
  • 影象中的平面。兩個特徵值都小,且近似相等;自相關函式數值在各個方向上都小。
  • 影象中的角點。兩個特徵值都大,且近似相等,自相關函式在所有方向都增大。

    image

根據二次項函式特徵值的計算公式,我們可以求M(x,y) M(x,y)矩陣的特徵值。但是Harris給出的角點差別方法並不需要計算具體的特徵值,而是計算一個角點響應值R R來判斷角點。R R的計算公式為:

R=detMα(traceM) 2  R=detM−α(traceM)2

式中,detM detM為矩陣M=[AB B

相關推薦

特徵檢測-———harris檢測

1. 不同型別的角點在現實世界中,角點對應於物體的拐角,道路的十字路口、丁字路口等。從影象分析的角度來定義角點可以有以下兩種定義:角點可以是兩個邊緣的角點;角點是鄰域內具有兩個主方向的特徵點;前者往往需要對影象邊緣進行編碼,這在很大程度上依賴於影象的分割與邊緣提取,具有相

Opencv學習筆記Harris檢測

文章目錄: 一、Harris角點檢測基本理論 二、opencv程式碼實現 三、改進的Harris角點檢測 四、FAST角點檢測 五、參考文獻 六、附錄(資料和原始碼) 一、Harris角點檢測基本理論(要講清楚東西太多,附錄提供文件詳細說明) 1.1 簡略表達:

【OpenCV3經典程式設計100例】242D特徵Harris檢測cornerHarris

一、2d特徵相關知識Learn about how to use the feature points detectors, descriptors and matching inside OpenCV

OpenCV計算機視覺學習13——影象特徵檢測Harris檢測,sift演算法

如果需要處理的原圖及程式碼,請移步小編的GitHub地址   傳送門:請點選我   如果點選有誤:https://github.com/LeBron-Jian/ComputerVisionPractice 前言   特徵點檢測廣泛應用到目標匹配,目標跟蹤,三維重建等應用中,在進行目標建模時會對影象進行目標特徵

Harris檢測原理與opencvpython實現

在學習時主要參考了1.http://blog.csdn.net/xiaowei_cqu/article/details/7805206和opencv-python官方的關於harris的文件(http://opencv-python-tutroals.readthedocs

人臉特徵檢測:深度卷積網路級聯

人臉特徵檢測(face feature detection)也稱為 “facial landmark detection”, “facial keypoint detection” and “face alignment”,是在人臉檢測的基礎上,對人臉上的特徵點例如眼睛、鼻

Harris檢測的實現cv::Mat && c++

原文連結或Google “A COMBINED CORNER AND EDGE DETECTOR”可以找到Harris角點檢測的論文。 簡單的概括一下,Harris角點檢測的原理為,通過計算論文中的R來判斷某一個畫素點是否為角點,通常情況下,當R為正數且較大時,該點為角點。

Harris檢測及程式碼分析

緊接著“Harris角點檢測及程式碼分析”,這裡主要分析OpenCV的cvGoodFeaturesToTrack()函式,這才是角點提取的真正程式碼。 Jianbo Shi, Carlo Tomasi. Good Features to Track.

OpenCV探索之路十五檢測

回調函數 閾值 source and 類型 幾何 擁有 .com named 角點檢測是計算機視覺系統中用來獲取圖像特征的一種方法。我們都常說,這幅圖像很有特點,但是一問他到底有哪些特點,或者這幅圖有哪些特征可以讓你一下子就識別出該物體,你可能就說不出來了。其實說圖像的特征

第十節、Harris檢測原理

str 物體 per 權重 模式 windows www http 特定 OpenCV可以檢測圖像的主要特征,然後提取這些特征、使其成為圖像描述符,這類似於人的眼睛和大腦。這些圖像特征可作為圖像搜索的數據庫。此外,人們可以利用這些關鍵點將圖像拼接起來,組成一個更大的圖像,比

OpenCv-C++-KAZE(AKAZE)區域性特徵檢測

KAZE與AKAZE都是OpenCv中整合的API演算法,AKAZE是KAZE的加速版本(A表示Accelerated(加速的))。且AKAZE的執行效率要優於KAZE。 與SURF和SIFT不同(基於線性),KAZE(AKAZE)是基於非線性插值的方法,這一點在影象處理方面來說確實比SUR

Opencv影象識別從零到精通33----moravecharris

一、角點     影象處理和與計算機視覺領域,興趣點(interest points),或稱作關鍵點(keypoints)、特徵點(feature points) 被大量用於解決物體識別,影象識別、影象匹配、視覺跟蹤、三維重建等一系列的問題。我們不再觀察整幅圖,而是選擇某些

第十節、Harris檢測原理(附原始碼)

OpenCV可以檢測影象的主要特徵,然後提取這些特徵、使其成為影象描述符,這類似於人的眼睛和大腦。這些影象特徵可作為影象搜尋的資料庫。此外,人們可以利用這些關鍵點將影象拼接起來,組成一個更大的影象,比如將許多影象放在一塊,然後形成一個360度全景影象。 這裡我們將學習使用OpenCV來檢測影象特徵,並利用這些

PCL—關鍵點檢測rangeImage低層次雲處理

數據結構 關系 n-1 -a 平面 邊緣提取 bubuko 數據 方式 博客轉載自:http://www.cnblogs.com/ironstark/p/5046479.html 關鍵點又稱為感興趣的點,是低層次視覺通往高層次視覺的捷徑,抑或是高層次感知對低層次處理手段的妥

opencv-檢測Harris檢測

trunc get data 圖像旋轉 ror 協方差矩陣 -a double 特定 轉自:https://blog.csdn.net/poem_qianmo/article/details/29356187 先看看程序運行截圖: 一、引言:關於興趣點(i

webshell檢測

kit t權限 passwd 對比文件 了解 主機 參考 特征碼 不出 0x01:Webshell簡介 ×××者在企業網站時,通常要通過各種方式獲取webshell從而獲得企業網站的控制權,然後方便進行之後的行為。常見×××方式有:直接上傳獲取webshell、SQL註入、

Opencv Harris檢測

demo one pla fault end ges for using opencv #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namesp

tensorflow利用預訓練模型進行目標檢測:預訓練模型的使用

err sync numpy sna sta porting trac git int32 一、運行樣例 官網鏈接:https://github.com/tensorflow/models/blob/master/research/object_detection/obje

吳恩達老師機器學習筆記異常檢測

明天就要開組會了,天天在辦公室划水都不知道講啥。。。 今天開始異常檢測的學習,同樣程式碼比較簡單一點 異常檢測的原理就是假設樣本的個特徵值都呈高斯分佈,選擇分佈較離散的樣本的作為異常值。這裡主要注意的是通過交叉驗證對閾值的選擇和F1score的應用。 原始資料: 程式碼如下:

Dlib + vs2013 人臉檢測

(一) 官網 http://dlib.net/compile.html 各個版本的dlib庫 https://sourceforge.net/projects/dclib/files/dlib/ dlib19.2及之後版本只可用於vs2015 配置dlib而建的工程需要提前配置好o