Python+OpenCV|SURF特徴量

画像処理とOpenCV




SURF記述子

局所領域の内容を認識に有利な情報に変換する過程を記述という。
記述された情報を記述子という。

SURF記述子は、SIFT記述子を改良したもので、効率化されています。

論文

SURF:Speeded-up robust features

Python+OpenCV

import cv2
import numpy as np
img = cv2.imread('haruna_kankore.png')
gray=cv2.imread('haruna_kankore.png',0)

surf = cv2.xfeatures2d.SURF_create()
kp = surf.detect(img)
img_kp = cv2.drawKeypoints(img, kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('img_surf.png', img_kp)

結果

元画像

SURF記述子

プログラム+α

特徴量のマッチング

import cv2

img1 = cv2.imread('haruna_kankore.png')
img2 = cv2.imread('haruna_kankore_temp.png')

surf= cv2.xfeatures2d.SURF_create()


kp1, des1 = surf.detectAndCompute(img1, None)

kp2, des2 = surf.detectAndCompute(img2, None)


bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)


good = []
for m,n in matches:
    if m.distance < 0.2*n.distance:
        good.append([m])

        
img_surf = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good, None,flags=2)
cv2.imwrite("img_surf_match.png", img_surf)

元画像

切り出し

マッチング

参考

SURF (Speeded-Up Robust Features)の導入 — OpenCV-Python Tutorials 1 documentation

タイトルとURLをコピーしました