기능 일치를 살펴볼 수 있습니다. 아이디어는 두 이미지에서 기능을 찾아서 일치시키는 것입니다. 이 방법은 일반적으로 다른 이미지에서 템플릿 (예 : 로고)을 찾는 데 사용됩니다. 본질적으로 기능은 모서리 나 열린 공간과 같이 이미지에서 사람이 흥미롭게 찾을 수있는 것으로 설명 할 수 있습니다. 특징 검출 기술에는 여러 유형이 있지만, SIFT (scale-invariant feature transform)를 특징 검출 알고리즘으로 사용하는 것이 좋습니다. SIFT는 이미지 변환, 스케일링, 회전, 조명 변화에 부분적으로 불변, 로컬 기하학적 왜곡에 강합니다. 이미지의 비율이 약간 다를 수있는 사양과 일치하는 것 같습니다.
제공된 두 개의 이미지가 제공되면 FLANN 기능 매처를 사용하여 기능을 일치 시키려고합니다 . 두 이미지가 동일한 지 확인하기 위해 David G. Lowe의 Scale-Invariant Keypoints의 독특한 이미지 기능에 설명 된 비율 테스트를 통과하는 일치 수를 추적하는 미리 결정된 임계 값을 기준으로 할 수 있습니다. 테스트에 대한 간단한 설명은 비율 테스트에서 일치 항목이 모호하고 제거되어야하는지 검사하여 이상치 제거 기술로 취급 할 수 있다는 것입니다. 이 테스트를 통과 한 일치 횟수를 계산하여 두 이미지가 동일한 지 확인할 수 있습니다. 기능 일치 결과는 다음과 같습니다.
Matches: 42
점은 감지 된 모든 일치를 나타내고 녹색 선은 비율 테스트를 통과 한 "양호한 일치"를 나타냅니다. 비율 테스트를 사용하지 않으면 모든 점이 그려집니다. 이러한 방식으로이 필터를 임계 값으로 사용하여 가장 일치하는 기능 만 유지할 수 있습니다.
파이썬으로 구현했는데 Rails에 익숙하지 않습니다. 이것이 도움이되기를 바랍니다. 행운을 빕니다!
암호
import numpy as np
import cv2
# Load images
image1 = cv2.imread('1.jpg', 0)
image2 = cv2.imread('2.jpg', 0)
# Create the sift object
sift = cv2.xfeatures2d.SIFT_create(700)
# Find keypoints and descriptors directly
kp1, des1 = sift.detectAndCompute(image2, None)
kp2, des2 = sift.detectAndCompute(image1, None)
# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
count = 0
# Ratio test as per Lowe's paper (0.7)
# Modify to change threshold
for i,(m,n) in enumerate(matches):
if m.distance < 0.15*n.distance:
count += 1
matchesMask[i]=[1,0]
# Draw lines
draw_params = dict(matchColor = (0,255,0),
# singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = 0)
# Display the matches
result = cv2.drawMatchesKnn(image2,kp1,image1,kp2,matches,None,**draw_params)
print('Matches:', count)
cv2.imshow('result', result)
cv2.waitKey()
compare
명령 행 도구에는-subimage-search
스위치가 있습니다.