【C#】HALCON de 画像処理(Regionを画像変換)

スポンサーリンク

前回の記事で二値化をしました。使った関数はThreshold()ですが、出力されるデータがRegion(領域)というデータで画像ではありませんでした。
その為、今回はRegionを画像に変更したいと思います。

今回使用する関数

HOperatorSet.RegionToBin(HObject, out HObject, HTuple, HTuple, HTuple, HTuple)

使用する関数は、RegionToBin()という関数を使用します。
RegionをBinary(バイナリー)に変換するって意味ですかね?
引数は下記の通りです。

第1引数:入力データ(Regionデータ)
第2引数:出力画像
第3引数:閾値内のグレースケール(Regionを表示した時の白)
第4引数:閾値外のグレースケール(Regionを表示した時の黒)
第5引数:出力する画像サイズ(幅)
第6引数:出力する画像サイズ(高さ)

詳しい説明は下記リンクより
region_to_bin [HALCON Operator Reference / Version 13.0.4] (mvtec.com)

サンプルを作ってみる

前回の記事のままでボタンの処理だけを変更します。
その為、前回の記事を参考にしてください。
【C#】HALCON de 画像処理(二値化) | 育児パパの人生備忘録 (t19488sns.com)

操作画面

操作画面はそのままです。

定義

前回の記事を参考にして下さい。

処理

btnThresholdをクリックされたイベントの処理で、表示する部分を変更します。
今回は、画像に変換した後に表示するようにします。

private void btnThreshold_Click(object sender, EventArgs e)
{
    if (DispOrgImg == null) return;    //読み込んでいるかどうか

    int lo = (int)nudLowerLimit.Value;
    int hi = (int)nudUpperLimit.Value;
    HOperatorSet.Threshold(DispOrgImg, out HObject _region, lo, hi);

    //表示削除
    HTuple hwnd = hWindowControl2.HalconWindow;
    HOperatorSet.ClearWindow(hwnd);

    //前回の分をコメントアウト
    /*
    //ImagePartをhWindowControl1と同じにする
    HOperatorSet.SetPart(hwnd,
        hWindowControl1.ImagePart.Top,
        hWindowControl1.ImagePart.Left,
        hWindowControl1.ImagePart.Bottom,
        hWindowControl1.ImagePart.Right);
    HOperatorSet.DispObj(_region, hwnd);
    */

    //画像サイズ取得
    HOperatorSet.GetImageSize(DispOrgImg, out HTuple w, out HTuple h);

    //画像に変換する
    int foreGray = 255;
    int backGray = 0;
    HOperatorSet.RegionToBin(_region, out HObject binImg, foreGray, backGray, w, h);

    //画像を表示する。
    DispZoom(hwnd, binImg);
}

Regionを表示した時の白が白になるようにforeGrayを255にしました。
このforeGrayの値を変更すると、白の部分がグレーや黒にすることが可能です。
また、Regionの結果を逆にしたい場合は、foreGray=0,backGray=255にすれば、白黒が逆になります。

また、画像のサイズを指定しないといけなかったので、現在表示している画像データから関数GetImageSize()を使って画像サイズをしゅとくしました。

実行結果

実行結果としては、前回と変わりません。
下記パタンを試しました。

■foreGray=128,backGray=0

■foreGray=255,backGray=128

まとめ

regionデータを画像データに変換しました。regionデータは[1 or 0]なのか、表示した時は白黒でしたが、画像データに変換する時は、regionデータの[1のグレー値][0のグレー値]を指定して画像に変換で切るっぽいですね。
他にもこのregionデータを活用できるか調べてみたいと思います。

補足

前回の記事を参照してください。
【C#】HALCON de 画像処理(二値化) | 育児パパの人生備忘録 (t19488sns.com)

コメント

タイトルとURLをコピーしました