0

AForgeフレームワークを使用して、ある画像の内部の別の画像の座標を見つけようとしています。

ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching();
TemplateMatch[] matchings = tm.ProcessImage(new Bitmap("image.png"), new Bitmap(@"template.png"));
int x_coordinate = matchings[0].Rectangle.X; 

ProcessImagesの実行には約2分かかります。

画像のサイズは約1600x1000ピクセルですテンプレートのサイズは約60x60ピクセルです

誰かがそのプロセスをスピードアップする方法を知っていますか?

4

2 に答える 2

1

他の回答に加えて、あなたの場合は次のようになります。

画像のサイズは約 1600x1000 ピクセルです テンプレートのサイズは約 60x60 ピクセルです

このフレームワークは最適ではありません。あなたが達成しようとしているのは、解像度の異なる2つの画像を比較するよりも、他の画像内の画像を検索することです(「この画像をGoogleで検索」などを使用できます)。

これについてはそう

ピラミッド検索と呼ばれます。

アルゴリズムがより大きな画像に対してより高速に動作することは事実です。実際、画像ピラミッドはテンプレート マッチングに基づいています。最も一般的な実装 (私が見つけて使用したもの) を使用すると、次のようになります。

private static bool IsSearchedImageFound(this Bitmap template, Bitmap image)
    {
        const Int32 divisor = 4;
        const Int32 epsilon = 10;

        ExhaustiveTemplateMatching etm = new ExhaustiveTemplateMatching(0.90f);

        TemplateMatch[] tm = etm.ProcessImage(
            new ResizeNearestNeighbor(template.Width / divisor, template.Height / divisor).Apply(template),
            new ResizeNearestNeighbor(image.Width / divisor, image.Height / divisor).Apply(image)
            );

        if (tm.Length == 1)
        {
            Rectangle tempRect = tm[0].Rectangle;

            if (Math.Abs(image.Width / divisor - tempRect.Width) < epsilon
                &&
                Math.Abs(image.Height / divisor - tempRect.Height) < epsilon)
            {
                return true;
            }
        }

        return false;
    }

これに近い画像が表示されるはずです。

ページ ピラミッド

結論として - 別のアプローチを使用してみてください。Sikuli.Netの統合に近いかもしれません。または、 accord .Netの新しいバージョンの AForgeを試すこともできます。

これが面倒な場合は、必要なページ要素をトリミングしてスクリーンショット機能を拡張することもできます (Selenium の)。

于 2015-04-16T07:47:24.407 に答える
0

テンプレートサイズを使用しているイメージを使用する最近のCPUには、2分が長すぎるようです。ただし、プロセスを高速化する方法はいくつかあります。1つ目は、より小さなスケールを使用することです。これはピラミッド検索と呼ばれます。画像とテンプレートを4で割って、400x250の画像と15x15のテンプレートを作成し、この小さいテンプレートと一致させることができます。これははるかに高速に実行されますが、精度も低下します。次に、15x15テンプレートで見つかった興味深いピクセルを使用し、画像全体を検索する代わりに、60x60テンプレートを使用して1600x1000画像の対応するピクセルを検索できます。

テンプレートの詳細によっては、代わりにさらに低いスケール(1/8)で試すことができます。

知っておくべきもう1つのことは、テンプレートが大きいほど実行が速くなることです。これは直感に反しますが、テンプレートが大きいほど、比較するピクセルが少なくなります。したがって、可能であれば、より大きなテンプレートを使用してみてください。テンプレートがすでに可能な限り大きい場合、この最適化が不可能な場合があります。

于 2013-03-02T08:13:25.063 に答える