SURF特徵提取

2021-10-16 08:26:58 字數 3085 閱讀 8772

surf,全稱speeded-up robust feature,是sift演算法的改進版和加速版,綜合性能更優。由herbert bay發表在2023年的歐洲計算機視覺國際會議(europen conference on computer vision,eccv)上。

surf演算法利用了積分圖、特徵描述子降維提公升了計算效率。

surf演算法的基本流程和sift一樣,但是在特徵提取、尺度空間、特徵點主方向和描述子方面會有不同。

surf的計算流程如下:

1.構建hessian矩陣,生成興趣點用於特徵提取

2. 構建尺度空間

3. 特徵點定位

4. 特徵點主方向分配

5. 生成特徵點描述子

6. 特徵點匹配

1.特徵點提取

surf使用盒式濾波器來近似替代sift的高斯濾波器。

2.尺度空間

sift使用高斯差分金字塔dog構建尺度空間,每組依次降取樣,組內使用不同的高斯模糊係數;

surf每組間的尺寸一樣,只是不同組間使用的盒式濾波器的模板尺寸逐漸增大,組內不同層間使用相同尺寸的濾波器,濾波器的模糊係數逐漸增大。

3.特徵點主方向分配

sift特徵點方向採用在特徵點鄰域內統計其梯度直方圖,取直方圖bin值最大的以及超過最大bin值80%的那些方向作為特徵點的主方向和輔方向;

surf採用乙個張角為60度的扇形滑動視窗,計算其區域內的harr小波水平與垂直方向的響應之和,滑動扇形視窗,得到最大的響應區域對應的方向即為此特徵點的主方向。

4. 生成特徵點描述子

sift是取特徵點周圍4x4個區域塊,統計每小塊內8個梯度方向,用4x4x8=128維向量作為sift特徵的描述子;

surf沿著主方向,也是在特徵點周圍取4x4的區域塊,統計每個子區域內25個畫素點的harr小波模板,沿著主方向與垂直於主方向的響應,把如下4個值作為每個子塊區域的特徵向量,所以一共有4x4x4=64維向量作為surf特徵的描述子,維度相比sift縮小一半。

surf = cv2.xfeatures2d.

surf_create()

# flann 引數設計

flann_index_kdtree=0

#ktreeindex配置索引,指定待處理核密度樹的數量(理想的數量在1

-16)

index_params =

dict

(algorithm=

flann_index_kdtree

, trees=5)

#指定遞迴遍歷的次數

search_params =

dict

(checks=50)

#快速最近鄰搜尋包,乙個對大資料集和高維特徵進行最近鄰搜尋的演算法的集合

flann = cv2.

flannbasedmatcher

(index_params, search_params)

img1 = cv2.

imread

(imgname1)

gray1 = cv2.

cvtcolor

(img1, cv2.

color_bgr2gray

) # 灰度處理影象

kp1, des1 = surf.

detectandcompute

(img1, none) # des是描述子

img2 = cv2.

imread

(imgname2)

gray2 = cv2.

cvtcolor

(img2, cv2.

color_bgr2gray

)kp2, des2 = surf.

detectandcompute

(img2, none)

img3 = cv2.

drawkeypoints

(img1, kp1, img1, color=

(255,0

,255))

img4 = cv2.

drawkeypoints

(img2, kp2, img2, color=

(255,0

,255))

hmerge = np.

hstack

((img3, img4)

) # 水平拼接

cv2.

imshow

("point"

, hmerge)

cv2.

waitkey(0

)matches = flann.

knnmatch

(des1, des2, k=2)

matchesmask =[[

0,0]

for i in

range

(len

(matches))]

good =

for m, n in matches:

if m.distance <

0.5* n.distance:

good.

([m]

)img5 = cv2.

drawmatchesknn

(img1, kp1, img2, kp2, good, none, flags=2)

cv2.

imshow

("flann"

, img5)

cv2.

waitkey(0

)cv2.

destroyallwindows

()

SURF特徵提取(MSAC演算法剔除誤匹配)

clc clear close all load colorimage201 load colorimage202 extractfeatures 函式輸入為灰度影象,因此要將rgb影象用函式 rgb2gray 進行轉換 image1 rgb2gray colorimage201 image2 rg...

帶有Lowe s演算法的SURF特徵提取和匹配

直接使用surf提取,匹配的效果還是相當糟糕的,如果我們拿著這樣子的匹配結果去實現影象拼接或者物體追蹤,效果肯定是極差的。所以我們需要進一步篩選匹配點,來獲取優秀的匹配點,這就是所謂的 去粗取精 這裡我們採用了lowe s演算法來進一步獲取優秀匹配點。為了排除因為影象遮擋和背景混亂而產生的無匹配關係...

特徵工程 特徵提取

特徵提取 將任意資料 如文字或影象 轉換為可用於機器學習的數字特徵 注 特徵值化是為了計算機更好的去理解資料 字典特徵提取 作用 對字典資料進行特徵值化 dictvectorizer.get feature names 返回類別名稱 from sklearn.feature extraction i...