web-dev-qa-db-ja.com

Java画像の類似性を比較するライブラリ

Javaで画像を相互に比較できるライブラリの研究にかなりの時間を費やしました。

私は本当に何も有用なものを見つけませんでした、おそらく私のGoogleSearchスキルは十分に高くないので、私はあなたにこのような何かを見つけることができる方向に私を向けることができるかどうか尋ねたいと思いました。

基本的に私がやりたいことは、2つの画像を互いに比較し、2つの画像がどれだけ似ているかの値を取得することです。パーセンテージ程度。

私が使用できるものを持っていることを願っています、私はそのようなものを自分で書く方法を知りません...

PS:必ずしもJavaである必要はありません。それは単に私のアプリが実行される環境です。

52
F.P

SO自体に関する2つの答えを見ることができます: これは、画像の比較そのものに関するもので、C++ の内容へのリンクを提供します(読んだ場合正確に) これは、C にあるより広範なアプローチへのリンクを提供します。

その議論には、自分でJavaに「翻訳」できるいくつかの関連技術の実装コードにつながるリンクがあるため、2番目のリンクから始めることをお勧めします。

それは私のGoogleスキルでできる最高のことです。Javaはありません-申し訳ありません。良い出発点になることを願っています!

編集: Java で独自の比較クラスを書いたあなたの問題を抱えている人がいます。しかし、ソースコードは読みませんでした。彼はその目的のためにJavaライブラリも見つけられなかったと明示的に述べているので、彼がそれを自分で書いたのはそのためです。

ああ、そしてこの[ SOの質問にはおそらく最高のリンクがあります すべてのJava画像処理のライブラリに関して。うまくいけば、画像の類似性を比較できるものがあります。

OK、最後の編集: Java Image Processing Cookbook は、2つの違いを判断するための基本的なアルゴリズムのJava実装を示していますピクチャー。また、それを書いた人に連絡するための電子メールと参照のホストもあります。ライブラリはありません。

質問へのコメントを読んだ後の編集:上記のリンクをすべて確認していない限り、2つの画像が等しいかどうかを確認するように見えるので、Java Image Processingから始めることをお勧めしますクックブック(Javaに等しい画像をチェックするアルゴリズムの実装があるため)およびSO質問への最後のリンク。また、 check PerceptualImageDiff およびそのプロジェクトのソースコード(C++);それは本当に気の利いたように聞こえます-どうやら2つの画像が同じに見えるかどうかをチェックすることになっています 人間の視覚系に

30
G. Bach

OpenCV は素晴らしい画像処理ライブラリですが、画像を比較したいだけではやり過ぎかもしれません。その場合は、 ImageJ を使用します。

OpenCV here を使用してこれを行う方法を既に誰かが尋ねました。

これにはC++を使用しますが、Javaを使用する必要がある場合は、OpenCVのJavaラッパー、 here )を作成したプロジェクトがあります。

8
dario_ramos

このリンク のクラスを使用して2つの製品イメージを比較しましたが、結果は素晴らしいものでした。 2つの画像の比較に使用するためだけに実装するのはそれほど難しくありません。JAIとSwingなどの行を削除するだけです。画像のサイズを300x300に変更し、「1234」などの差分値を返します。最大差の値は「11041」に近く、リンクに記載されています。分割を行うと、単純にパーセンテージを取得できます。興味があれば、修正したコードを後でここに投稿できます。

結果は素晴らしいものでしたが、それでも「デジタルカメラの写真」が得られ、「テレビの写真」に似ていることが検出されました。そのため、ImageJを使用して、画像内のedgesを検出しました。 ImageJは、エッジ検出操作を使用して、画像をエッジ検出グレーフォーム画像に変換します。 2つのエッジ検出画像を同じコンパレータに配置し、両方の値を乗算したよりも。結果はさらに正確になりました。

画像のエッジ検出形式の取得

7
İsmet Alkan