0

PHPで2つの画像を比較したい。それらが 95% 以上類似している場合、結果には「はい」というテキストが表示されます。それらが類似していない場合、結果は No になるはずです。

if ( ) 
{
echo "Yes";
}
else
{
echo "No";
}

いずれにせよ、これはこれまでのところ私が見つけたものです。http://pastebin.com/wgeu2DqE 見つけた場所を教えたいのですが、登録が必要です。

今、私は画像をロードするこの機能を持っています

function LoadPNG($imgname)
{
    /* Attempt to open */
    $im = @imagecreatefrompng($imgname);

    /* See if it failed */
    if(!$im)
    {
        /* Create a blank image */
        $im  = imagecreatetruecolor(150, 30);
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);

        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);

        /* Output an error message */
        imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
    }

    return $im;
}

メモ帳 ++ と phpdesigner を試してみましたが、エラーが発生しました。私はphp開発者ではないので、皆さんに助けを求めています。2 つの画像を比較して、Yes または No にするだけです。これは非常に簡単です。私もこれを見ましたが、意味がわかりませんでした。

PHPで2つの画像を比較する

ありがとう。

4

1 に答える 1

1

必要な比較の種類とユースケースに応じて、いくつかの方法で比較を行うことができます。「類似」は非常にあいまいな用語です。

画像比較ライブラリがあるか、ImageMagick 関数を使用できます。PHP で使用するOpenCVのバインディングもあります。

もちろん、アプローチが複雑になればなるほど、より柔軟でより良い結果が得られます。

等しいはずの 2 つの画像 (たとえば、2 つの監視カメラ フレーム) を比較する場合は、以下の DIY 方法を使用できます。

色相と明度に歪み (ノイズなど) がある場合、DIY メソッドは機能しませんが、ImageMagick は良い結果をもたらします。

最後に、同じオブジェクトの 2 つのビューをマッピングしようとしている場合 (たとえば、足を左にパンしたカメラから)、または別の「内側」の画像を探している場合など、OpenCV が唯一の実行可能な代替手段です。 3つ。

最も単純なケースでは、自分で行う方法として、最初に 2 つの画像の縦横比を確認し、次に両方を同じサイズに縮小します (さらに縮小することもできます (たとえば、1:4 のスケール))。小さな違いをなくしたり、今後の作業を減らしたりします)。

その時点で、 を使用して 2 つの画像をピクセルごとに比較できますgetColorAt(オプションでグレースケールに変換して色相の違いを無視することもできます)。2 つのピクセル間の距離は、いくつかの方法で計算することもできます (たとえば、CIE 知覚関数を使用)。または、ユークリッド距離 - SQRT((r1-r2)* 2 + (g1-g2) *2 + (b1-b2 ) を使用することもできます。 )**2)。

距離の範囲は 0 ~ W*H*255*SQRT(3) です。これらの値を 0 ~ 100% の範囲に直線的にマッピングできます。

これにより、画像と、線が描かれた同じ画像との違いが簡単にわかります。画像をゆがめたり (「ピンチ」フィルターなどを使用)、少し回転させたりすると、結果として得られる画像は 95%、99% も同じように見えますが、このアルゴリズムは非常に低い一致を報告する可能性があります (写真品質の写真の場合)。 、連続トーンの場合、一致は依然として良好ですが、漫画の場合は非常に劣ります)。

于 2012-11-21T00:37:37.437 に答える