二値化

シェアする

  • このエントリーをはてなブックマークに追加
最近の記事
  • 10/21 【C#】寸法線の描画
  • 10/21 【C#】GraphicsPathの領域取得
  • 10/20 【C#】GraphicsPathの描画
  • 10/18 【C#】GraphicsPath
  • 10/17 【C#】Bitmap画像データの拡大縮小
  • 10/15 【C#】画像の座標系
  • 10/14 【C#】画像の上下左右反転、90,180,270度回転
  • 10/3 【C#】SplitContainerのPanel固定方法
  • 9/7 【Neural Network Console】学習データの出力方法
  • 9/3 Deep Learning向け学習画像撮り込みソフト公開
  • 9/1 【Neural Network Console】新規画像のDataset作成方法
  • 8/28 【Neural Network Console】GUI表示スケールの変更
  • 8/22 【Neural Network Console】CPU/GPU処理の設定切替
  • 8/21 【Neural Network Console】Learning Rate(学習率)の設定
  • 8/20 ソニーの無償AIソフト Neural Network Consoleの入手ダウンロード、インストール
  • 8/20 Deep Learning
  • 8/20
  • 8/19 古いバージョンのVisual Studio Community/Expressの入手ダウンロード
  • 8/19 CUDAの入手、ダウンロード、インストール方法
  • 8/17 【C#.NET】マイクロソフト仕様のアフィン変換
  • 8/5 【C#】ファイルを開くダイアログボックスの表示
  • 8/2 キャノンプリンターのCDトレイはどこ?!
  • 7/6 【参考書籍】画像処理・機械学習プログラミング OpenCV 3対応
  • 6/20 【Python,matplotlib】動くグラフをAnimationGifに保存する方法
  • 6/17 シグモイド関数の微分
  • 6/15 シグモイド関数
  • 6/13 合成関数の微分
  • 6/12 WordPressで数式エディタ風に数式を入力したい
  • 6/11 PythonをVisual Studioでインストールする方法
  • 6/9 【Python】OpenCVをAnacondaでインストール(Windows編)
  • 6/6 【Python】Anacondaで複数バージョンの環境切り替え
  • 6/6 画像センシング展2017に出展します。
  • 6/1 【Office365】Web版Outlookのフォントサイズ変更
  • 6/1 【Anaconda】モジュールのアップデートでエラー発生
  • 6/1 【Anaconda】コマンドリストの表示
  • 5/29 Windows10パソコン購入
  • 5/24 Anacondaのアンインストール
  • 5/24 【Jupyter Notebook】新規プログラムの作成
  • 5/23 【Python】開発環境の構築
  • 5/23 Pythonはじめました
  • 4/6 【Office365】Web版Outlookのスレッド表示を解除する方法
  • 4/5 【Excel】フーリエ解析(FFT)
  • 3/20 Canny edge detection
  • 3/20 【Excel2016】分析ツールの表示
  • 3/5 【Visual Studio】黒い背景色を白に変更する方法
  • 2/8 【Windows10】拡張モニタに表示されたウィンドウを元に戻す
  • 2/7 複素数の計算
  • 1/18 【Excel】棒グラフの横軸の目盛を0始まりにする
  • 1/16 【Excel】フーリエ変換
  • 1/6 【OpenCV】疑似カラー(カラーマップ)

  • 二値化【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] ];
    

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

    コメント

    1. […] 他にも二値化処理や、輝度値を0~255の範囲内に収めるための if 文の代わりなどにも応用できる場合があるので、処理を高速にしたい場合は、このルックアップテーブルが使えるか […]

    2. […] 二値化、Pタイル法、判別分析法(大津の二値化) […]

    3. […] Pタイル法【Percentile Method】は、画像の二値化したい領域が全画像の領域に占める割合をパーセント(%)で指定し二値化する手法です。 […]