4

各ピクセルの輝度値 (グレースケール画像) を単純に黒または白に変換する画像二値化アルゴリズムを作成しています。現在、各ピクセルを 2 値化するためのアルゴリズムは、おおよそ次のとおりです。

if( grayscale[x] < thresholdValue)
{
bitonal[x] = 1;
}

(これは実際には ACTUAL アルゴリズムの簡略化です。これは、モノクロ イメージが実際にはビットパックされたイメージであるため (各配列インデックスは 8 ピクセルを保持するため)、現在の配列インデックス内の 1 を実際にビットパックする...しかし、それによって私の質問。

私がやろうとしているのは、if ステートメントの必要性を取り除くことです。

私が考えていたのは、これに沿って何かをすることでした。グレースケールでしきい値値を減算し、ビット操作のトリッキーを実行してビットをクリアまたはシフトします(grayscale[x]-threshold) is less than 0, I get a 0. otherwise I would get a 1。逆のほうが簡単な場合は、それ(if grayscale[x]-threshold < 0 + bitwise trickery get a 1, else get a 0)も機能します...分岐ステートメントを取り除くことができる限り...どんな助けも感謝します..

4

5 に答える 5

8

bitonal[x] = (grayscale[x] < thresholdValue);

于 2010-02-24T21:43:32.623 に答える
4

輝度が 8 ビット値の場合、0 または 1 を含む 256 要素の配列を持つことができます (配列の最初のしきい値要素には が含まれ1、残りの要素には0.

bitonal[x] = array[grayscale[x]];
于 2010-02-24T21:51:04.207 に答える
0

どの言語で作業していますか? 言語には最小/最大関数がありますか? (たとえば、C++ と Java は両方ともそうです)言語がそうする場合、それは if...eg Min(grayscale[x] < thresholdValue, 0) を排除する 1 つの方法になります。

于 2010-02-24T21:43:47.330 に答える
0

多分:

bitonal[x] = ((grayscale[x] - thresholdValue) >> 31) xor 1;

あなたの言語がブール値と整数値を同一視していないと仮定します (C と C++ のように)。

于 2010-02-24T21:46:50.697 に答える