少し前に、この質問に答えるために、2つの画像が同一であるかどうかを判断する方法を探すことに時間を費やしました。私は今、わずかに異なる問題に直面しています。手元に約2,000枚の画像があり、そのうちのいくつかは同じ内容ですが、互いにスケーリング/回転されたバージョンです(回転は常に90°の倍数です)。さまざまな圧縮と画像形式(主にjpg、一部のpng、その他はありません)。スケーリングは約2:1を超えません。私がやりたいのは、最高品質のインスタンスを保持しながら、重複を排除することです。私がかなり熟練している言語はJavaだけなので、Javaを使用する必要があります。
別の質問への回答は多くの有用なリンクを提供しますが、スケーリング/回転したときに重複を識別できるものはないようです。
この質問と回答は、最初にすべての画像を非常に小さいサイズ(たとえば、32*32または16*16)にスケーリングし、次に基本的にいくつかのハッシュを実行し、ハッシュに基づいて比較することを提案します。これは私には十分賢く聞こえます。画像は比較前に事前に並べ替えることができますが、並べ替え後にはO(n)の問題になります。ただし、画像が回転する可能性があるため、対処方法がわかりません。1つのオプションは、すべての画像を手動で調べて、画像の向きが明確である場合に回転を決定することです(人間の目は、どちらの方向に「上」にするかを非常に簡単に決定できます)。可能であれば、それは避けたいと思います。
この種の問題に対処するための確立された方法/アルゴリズム(リンクはSSIMに言及しています)がありますか、または上記よりも優れた方法を思い付くことができますか?たぶん誰かがタスクに適したJavaのライブラリを知っていますか(リンクされた質問には、OpenCV、次にImageJ、imgsclrのJavaラッパーについての言及があります)?どんな助けでも大歓迎です。