【HALCON】形態学処理完全ガイド - 膨張・収縮・オープニング・クロージング

PUBLISHED 2024-09-02

HALCONの形態学処理(Morphology)は、画像内の領域の形状を変化させる基本的な画像処理手法です。ノイズ除去、形状解析、特徴抽出など幅広い用途に使用されます。


基本演算

膨張(Dilation)

領域を拡大する処理です。構造要素の形状に従って境界が外側に広がります。

dilation_circle - 円形構造要素による膨張

dilation_circle(Region : RegionDilation : Radius : )
read_image(Image, 'example.png')
threshold(Image, Region, 128, 255)
dilation_circle(Region, DilatedRegion, 3.5)

dilation_rectangle1 - 矩形構造要素による膨張

dilation_rectangle1(Region : RegionDilation : Width, Height : )

dilation1 / dilation2 - 任意構造要素による膨張

* dilation1: 膨張(Minkowski加算)
dilation1(Region, StructElement : RegionDilation : Iterations : )
* dilation2: 参照点付き膨張
dilation2(Region, StructElement : RegionDilation : Row, Column, Iterations : )

収縮(Erosion)

領域を縮小する処理です。構造要素の形状に従って境界が内側に収縮します。

erosion_circle - 円形構造要素による収縮

erosion_circle(Region : RegionErosion : Radius : )
threshold(Image, Region, 128, 255)
erosion_circle(Region, ErodedRegion, 3.5)

erosion_rectangle1 - 矩形構造要素による収縮

erosion_rectangle1(Region : RegionErosion : Width, Height : )

erosion1 / erosion2 - 任意構造要素による収縮

* erosion1: 収縮(Minkowski減算)
erosion1(Region, StructElement : RegionErosion : Iterations : )
* erosion2: 参照点付き収縮
erosion2(Region, StructElement : RegionErosion : Row, Column, Iterations : )

複合演算

オープニング(Opening)

収縮→膨張の順で実行。小さな突起やノイズを除去します。

opening(Region, StructElement : RegionOpening : )
opening_circle(Region : RegionOpening : Radius : )
opening_rectangle1(Region : RegionOpening : Width, Height : )
* 小さなノイズを除去
opening_circle(Region, OpenedRegion, 2.5)

クロージング(Closing)

膨張→収縮の順で実行。小さな穴や隙間を埋めます。

closing(Region, StructElement : RegionClosing : )
closing_circle(Region : RegionClosing : Radius : )
closing_rectangle1(Region : RegionClosing : Width, Height : )
* 小さな穴を埋める
closing_circle(Region, ClosedRegion, 2.5)

スケルトン化(細線化)

領域の骨格(中心線)を抽出します。

skeleton - スケルトン抽出

skeleton(Region : Skeleton : )
threshold(Image, Region, 128, 255)
skeleton(Region, Skeleton)

morph_skeleton - 形態学的スケルトン

morph_skeleton(Region : Skeleton : )

junctions_skeleton - スケルトンの接合点検出

junctions_skeleton(Skeleton : EndPoints, JuncPoints : )
skeleton(Region, Skeleton)
junctions_skeleton(Skeleton, EndPoints, JuncPoints)
* EndPoints: 端点
* JuncPoints: 分岐点

グレースケール形態学

輝度値を持つ画像に直接適用する形態学処理です。

gray_dilation - グレースケール膨張

局所的な最大値を取得し、明るい領域を拡大します。

gray_dilation(Image, SE : ImageDilation : MaskHeight, MaskWidth : )
gray_dilation_rect(Image : ImageMax : MaskHeight, MaskWidth : )

gray_erosion - グレースケール収縮

局所的な最小値を取得し、暗い領域を拡大します。

gray_erosion(Image, SE : ImageErosion : MaskHeight, MaskWidth : )
gray_erosion_rect(Image : ImageMin : MaskHeight, MaskWidth : )

gray_opening - グレースケールオープニング

gray_opening(Image, SE : ImageOpening : )
gray_opening_rect(Image : ImageOpening : MaskHeight, MaskWidth : )

gray_closing - グレースケールクロージング

gray_closing(Image, SE : ImageClosing : )
gray_closing_rect(Image : ImageClosing : MaskHeight, MaskWidth : )

gray_skeleton - グレースケールスケルトン

gray_skeleton(Image : GraySkeleton : )

構造要素の生成

gen_circle - 円形構造要素

gen_circle(: Circle : Row, Column, Radius : )

gen_rectangle1 - 矩形構造要素

gen_rectangle1(: Rectangle : Row1, Column1, Row2, Column2 : )

gen_ellipse - 楕円形構造要素

gen_ellipse(: Ellipse : Row, Column, Phi, Radius1, Radius2 : )

用途別使い分け

ノイズ除去

* 小さな白いノイズを除去(オープニング)
opening_circle(Region, Cleaned, 1.5)
* 小さな黒い穴を埋める(クロージング)
closing_circle(Cleaned, Final, 1.5)

物体の分離

* 接触している物体を分離(収縮)
erosion_circle(Region, Separated, 3.0)

輪郭の平滑化

* オープニング→クロージングで滑らかに
opening_circle(Region, Temp, 2.0)
closing_circle(Temp, Smoothed, 2.0)

中心線抽出

* スケルトン化で中心線を取得
skeleton(Region, CenterLine)

処理の比較

処理効果主な用途
膨張領域拡大穴埋め、接続
収縮領域縮小ノイズ除去、分離
オープニング収縮→膨張小さな突起除去
クロージング膨張→収縮小さな穴埋め
スケルトン細線化中心線抽出

まとめ

HALCONの形態学処理は、画像の前処理から特徴抽出まで幅広く活用できます。構造要素の形状とサイズを適切に選択することで、効果的な画像処理が可能です。

CATEGORY
TAGS
円