私は 2 つの画像を持っています。それらが異なるかどうかを知るために、応答 (true または false) が必要です。画像は同じサイズではありません。
2 に答える
単純なダミーの方法: 最大の画像のサイズを変更して最小の画像のサイズと一致させ、比較します。
次の画像を考えて、それぞれ 1 から 4 まで列挙してください。
2 つのイメージi
とを比較するj
には、 で便利に利用できる 3 ローブ ランチョスを使用して、そのうちの最大のものをもう一方のサイズにリサイズしPIL
ますimg1.resize(img2.size, Image.ANTIALIAS)
。ここで、たとえば、 url のイメージを python のファイルシステムのイメージと比較するで説明されているメトリックを使用して、比較に進みます。
リンクされた回答に示されているメトリックSSIMとNRMSEをそれぞれ使用した類似性の結果を次に示します。
画像 1
-> 2: [0.98, 0.97];
-> 3: [0.96, 0.98];
-> 4: [0.99, 0.99];
画像 2:
-> 3: [0.98, 0.97];
-> 4: [0.98, 0.93];
画像 3:
-> 4: [0.97, 0.98]。
これらの値は最大 1 であり、メトリックに従って画像がまったく同じであることを示します。したがって、ご覧のとおり、値は 1 にかなり近くなっています。必要なのは、その近くのしきい値を選択True
し、メトリックによって与えられた結果がしきい値を超えている場合に戻り、False
そうでない場合に返すことだけです。
完璧な方法はありませんが、次のことを試すことができます。
- 画像サイズのパーセンテージとして定義されたサンプルサイズを定義する
- 採取するサンプルの数を定義します
- サンプル領域を2つの画像に分散します
- 各サンプルで、サンプル領域のすべてのピクセルの色の値を平均します
- 平均化されたサンプル領域の色の値の各ペアについて、それらが等しい誤差の小さなマージン内にあることを確認します
- 一致したサンプルの数のしきい値を定義して、適切なレベルで誤検知と誤検知のバランスを取ります。
- しきい値に達した場合は、画像が一致することを示す結果を返します。それ以外の場合は、一致しないことを示す結果を返します。
したがって、100X100と200X200のサイズの2つの画像から始めて、4つのサンプルを使用して各次元の10%で領域をサンプリングすることにしたとします。平均して比較します。
- x0-9、y0-9からx0-19、y0-19
- x90-99、y0-9からx180-199、y0-19
- x0-9、y90-99からx0-9、y180-199
- x90-99、y90-99からx180-199、y180-199