Vielleicht möchten Sie einen Blick auf die Funktionsübereinstimmung werfen. Die Idee ist, Features in zwei Bildern zu finden und sie abzugleichen. Diese Methode wird häufig verwendet, um eine Vorlage (z. B. ein Logo) in einem anderen Bild zu finden. Ein Merkmal kann im Wesentlichen als Dinge beschrieben werden, die Menschen in einem Bild interessant finden würden, wie z. B. Ecken oder offene Räume. Es gibt viele Arten von Merkmalerkennungstechniken. Ich empfehle jedoch, eine skaleninvariante Merkmalstransformation (SIFT) als Merkmalerkennungsalgorithmus zu verwenden. SIFT ist unveränderlich gegenüber Bildübersetzung, Skalierung, Drehung, teilweise unveränderlich gegenüber Beleuchtungsänderungen und robust gegenüber lokaler geometrischer Verzerrung. Dies scheint Ihrer Spezifikation zu entsprechen, bei der die Bilder leicht unterschiedliche Verhältnisse haben können.
In Anbetracht der beiden bereitgestellten Bilder wird hier versucht, die Funktionen mithilfe des FLANN-Feature-Matchers abzugleichen . Um festzustellen, ob die beiden Bilder gleich sind, können wir sie auf einen vorgegebenen Schwellenwert stützen, der die Anzahl der Übereinstimmungen verfolgt, die den Verhältnis-Test bestehen, der in Unterscheidungsbildmerkmale aus skalierungsinvarianten Schlüsselpunkten von David G. Lowe beschrieben ist . Eine einfache Erklärung für den Test ist, dass der Verhältnis-Test prüft, ob Übereinstimmungen nicht eindeutig sind und entfernt werden sollten. Sie können ihn als Ausreißer-Entfernungstechnik behandeln. Wir können die Anzahl der Übereinstimmungen zählen, die diesen Test bestehen, um festzustellen, ob die beiden Bilder gleich sind. Hier sind die Ergebnisse der Funktionsübereinstimmung:
Matches: 42
Die Punkte stellen alle erkannten Übereinstimmungen dar, während die grünen Linien die "guten Übereinstimmungen" darstellen, die den Verhältnis-Test bestehen. Wenn Sie den Verhältnis-Test nicht verwenden, werden alle Punkte gezogen. Auf diese Weise können Sie diesen Filter als Schwellenwert verwenden, um nur die am besten übereinstimmenden Funktionen beizubehalten.
Ich habe es in Python implementiert, ich bin nicht sehr vertraut mit Rails. Hoffe das hilft, viel Glück!
Code
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
Befehlszeilentool von ImageMagick verfügt über einen-subimage-search
Schalter.