Я видел эту команду для imagemagick, которая крута
compare -metric RMSE first.png second.png NULL:
I tried it and two similar images (however not a modification of each other) scored <15% difference. But if I wanted to find images that are similar I cant really scan them against each image with 1M images, it would just be too consuming. Is there a way to fingerprint the images instead (edge fingerprints maybe? edge+color?) and store a 1-4k bytes and use that data to compare how close they are instead?