二値化

二値化【Binarization】では画像の輝度値が指定した値(しきい値【Threshold】)以上の場合は、値未満の場合はにする処理を行います。

二値化処理前 二値化処理後

 

二値化処理では上図のように、しきい値付近に輝度値の変動がある場合、二値化処理を行うと点々とした画素が残ってしまうため、この場合は二値化処理を行う前に平滑化フィルタメディアンフィルタなどのノイズ除去を行ってから二値化処理を行う場合が多くあります。 また、二値化処理を行うと画像の輝度値は白と黒しかないため、の輝度値をの輝度値をとし、1画素を1ビットであらわす事ができ、画像データサイズを小さくすることができるのですが、1画素を1ビットであらわすと各画素の輝度値の参照がかえって面倒になってしまうので、画像処理のプログラムではの輝度値を255の輝度値をとして、1画素8ビット(1バイト)で扱う場合の方が一般的です。 (フォトレタッチ系のソフトでは1画素1ビットで扱う場合の方が多いと思います。)

 

【二値化処理の応用例】

  • 欠陥検出
  • 領域分割、抽出
  • 処理領域のマスク(領域指定)

など  

 

【二値化プログラム例】
●効率の悪いプログラム例

for (j = 0; j < Height ; j++){
    for ( i = 0; i < Width; i++){ 
        //入力画像の輝度値の取得
        Bright = pSrc[i + j * Width]; 
        //二値化処理 
        if (Bright >= Threshold)
            pDst[i + j * Width] = 255;
        else
            pDst[i + j * Width] =0;
    }
}

このプログラムでは画像の全画素をif文で処理しているので、非常に非効率です。 この部分はルックアップテーブルを用いて最適化します。 また、この例では二重ループを用いて画像の輝度値を二次元的に参照していますが、二値化処理では近傍画素を用いて処理を行わないので、画像データをただの一次元的な配列として捉えても構いません。 ということで、最適化したのが以下の例です。

●効率の良いプログラム例

unsigned char LUT[256] = {0};
//二値化ルックアップテーブルの作成
for ( i = Threshold; i < 256; i++)
    LUT[i] = 255;
//二値化処理
for ( i = 0; i < Width * Height; i++)
    pDst[i] =  LUT[ pSrc[i] ];

 

画像処理アルゴリズムへ戻る

 

二値化」への3件のフィードバック

  1. ピンバック: ガンマ補正(ルックアップテーブルの例) | イメージングソリューション

  2. ピンバック: 画像処理フィルタ一覧、比較 | イメージングソリューション

  3. ピンバック: Pタイル法 | イメージングソリューション

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください