4

Rubyのイメージ ライブラリrmagickを使用して 2 つのイメージを比較し、それらが実際に同じイメージであるかどうかを検出します (重複を避けます)。

私が通常行っている方法は、差分法を使用することです。

require 'rmagick'

img1.difference(img2)
#=> [238.738932291668, 0.001389172567175018, 0.0184313725490196]

上記の例は、2 つの画像の出力であり、ほぼ同じものです。これは、新しいシナリオに出くわすまで、私にとって非常にうまく機能していましたが、この方法ではうまく処理できないという新しいシナリオに遭遇しました。 . ここで突然、2 つの画像が人間の目にはまったく同じに見えても、コンピューターはそれらが非常に異なっていると判断します。画像の 1 つがほんの少しだけトリミングされているためです。

とにかくこの状況を処理できるので、そのうちの1つが少しトリミングされていても、同じ画像であることを検出しますか?

4

1 に答える 1

1

サンプルの写真は人間に非常に似ているかもしれませんが、生の画像データは非常に異なって見えます。

生データを比較しないが、変換、スケーリング、回転などの操作に対して不変である、より洗練された画像処理アルゴリズムが必要です。

通常、 OpenCVのようなコンピューター ビジョン ライブラリを使用することをお勧めします。また、ルビ バインディングもあります。ドキュメントのこの部分で、いわゆるイメージ モーメントを参照することができます。正規化された中心モーメント nu_ij は、移動とスケーリングに対して不変でなければなりません。両方の画像でこれらを計算して比較すると、わずかにトリミングされた画像でほぼ同じ値が得られるはずです。

于 2015-09-18T16:58:23.727 に答える