数字图像处理学习笔记(一):特征检测和匹配概述
數(shù)字圖像處理學習筆記(一):特征檢測和匹配概述
參考博客:
- 特征點的匹配
- SIFT特征詳解
- 數(shù)字圖像處理學習筆記(二):SIFT(尺度不變特征變換)算法
1、特征點概述
如何高效且準確的匹配出兩個不同視角的圖像中的同一個物體,是許多計算機視覺應用中的第一步。雖然圖像在計算機中是以灰度矩陣的形式存在的,但是利用圖像的灰度并不能準確的找出兩幅圖像中的同一個物體。這是由于灰度受光照的影響,并且當圖像視角變化后,同一個物體的灰度值也會跟著變化。所以,就需要找出一種能夠在相機進行移動和旋轉(視角發(fā)生變化),仍然能夠保持不變的特征,利用這些不變的特征來找出不同視角的圖像中的同一個物體。
為了能夠更好的進行圖像匹配,需要在圖像中選擇具有代表性的區(qū)域,例如:圖像中的角點、邊緣和一些區(qū)塊,但在圖像識別出角點是最容易,也就是說角點的辨識度是最高的。所以,在很多的計算機視覺處理中,都是提取角點作為特征,對圖像進行匹配,例如SFM,視覺SLAM等。
但是,單純的角點并不能很好的滿足我們的需求,例如:相機從遠處得到的是角點,但是在近處就可能不是角點;或者,當相機旋轉后,角點就發(fā)生了變化。為此,計算機視覺的研究者們設計了許多更為穩(wěn)定的的特征點,這些特征點不會隨著相機的移動,旋轉或者光照的變化而變化。例如:SIFT,SURF,ORB等
一個圖像的特征點由兩部分構成:
- 關鍵點(Keypoint):關鍵點指的是該特征點在圖像中的位置,有些還具有方向、尺度信息;
- 描述子(Descriptor):描述子通常是一個向量,按照人為的設計的方式,描述關鍵點周圍像素的信息。
通常描述子是按照外觀相似的特征應該有相似的描述子設計的。因此,在匹配的時候,只要兩個特征點的描述子在向量空間的距離相近,就可以認為它們是同一個特征點。
2、特征點的匹配
特征點的匹配通常需要以下三個步驟:
1)提取圖像中的關鍵點,這部分是查找圖像中具有某些特征(不同的算法有不同的)的像素;
2)根據(jù)得到的關鍵點位置,計算特征點的描述子;
3)根據(jù)特征點的描述子,進行匹配;
這里先介紹下特征點的描述子,一個好的描述子是準確匹配的基礎,關鍵點的提取和特征點的匹配,在后面介紹。
3、特征點描述子
從圖像中提取到特征的關鍵點信息,通常只是其在圖像的位置信息(有可能包含尺度和方向信息),僅僅利用這些信息無法很好的進行特征點的匹配,所以就需要更詳細的信息,將特征區(qū)分開來,這就是特征描述子。另外,通過特征描述子可以消除視角的變化帶來圖像的尺度和方向的變化,能夠更好的在圖像間匹配。
特征的描述子通常是一個精心設計的向量,描述了關鍵點及其周圍像素的信息。為了能夠更好的匹配,一個好的描述子通常要具有以下特性:
- 不變性:指特征不會隨著圖像的放大縮小旋轉而改變;
- 魯棒性:對噪聲、光照或者其他一些小的形變不敏感;
- 可區(qū)分性:每一個特征描述子都是獨特的,具有排他性,盡可能減少彼此間的相似性。
其中描述子的可區(qū)分性和其不變性是矛盾的,一個具有眾多不變性的特征描述子,其區(qū)分局部圖像內容的能力就比較稍弱;而如果一個很容易區(qū)分不同局部圖像內容的特征描述子,其魯棒性往往比較低。所以,在設計特征描述子的時候,就需要綜合考慮這三個特性,找到三者之間的平衡。
特征描述子的不變性主要體現(xiàn)在兩個方面:
- 尺度不變性 (Scale Invarient)
指的是同一個特征,在圖像的不同的尺度空間保持不變。匹配在不同圖像中的同一個特征點經(jīng)常會有圖像的尺度問題,不同尺度的圖像中特征點的距離變得不同,物體的尺寸變得不同,而僅僅改變特征點的大小就有可能造成強度不匹配。如果描述子無法保證尺度不變性,那么同一個特征點在放大或者縮小的圖像間,就不能很好的匹配。為了保持尺度的不變性,在計算特征點的描述子的時候,通常將圖像變換到統(tǒng)一的尺度空間,再加上尺度因子。 - 旋轉不變性 (Rotation Invarient)
指的是同一個特征,在成像視角旋轉后,特征仍然能夠保持不變。和尺度不變性類似,為了保持旋轉不變性,在計算特征點描述子的時候,要加上關鍵點的方向信息。
為了有個更直觀的理解,下面給出SIFT,SURF,BRIEF描述子計算方法對比:
從上表可以看出,SIFT,SURF和BRIEF描述子都是一個向量,只是維度不同。其中,SIFT和SURF在構建特征描述子的時候,保存了特征的方向和尺度特征,這樣其特征描述子就具有尺度和旋轉不變性;而BRIEF描述子并沒有尺度和方向特征,不具備尺度和旋轉不變性。
4、常用的特征點算法
上面提到圖像的特征點包含兩個部分:
- 特征點的提取,在圖像檢測到特征點的位置。
- 特征點的描述,也就是描述子。
在圖像中提取到關鍵點的位置信息后,為了能夠更有效的匹配(主要是保證尺度和旋轉不變性),通常使用一個向量來描述關鍵點及其周圍的信息。特征的描述子,在特征點的匹配中是非常重要的,上一小節(jié)中對其應該具有的性質做了介紹。但具體到一個算法來說,可能其既有特征點的提取算法也有特征點描述子的算法,也有可能其僅僅是一個特征點提取算法或者是特征點的描述子算法。在本小節(jié)就常用的特征點算法做一個簡要的說明。
一、SIFT
提到特征點算法,首先就是大名鼎鼎的SIFT算法了。SIFT的全稱是Scale Invariant Feature Transform,尺度不變特征變換,2004年由加拿大教授David G.Lowe提出的。SIFT特征對旋轉、尺度縮放、亮度變化等保持不變性,是一種非常穩(wěn)定的局部特征。
SIFT算法主要有以下幾個步驟:
- 1)高斯差分金字塔的構建
使用組和層的結構構建了一個具有線性關系的金字塔(尺度空間),這樣可以在連續(xù)的高斯核尺度上查找圖像的特征點;另外,它使用一階的高斯差分來近似高斯的拉普拉斯核,大大的減少了運算量。 - 2)尺度空間的極值檢測及特征點的定位
搜索上一步建立的高斯尺度空間,通過高斯差分來識別潛在的對尺度和旋轉不變的特征點。但是,在離散空間中,局部極值點可能并不是真正意義的極值點,真正的極值點有可能落在離散點的間隙中,SIFT通過尺度空間DoG函數(shù)進行曲線擬合尋找極值點。
特征方向賦值 - 3)基于圖像局部的梯度方向,分配給每個關鍵點位置一個或多個方向,后續(xù)的所有操作都是對于關鍵點的方向、尺度和位置進行變換,從而提供這些特征的不變性。
- 4)特征描述子的生成
通過上面的步驟已經(jīng)找到的SIFT特征點的位置、方向、尺度信息,最后使用一組向量來描述特征點及其周圍鄰域像素的信息。
SIFT算法中及包含了特征點的提取算法,也有如何生成描述子的算法,更進一步的SIFT算法介紹可參看:
二、SURF
SURF全稱 Speeded Up Robust Features “加速版的具有魯棒性的特征”,是在SIFT算法的基礎上提出的,主要針對SIFT算法運算速度慢,計算量大的缺點進行了改進。
SURF的流程和SIFT比較類似,這些改進體現(xiàn)在以下幾個方面:
- 1)特征點檢測是基于Hessian矩陣,依據(jù)Hessian矩陣行列式的極值來定位特征點的位置。并且將Hession特征計算與高斯平滑結合在一起,兩個操作通過近似處理得到一個核模板。
- 2)在構建尺度空間時,使用box filter與源圖像卷積,而不是使用DoG算子。
- 3)SURF使用一階Haar小波在x、y兩個方向的響應作為構建特征向量的分布信息。
三、FAST特征點提取算法
SIFT和SURF是非常好的,穩(wěn)定的特征點算法,但運算速度是其一大弊端,無法做到實時的特征提取和匹配,其應用就有了很大的局限性。FAST特征提取算法彌補了這一局限,檢測局部像素灰度變化明顯的地方,以速度快而著稱,其全稱為:Features From Accelerated Segment Test。在FAST算法的思想很簡單:如果一個像素與周圍鄰域的像素差別較大(過亮或者過暗),那么可以認為該像素是一個角點。和其他的特征點提取算法相比,FAST算法只需要比較像素和其鄰域像素的灰度值大小,十分便捷。
FAST算法提取角點的步驟:
- 1)在圖像中選擇像素p,假設其灰度值為:Ip
- 2)設置一個閾值T,例如:Ip 的20%
- 3)選擇p周圍半徑為3的圓上的16個像素,作為比較像素
- 4)假設選取的圓上有連續(xù)的N個像素大于 Ip+T 或者 Ip-T,那么可以認為像素p就是一個特征點。
(N通常取12,即為FAST-12;常用的還有FAST-9,FAST-11)。
FAST算法只檢測像素的灰度值,其運算速度極快,同時不可避免的也有一些缺點:
- 檢測到的特征點過多并且會出現(xiàn)“扎堆”的現(xiàn)象。這可以在第一遍檢測完成后,使用非最大值抑制(Non-maximal suppression),在一定區(qū)域內僅保留響應極大值的角點,避免角點集中的情況。
- FAST提取到的角點沒有方向和尺度信息
上面的介紹的SIFT和SURF算法都包含有各自的特征點描述子的計算方法,而FAST不包含特征點描述子的計算,僅僅只有特征點的提取方法,這就需要一個特征點描述方法來描述FAST提取到的特征點,以方便特征點的匹配。下面介紹一個專門的特征點描述子的計算算法:
BRIEF描述子
BRIEF是一種二進制的描述子,其描述向量是0和1表示的二進制串。0和1表示特征點鄰域內兩個像素(p和q)灰度值的大小:如果p比q大則選擇1,反正就取0。在特征點的周圍選擇128對這樣的p和q的像素對,就得到了128維由0,1組成的向量。那么p和q的像素對是怎么選擇的呢?通常都是按照某種概率來隨機的挑選像素對的位置。
BRIEF使用隨機選點的比較,速度很快,而且使用二進制串表示最終生成的描述子向量,在存儲以及用于匹配的比較時都是非常方便的,其和FAST的搭配起來可以組成非常快速的特征點提取和描述算法。
四、ORB算法
ORB的全稱是Oriented FAST and Rotated BRIEF,是目前來說非常好的能夠進行的實時的圖像特征提取和描述的算法,它改進了FAST特征提取算法,并使用速度極快的二進制描述子BRIEF。
針對FAST特征提取的算法的一些確定,ORB也做了相應的改進。
- 使用非最大值抑制,在一定區(qū)域內僅僅保留響應極大值的角點,避免FAST提取到的角點過于集中。
- FAST提取到的角點數(shù)量過多且不是很穩(wěn)定,ORB中可以指定需要提取到的角點的數(shù)量N,然后對FAST提取到的角點分別計算Harris響應值,選擇前N個具有最大響應值的角點作為最終提取到的特征點集合。
- FAST提取到的角點不具有尺度信息,在ORB中使用圖像金字塔,并且在每一層金字塔上檢測角點,以此來保持尺度的不變性。
- FAST提取到的角點不具有方向信息,在ORB中使用灰度質心法(Intensity Centroid)來保持特征的旋轉不變性。
FAST-12算法:
添加預測試操作,于每個像素,直接檢測在鄰域圓上的第1,5,9,13個像素的亮度,只有當這四個像素當中有三個同時大于IP+T或者小于IP-T的時候,當前像素才有可能是是角點。
- 問題1:FAST特征點的數(shù)量很多,并且不是確定,而大多數(shù)情況下,我們希望能夠固定特征點的數(shù)量。
解決方法:在ORB當中,我們可以指定要提取的特征點數(shù)量。對原始的FAST角點分別計算Harris的響應值,然后選取前N個點具有最大相應值的角點,作為最終角點的集合。
- 問題2:FAST角點不具有方向信息和尺度問題。
解決方法:尺度不變性構建的圖像的金字塔,并且從每一層上面來檢測角點。旋轉性是由灰度質心法實現(xiàn)。
灰度質心法:質心是指以圖像塊灰度值作為權重的中心。(目標是為了找到方向)
1)在一個小的圖像塊B中,定義圖像塊的矩為:
2)通過矩找到圖像塊的質心
3)連接圖像塊的幾何中心o與質心C,得到一個oc的向量,把這個向量的方向定義特征點的方向
總結
以上是生活随笔為你收集整理的数字图像处理学习笔记(一):特征检测和匹配概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab的四维图像数据可视化
- 下一篇: 如何修改matplotlib的图例的标题