J'ai deux images différentes:
et
Comme vous pouvez le voir, les deux sont clairement "identiques" d'un point de vue humain. Maintenant, je veux détecter par programme qu'ils sont identiques. J'utilise la magie d'image via le Ruby gem appelé rmagick
comme ceci:
img1 = Magick::Image.from_blob(File.read("image_1.jpeg")).first
img2 = Magick::Image.from_blob(File.read("image_2.jpeg")).first
if img1.difference(img2).first < 4000.0 # I have found this to be a good threshold, but does not work for cropped images
puts "they are the same!!!"
end
Bien que cela fonctionne bien pour les images qui ont le même rapport/recadrage, ce n'est pas idéal lorsqu'elles ont un recadrage légèrement différent et ont été redimensionnées à la même largeur.
Existe-t-il un moyen de le faire pour les images avec un recadrage différent? Je suis intéressé par une solution où je peux dire quelque chose comme: Une image est contenue dans l'autre et couvre quelque part autour, par exemple. 90% d'entre eux.
PS. Je peux obtenir les images dans une résolution plus élevée si cela aide (par exemple, le double)
Considérez la méthode find_similar_region . Utilisez la plus petite des deux images comme image cible. Essayez différentes valeurs pour les attributs fuzz sur l'image et l'image cible.