画像の二値化


ここに書いた方法でグレースケール変換した画像を 二値化する. 二値化とは,ある閾値より小さい階調の画素を0(黒),大きい画素を1(白)にする処理である. 二値化は文字や図形の認識の前処理として行われることが多く,基礎的ではあるが 非常に重要な処理の一つである.

二値化にはいくつか手法があるようだが,まず一番簡単な固定二値化のコードを示す. 固定二値化は画像全体にただ一つの閾値を設定するものである. 閾値の選定によって処理後の画像が大きく変化する.

procedure TMainForm.KoteiBtnClick(Sender: TObject);
var
  X, Y: Integer;
  Bmp: TBitmap;
  P: PByte;
begin
   Bmp := TBitmap.Create;
   try
     Bmp.Assign( GrayImage.Picture.Bitmap );
     Bmp.PixelFormat := pf8bit;
     Bmp.Palette := CreateGrayScalePalette( 255 );
     for Y := 0 to Bmp.Height - 1 do
     begin
        P := Bmp.ScanLine[ Y ];
        for X := 0 to Bmp.Width - 1 do
        begin
           if P^ > 128 then
              P^ := 255
           else
              P^ := 0;
           Inc( P );
        end;
     end;
     GrayImage.Picture.Bitmap := Bmp;
   finally
     Bmp.Free;
   end;
end;

GrayImageにはグレースケール変換された画像が入っている. まず適当なTBitmapオブジェクトを作成し,そのPixelFormatをpf8bitに設定する. 次に,ここに書いたCreateGrayScalePalette関数を使って 256階調のパレットを作成し,TBitmapオブジェクトに割り当てる. 以降は,各ピクセルを調べて,階調値が128よりも大きければ255に, 小さければ0に順次変更する.

原画像と固定二値化画像の比較を以下に示す.
原画像
固定二値化画像


お問い合わせはメールにて: akasaka@klc.ac.jp

戻る
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送