1. ホーム
  2. image

[解決済み] OpenCVで画像の類似性をチェックする

2022-04-22 22:31:37

質問

OpenCV は、2つの画像の比較をサポートしており、これらの画像がどの程度似ているかを示す何らかの値(おそらくパーセンテージ)を返しますか?例えば,同じ画像が2回渡された場合は100%が返され,全く異なる画像であれば0%が返されるでしょう.

私はすでにここStackOverflowで似たようなトピックをたくさん読みました。また、かなりググりました。悲しいことに、私は満足のいく答えにたどり着くことができませんでした。

どのように解決するのですか?

これは非常に大きなテーマで、3行のコードから研究誌全体まで、さまざまな回答があります。

そのような手法のうち、最も一般的なものとその結果を概説します。

ヒストグラムの比較

最もシンプルで高速な手法の一つ。数十年前に、画像の類似性を見つけるための手段として提案された。森には緑が多く、人の顔にはピンクが多い、といった考え方。森は緑が多く、人の顔はピンクが多いという考え方です。ですから、2枚の写真を森で比較すると、どちらも緑が多いので、ヒストグラムの間に類似性が得られます。

<ブロッククオート

欠点:単純すぎる。バナナとビーチはどちらも黄色なので、同じように見えるでしょう。

OpenCV のメソッド:compareHist()

テンプレートマッチング

ここでは良い例として matchTemplate一致するものを見つける . 検索する画像と検索される画像を畳み込みます。通常、大きな画像の中にある小さな画像の部分を探すのに使われる。

<ブロッククオート

欠点は 同じ画像、同じサイズ、同じ向きでないと良い結果は得られません。

OpenCV のメソッド: matchTemplate()

フィーチャーマッチング

画像検索の最も効率的な方法の1つと考えられている。画像からいくつかの特徴を抽出し、回転、拡大、縮小しても同じ特徴が認識されることを保証する方法。このようにして抽出された特徴は、他の画像特徴セットと照合することができる。このようにして抽出された特徴量と他の画像の特徴量を照合し、一致する割合が高い画像は同じシーンを撮影したものと判断される。

2つの点群のホモグラフィーを求めることで、原画の撮影角度の相対的な差や重なり具合も求めることができる。

<ブロッククオート

OpenCVのチュートリアルやサンプルはたくさんありますし、素敵なビデオもあります。 こちら . OpenCVのモジュール(features2d)全体が、これに特化しています。

欠点は 遅いかもしれない。完璧ではありません。


の上にあります。 OpenCV Q&A のサイトで、画像全体を比較するのに適した特徴記述子と、画像中の人の顔や車などのオブジェクトを識別するのに使用されるテクスチャ記述子の違いについて話しているところです。