こんにちは、ゆたんぽです。
本日は引き続きHALCONの記事を書いていきます。
今回は、よく利用する2値化処理について書いていきます。
二値化とは
画像の二値化とは、画像を2つの値(白と黒)のいずれかに変換する処理です。
具体的には、ある閾値を設定し、その閾値を基準に画像中の各画素の輝度値を比較し、閾値以上であれば白、閾値以下であれば黒とすることで画像を2値化します。
HALCONでの画像の二値化方法
HALCONでは、Threshold関数を使用して画像を二値化することができます。
Threshold関数は、指定された閾値以下の画素値を0(黒)に、閾値以上の画素値を255(白)に変換する関数です。
以下は、HALCONを使用して画像を二値化するサンプルコードです。
// 画像を読み込む
HObject image;
HOperatorSet.ReadImage(out image, "input.jpg");
// 画像をグレースケールに変換する
HObject imageGray;
HOperatorSet.Rgb1ToGray(image, out imageGray);
// 画像を二値化する
HObject imageBin;
HOperatorSet.Threshold(imageGray, out imageBin, 128, 255);
// 画像を表示する
HOperatorSet.DispObj(imageBin);
// メモリを解放する
HOperatorSet.ClearObj(image);
HOperatorSet.ClearObj(imageGray);
HOperatorSet.ClearObj(imageBin);
まず、ReadImage関数を使用して、”input.jpg”というファイル名の画像を読み込んでいます。
次に、Rgb1ToGray関数を使用して画像をグレースケールに変換しています。
その後、Threshold関数を使用して画像を二値化しています。
Threshold関数は、グレイ値 g が以下に示す条件を満足するピクセルを入力画像から選択します。
下限値 ≦ g ≦ 上限値
Threshold関数の第3引数には、閾値の下限値を指定し、第4引数には閾値の上限値を指定します。
この場合、輝度値128を閾値としています。
最後に、DispObj関数を使用して二値化された画像を表示し、使用したオブジェクトをクリアしています。
このようにすることで入力した画像から2値化した画像を出力することができます。
まとめ
画像の二値化は、画像処理において基本的な処理の1つであり、HALCONを使って簡単に実装することができます。
Threshold関数を使用することで、指定した閾値を基準に画像を2値化することができます。また、グレースケールに変換することで、RGBカラー画像でも二値化を行うことができます。
二値化は、画像の前処理としてよく使用され、画像中の対象物を抽出するために必要な処理です。
しかし、閾値を適切に設定しないと、画像中の重要な情報を失うことになるため、適切な閾値の決定が重要です。
また、画像の明るさやコントラストが異なる場合には、閾値を自動的に決定する方法もあります。
これらの手法については、別の機会に詳しく説明していきます。