2011-07-14 11 views
-1

数日前から、私はPHPを使って画像を比較するという作業に取り組んできました。私はPHPがこの種のタスクを実行する言語ではないと考え始めています。PHP .png Lineartの比較

目的:

、ベースを使用して新しい線画を比較し、それらの間の割合の差を返します。 私はこれについていくつかのやり方を試みました:画素数の違いを比較する(ラインアートの違いの目標を実際には解決しない)、オーバーラップするすべてのピクセルを白くし、透明でないピクセルを見つける/カラーホワイトと分割非透明ピクセルベースで(正確な数を取得していないよう)

ここ例です:

Baseenter image description here

- - - - - - - ベース - - - - - - - - - - ラインアート - - - - - - -

パーセント差は約54%になるはずです。しかし、私が試みた方法のどれもこれに近い(~5%)を得ることはありません。

私の質問は次のとおりです:これはPHPで行うことができますか? ありがとう!

画像©Aywas.com

+0

まさかあなたは、ボックスの外にPHPでそれを行います。 –

+2

@brady:PHPは[gd](http://php.net/manual/book.image.php)と[ImageMagick](http://php.net/manual/book.imagick.php)をサポートしています...それは可能です。 –

+0

@ジャスティン、私は彼が達成しようとしている誤差の余裕はないと思います。私は多くのプロジェクトでGDを使用しています。誰かが私にそれをする方法を驚かせるのを見たいと思います。 –

答えて

0

あなたは黒のみのチャンネルを使用して、ImageMagickの機能compareimagechannels()を使用してみてください?

編集:これは基本的な試行とその出力です。出力番号を操作して、しきい値を把握できるかもしれません。画像1と2はラインアートであり、画像3は200x200にサイズ変更されたGoogleヘッダーのロゴです。

$img1 = new Imagick('image1.png'); 
$img2 = new Imagick('image2.png'); 
$img3 = new Imagick('image3.png'); 

$diff12 = $img1->compareImageChannels($img2, 
      Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR); 
$diff13 = $img1->compareImageChannels($img3, 
      Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR); 

print_r($diff12); 
print_r($diff13); 

出力:

Array 
(
    [0] => Imagick Object 
     (
     ) 

    [1] => 1512.25385625 
) 
Array 
(
    [0] => Imagick Object 
     (
     ) 

    [1] => 24353.6380375 
)