【HALCON】threshold 関数について - 画像をグローバル閾値でセグメンテーションする方法

【HALCON】threshold 関数について - 画像をグローバル閾値でセグメンテーションする方法

2024-08-20

2024-08-20

HALCONの画像処理において、threshold 関数はグローバルな閾値を使って画像のセグメンテーション(領域分割)を行う基本的なツールです。この関数は、指定した灰色値の範囲に基づいて画像を二値化し、その範囲に属するピクセルを含む領域を抽出します。

この記事では、threshold 関数の基本的な使用方法や、実際の例を通してその効果について詳しく解説します。

threshold 関数とは?

threshold 関数は、画像のピクセル値が指定された灰色値範囲内にあるかどうかを確認し、その範囲に属するピクセルを持つ領域を抽出します。この操作により、画像はセグメント化され、特定の特徴や領域が強調されます。

関数のシグネチャ

threshold(Image : Region : MinGray, MaxGray : )
  • Image
    入力オブジェクト。セグメンテーションを行う対象の画像です。
  • Region
    出力オブジェクト。閾値条件を満たすピクセルから成る領域です。
  • MinGray
    閾値の下限値を指定します。指定された下限値以上のピクセルが抽出されます。
  • MaxGray
    閾値の上限値を指定します。指定された上限値以下のピクセルが抽出されます。

threshold 関数の使用例

次に、実際の画像にthreshold 関数を適用する例を見てみましょう。

* 画像の読み込み
read_image(Image, 'fabrik')

* Sobelフィルタでエッジ検出
sobel_dir(Image, EdgeAmp, EdgeDir, 'sum_abs', 3)

* 閾値を使ってエッジを抽出
threshold(EdgeAmp, Seg, 50, 255)

* セグメント化した領域を表示
dev_display(Seg)

この例では、sobel_dir 関数を使って画像のエッジを検出し、そのエッジ画像に対して threshold 関数を適用して、ピクセル値が50から255の間にあるエッジ領域を抽出しています。

複数の灰色値範囲を使ったセグメンテーション

threshold 関数では、複数の灰色値範囲を指定することも可能です。これにより、異なる範囲のピクセル値を持つ複数の領域を同時に抽出することができます。

例えば、次のコードでは、0~64、128~192の灰色値範囲を持つ領域を抽出します。

threshold(Image, Seg1, 0, 64)
threshold(Image, Seg2, 128, 192)

このようにして、異なる特性を持つ領域を複数抽出することができます。

threshold関数の用途

threshold 関数は、画像の二値化や、特定のピクセル値を持つ領域を抽出するために使われます。以下のような場面でよく使用されます:

  • エッジ検出後の領域抽出
    Sobelフィルタなどでエッジを検出した後、そのエッジ領域を抽出するために使用されます。

  • 画像の二値化
    画像を二値化(白黒画像に変換)して、特定の特徴を強調したり、領域を分離します。

  • セグメンテーション
    グローバルな閾値に基づいて画像をセグメンテーションし、特定の灰色値範囲を持つオブジェクトや特徴を抽出します。

まとめ

HALCONthreshold 関数は、画像処理におけるセグメンテーションや二値化に欠かせないツールです。グローバルな閾値を使って、画像内の特定のピクセル値を持つ領域を簡単に抽出することができます。実際のプロジェクトで使用する際は、閾値の範囲を調整し、適切な領域を抽出することが重要です。

Recommend