4

私は C# でエッジ検出プログラムに取り組んでおり、より高速に実行するために、最近、ロック ビットを使用するようにしました。ただし、lockBits はまだ実行したいほど高速ではありません。問題は私の一般的なアルゴリズムかもしれませんが、画像処理に使用できる lockBits よりも優れたものがあるかどうかも疑問に思っています。

問題がアルゴリズムである場合、ここに基本的な説明があります。色の配列 (ピクセルを表すロックビットを使用して作成) を調べ、各色について、そのピクセルの周囲の 8 つのピクセルの色を確認します。これらのピクセルが現在のピクセルと十分に一致しない場合は、現在のピクセルをエッジと見なします。

ピクセルがエッジかどうかを定義する基本的なコードを次に示します。9 つの色の Color[] を受け取ります。最初の色はチェックするピクセルです。

public Boolean isEdgeOptimized(Color[] colors)
{
    //colors[0] should be the checking pixel
    Boolean returnBool = true;
    float percentage = percentageInt; //the percentage used is set
    //equal to the global variable percentageInt

    if (isMatching(colors[0], colors[1], percentage) &&
            isMatching(colors[0], colors[2], percentage) &&
            isMatching(colors[0], colors[3], percentage) &&
            isMatching(colors[0], colors[4], percentage) &&
            isMatching(colors[0], colors[5], percentage) &&
            isMatching(colors[0], colors[6], percentage) &&
            isMatching(colors[0], colors[7], percentage) &&
            isMatching(colors[0], colors[8], percentage))
    {
        returnBool = false;
    }
    return returnBool;
}

このコードはすべてのピクセルに適用され、その色はロックビットを使用して取得されます。

基本的に、問題は、どうすればプログラムをより速く実行できるかということです。それは私のアルゴリズムですか、それともlockBitsよりも高速に使用できるものはありますか?

ちなみに、プロジェクトはgitHubにあります、こちら

4

4 に答える 4

0

タスクの並列実行を使用する場合は、System.Threading.Tasks 名前空間の Parallel クラスを使用できます。次のリンクには、いくつかのサンプルと説明があります。

于 2014-09-03T11:46:53.227 に答える