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