PCL 低層次視覺 關鍵點檢測(Harris)

2021-09-08 11:33:40 字數 4007 閱讀 7518

除去narf這種和特徵檢測聯絡比較緊密的方法外,一般來說特徵檢測都會對曲率變化比較劇烈的點更敏感。harris演算法是影象檢測識別演算法中非常重要的乙個演算法,其對物體姿態變化魯棒性好,對旋轉不敏感,可以很好的檢測出物體的角點。甚至對於標定演算法而言,harris角點檢測是使之能成功進行的基礎。

harris演算法的思想還是很有意思的。很聰明也很trick.

其思想及數學推導大致如下:

1.在影象中取乙個窗 w (矩形窗,高斯窗,xx窗,各種窗,某師姐要改標定演算法不就可以從選harris的窗開始做起麼。。。。。)

2.獲得在該窗下的灰度  i

3.移動該窗,則灰度會發生變化,平坦區域灰度變化不大,邊緣區域沿邊緣方向灰度變化劇烈,角點處各個方向灰度變化均劇烈

4.依據3中條件選出角點

當然啦,如果harris運算元的實現也和它的思想這麼平淡那我就不表揚他聰明了,harris運算元的具體實現方法,利用的是影象偏微分方程的思想。

先給出抽象數學表示式(不要問我為什麼這麼淡,我也不知道):

其中 w 代表窗函式,某個x,y為影象座標,u,v是乙個移動向量(既反應移動方向,也反應移動大小)。

ix表示影象沿x方向的差分,iy表示影象沿y方向的差分。影象差分運算元有什麼sober~pxx~總之很多就對了,一階差分還是很好求的。

顯然,e(u,v)可以用另外一種形式來表示了。最終可以表達為協方差矩陣的形式。

ok,在這裡我們有了數學中最優雅的表達——matrix,especially symmetric matrix. nothing is better than that.

顯然,e(u,v)的值和u,v有關。。。很有關。。

1.可以取一組u,v,讓e(u,v)的值最小。

2.還可以取一組u,v,讓e(u,v)的值最大。

這些u,v怎麼取,顯然就和矩陣m的方向有關了。ok,讓我們換乙個思路來看這個矩陣。

平面內的乙個矩陣乘以乙個向量v,大概簡單的寫成   mv

它會使得這個向量發生乙個作用:旋轉,拉伸,平移.....總之,這種作用叫做線性變換

矩陣的左邊好像也是乙個向量,只不過是橫著寫的([u v]),換而言之,那就是 vt(v的轉置)。

vt(mv)......這是啥?

意思好像是。。。。v先旋轉+拉伸一下,然後再在它自己身上投影,最終的 e(u,v)本質上來說,就是這個投影的長度。。。嗯,對,投影的長度

好了。我們現在明確了 e(u,v) 的數學幾何意義,再回過頭來想想,要怎樣才能讓這個投影的長度達到最大或者最小呢?

顯然,答案就是矩陣的特徵值特徵向量,當[u v]t 取特徵向量方向的時候,矩陣m只有拉伸作用,而沒有旋轉作用,這時的投影長度是最長的(如果反向投則是負的最長)。

到此為止,我們已經知道了 e(u,v)的最大和最小值了(笨辦法是求出特徵向量方向再帶進去,聰明的方法是直接看矩陣特徵值,特徵值就是放大倍數)。並且,分析可以知道,特徵值越大,那麼說明 e(u,v)越大。

1.兩個特徵值都很大**********>角點(兩個響應方向)

2.乙個特徵值很大,乙個很小*****>邊緣(只有乙個響應方向)

3.兩個特徵值都小**********==>平原地區(響應都很微弱)

基於上述特徵,有很多人設計了角點的快速判據。

有 det(m) - trace(m)^2

有 det(m)/trace(m)

.....等等很多,但是這不重要,思想都是一樣的。(某師姐這裡又有乙個標定演算法的創新點哦。。。。我會告訴你換換判據又是個新思路?)

在2dharris裡,我們使用了 影象梯度構成的 協方差矩陣。 影象梯度。。。嗯。。。。每個畫素點都有乙個梯度,在一階資訊量的情況下描述了兩個相鄰畫素的關係。顯然這個思想可以輕易的移植到點雲上來。

oops,糟糕,點雲木有灰度的概念啊,一般的點雲也木有強度的概念啊。。。這可如何是好??????

別緊張,pcl 說這樣能行,那就肯定能行咯,先定性的分析一下harris3d的理念。

想象一下,如果在 點雲中存在一點p

1、在p上建立乙個區域性座標系:z方向是法線方向,x,y方向和z垂直。

2、在p上建立乙個小正方體,不要太大,大概像材料力學分析應力那種就行

3、假設點雲的密度是相同的,點雲是一層蒙皮,不是實心的。

a、如果小正方體沿z方向移動,那小正方體裡的點雲數量應該不變

b、如果小正方體位於邊緣上,則沿邊緣移動,點雲數量幾乎不變,沿垂直邊緣方向移動,點雲數量改變

c、如果小正方體位於角點上,則有兩個方向都會大幅改變點雲數量

ok,我們已經有了harris3d的基本準則,接下來要思考的是怎樣優雅的解決這個問題

兩個和z相互垂直的方向。。。。嗯。。。。perpendicular。。。。

如果由法向量x,y,z構成協方差矩陣,那麼它應該是乙個對稱矩陣。而且特徵向量有乙個方向是法線方向,另外兩個方向和法線垂直。

那麼直接用協方差矩陣替換掉影象裡的m矩陣,就得到了點雲的harris演算法。

其中,半徑r可以用來控制角點的規模

r小,則對應的角點越尖銳(對雜訊更敏感)

r大,則可能在平緩的區域也檢測出角點

r怎麼取? 我也不知道。。。。。試吧。。。。。

根據以上分析,在pcl的api文件的幫助下,我嘗試了一下 harris3d 演算法。感謝山大的畢同學提供的點雲,該點雲是場景點雲而不是一般的物體點雲。總體感覺是慢,因為針對每個點雲,需要計算它的法線,算完之後又要針對每個點進行協方差矩陣的計算,總而言之,整個過程還是非常耗時的。並且說實話。。。演算法的效果一般般。

由於我選擇的搜尋半徑比較大,所以找到的角點都不是太"角」,關於引數設定大家可以多多探索,但我認為,特徵點檢測演算法實在太慢,對實時機械人系統來說是遠遠達不到要求的。這種先演算法線,再算協方差的形式真心上不起。。。。實際上這種基於領域法線的特徵點檢測演算法有點類似基於 crf的語義識別演算法,都只使用了相鄰資訊而忽略了全域性資訊。也可能相鄰資訊包含的相關性比較大,是通往高層次感知的唯一路徑吧,誰又知道呢?

任重而道遠。。。。。

PCL 低層次視覺 點雲分割(RanSaC)

點雲分割可謂點雲處理的精髓,也是三維影象相對二維影象最大優勢的體現。不過多插一句,自niloy j mitra教授的global contrast based salient region detection出現,最優分割到底鹿死誰手還不好說。暫且不論他開掛的影象處理演算法,先安心做乙個pcl吹 點...

PCL 低層次視覺 點雲濾波(初步處理)

點雲濾波是點雲處理的基本步驟,也是進行 high level 三維影象處理之前必須要進行的預處理。其作用類似於訊號處理中的濾波,但實現手段卻和訊號處理不一樣。我認為原因有以下幾個方面 點雲不是函式,對於複雜三維外形其x,y,z之間並非以某種規律或某種數值關係定義。所以點雲無法建立橫縱座標之間的聯絡。...

PCL 低層次視覺 點雲濾波(基於點雲頻率)

今天在閱讀分割有關的文獻時,驚喜的發現,點雲和影象一樣,有可能也存在頻率的概念。但這個概念並未在文獻中出現也未被使用,謹在本博文中濫用一下 高頻 一詞。點雲表達的是三維空間中的一種資訊,這種資訊本身並沒有一一對應的函式值。故點雲本身並沒有在講訴一種變化的訊號。但在抽象意義上,點雲必然是在表達某種訊號...