私は 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にあります、こちら