2012-02-25 14 views
2

特定のパターン/オブジェクトの場所を特定してイメージを処理できるPHPを書くことができるかどうかを調べるため少し調べています。オブジェクトのピクセル位置。php - グラフィック内のパターンの位置を特定する

このプロジェクトは、すべてのマップが同じプロセスを使用して生成され、座席のアイコンが(同じサイズ - 16x17ピクセルを含む)同じままであるaのマップを処理するために使用されます。

典型的なマップがhttp://s140173.gridserver.com/so/map.gif

のようになります...と私は "最初のを見つけるために、ループにいくつかの種類の「検索」スクリプトを計画していた

http://s140173.gridserver.com/so/icon.gifようなので、当然、個々のアイコンが見えますアイコンをクリックして、アイコンのxy位置を配列に追加し、アイコンを(画像関数を使用してメモリ内で)黒く塗りつぶす/歪ませ、検索を繰り返して「最初のアイコン」を再度探します(オリジナルはもはやそれはひずんでいる) - しかし、この方法でグラフィックスをマッチさせる能力を持つクラス/関数/拡張が不明です。

このパターンマッチングの仕組みについての考えはありますか?これを行うことができるライブラリやエクステンションがありますか?そうでない場合、誰かが適切かもしれない別のプラットフォームを提案できますか?

乾杯。

+0

私はすべてのことを読んでいませんでしたが、このページ、またはそれを好きな人は参考になるかもしれません:http://www.searchlores.org/finn_cbir_2.htm – TecBrat

+2

phpには、 [imagecolorclosest](http://nl3.php.net/manual/en/function.imagecolorclosest.php)、[imagecolorat](http://nl3.php.net/manual/en/function.imagecolorat.php)、および他の多く。私はあなたが望むものが不可能だとは思わない! – giorgio

+0

XORが役立つかもしれませんが、imagickはそれを行うことができます:http://www.php.net/manual/en/imagickdraw.composite.php - しかし、PHPはすべての可能な組み合わせを処理する最速の言語ではありません。 – hakre

答えて

1

GDを使用すると、これは非常に遅くて非効率ですが、アイコンが同じサイズになると仮定すると、イメージを簡単にループし、一致するものが見つかるまでそのサイズの可能なすべての矩形を比較し続けます。これは2つのforループで、imagecoloratで色を取得し、これらの四角形をターゲットと比較することで、簡単に実装することができます。しかし、私はこれをお勧めしません。それぞれの小さなターゲットを見つけるのに数秒かかるでしょう。

画像でこのタイプのインテリジェントな分析を行うことができるOpenCVを見てみることもできますが、使用するのは非常に複雑です。これはより良い方法ですが、PHPではありませんし、あなたの目的のために余計になるかもしれません。

+0

ありがとう、Alasdair。 OpenCVは私たちが必要とするものを少し上回っていますが、間違いなく興味深いツールです。私は、imagecoloratを使用し、0,0の位置にオフホワイトの1x1ピクセルで各アイコンをタグ付けするだけのソリューションを考え出しました。スクリプトはマップをループして各ピクセルをチェックし、正しいカラーインデックスと一致する場合はx、yの値を配列に追加します。画像を認識しようとする方がはるかに簡単です。ご協力いただきありがとうございます! –

+0

あなたは、生成された画像を制御しているとしたら、良い解決策のように思えます...まず最初に座標を記録するのはなぜですか? – Alasdair

+0

地図は当社のマーケティングチームによって生成されます。通常はPhotoshopを使用しています。だから、私たちは世代をほとんど制御できませんが、以前はテンプレートアイコンを使用していましたので、この1x1マーカーピクセルを含むテンプレートアイコンを更新しました。 –

関連する問題