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...