Mask

Mask 関数を使用して不規則な形状の 2 値化画像マスクを作成します。このマスクを使用して画像内の特定の領域をハイライトし (値 255 が割り当てられた「対象ピクセル」)、ほかの領域を検査対象から除外します (値 0 が割り当てられた「対象外ピクセル」)。この関数は SurfaceFlaw 関数の入力として使用することも、Flaw Detection 関数の FlexFlawModel 関数で Flex を適用することもできます。

概要

画像マスクを使用して特定の特徴を検査対象から除去し、そのほかの領域をハイライトします。マスクは 2 ステップからなる内部処理で作成されます。最初のステップではエッジ検出とセグメンテーションを実行します。この間に入力画像は [平滑化係数] パラメータ設定に基づいて平滑化されます。平滑化された画像を使用すると、エッジ強調画像が内部で作成されます。

:  カラー画像のエッジ強調画像は 3 色すべてのチャネル (赤、緑、青) を基に計算されます。

次に、ブロブ解析を使用して、画像をエッジ変化に基づきセグメンテーションします。これはエッジ強調画像で実行されます。このとき、暗いブロブはセグメントに抽出され、インデックスおよびラベルが付けられます。[マスク生成] パラメータの [穴塗りつぶし最大サイズ][カーネルサイズ中央値] および [収縮マスク数] は、画像マスクの穴の塗りつぶし、境界の平滑化、狭いストリップの削除にそれぞれ使用することができます。[カーネルサイズ中央値] パラメータはエッジの平滑化およびストリップの削除に使用すると特に有効です。

この処理の 2 つ目のステップでは、画像マスクの生成に使用されるエッジまたはセグメントを選択します。デフォルトではエッジを使用して ([マスク方法] パラメータはデフォルトで [エッジマスク] に設定されます)、エッジ強調に基づいた画像マスクが生成されます。この画像マスクでは、エッジピクセルのみがマスクされ、そのほかのピクセルはすべて表示されます。このタイプのマスクは、ラベル、テキストまたはロゴを除外する場合に使用すると有用です。

また、[マスク方法] パラメータを [最大セグメント] または [選択したセグメント] のいずれかに設定してセグメントを使用することもできます。背景に 0、次に大きいセグメントに 1 のインデックスが付き、残りのセグメントはそれぞれのサイズに基づいてソートされます (画像内で色分けされ、インデックスが付けられます)。このタイプのマスクは、背景や画像内の大きな領域を遮断する場合に使用すると有用です。

関数を設定する場合は、[表示画像] パラメータを使用してセグメントを表示することができます。セグメントには数値のインデックスが付き、色分けされて表示されます (黒ピクセルはセグメントの一部ではなく、白ピクセルは最大セグメントの一部です)。

マスクが適切に設定されると、登録され、このマスクがモデルとして内部で保持されます。関数のプロパティシートが開いている間にいずれかのパラメータが変更されると、マスクは新しいパラメータ設定に再登録されます。

:  

Maskの入力パラメータ

Syntax:(画像,フィクスチャ.行,フィクスチャ.列,フィクスチャ.角度,領域.X,領域.Y,領域.高さ,領域.幅,領域.角度,領域.カーブ,スケール,外部領域,傷モデル参照,セグメント化.平滑化係数,セグメント化.最小エッジコントラスト,セグメント化.最小セグメント面積,マスク生成.マスク方法,マスク生成.セグメント,マスク生成.穴塗りつぶし最大サイズ,マスク生成.カーネルサイズ中央値,マスク生成.収縮マスク数,マスク生成.反転,マスク生成.マスクを登録,タイムアウト,表示画像,表示)

画像

このパラメータは有効な画像データ構造体を含んでいるスプレッドシートのセルを参照している必要があります。デフォルトで参照されるセルは A0 で、このセルに AcquireImage 関数によって返される画像データ構造体が含まれています。

フィクスチャ

フィクスチャ入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。

デフォルト設定は画像の左上隅で、(0, 0, 0) になります。

画像座標での行オフセットを指定します。
画像座標での列オフセットを指定します。
角度 画像座標での角度を指定します。

領域

これは対象領域 (ROI) とも呼ばれ、画像処理の対象となる画像の領域を指定します。変換および回転可能な矩形の画像領域を作成します。このパラメータを選択して、[領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。

:  パラメータの外部コントロールを許可するために [領域] パラメータが絶対参照としてスプレッドシートに入力されている場合、パラメータが変更されたときは、[マスクを登録] ボタンを押してマスクモデルを再登録してください。関数のプロパティシートが開いている間に [領域] パラメータが変更されると、マスクモデルは自動的に再登録されます。
X フィクスチャ座標での原点の X オフセットを指定します。
Y フィクスチャ座標での原点の Y オフセットを指定します。
高さ 領域の X 軸に沿った寸法を指定します。
領域の Y 軸に沿った寸法を指定します。
角度 フィクスチャ座標での角度を指定します。
カーブ 領域の X 軸と反対側の境界線との間の角度変位
:  [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。

スケール

マスクのサイズを、登録したフィクスチャサイズに対する割合 (%) で指定します (80 ~ 120、デフォルト = 100)

:  変化する [スケール] パラメータの影響を表示するには、コントロールをスプレッドシートにドラッグ & ドロップします。これにより EditInt 関数が作成され、自動的に [スケール] パラメータに対する絶対参照として分類されます。関数のプロパティシートが開いている間に [スケール] パラメータの値を変更すると、マスクが新しいスケール値で自動的に再登録され、パラメータの変更による影響がわかりにくくなります。

外部領域

オペレータ I/F 関数が入力されているスプレッドシートのセルへの参照を指定します。このパラメータを使用すると、Mask 関数は、[領域] と [フィクスチャ] の設定を無視し、参照先領域に指定された画像領域を検査します。

:  このパラメータが外部定義領域の参照として設定されている場合に、この関数の内部領域を使用するには、セル参照に値 0 を入力し、このパラメータを手動で 0 に設定する必要があります。それ以外の場合、この関数は引き続き外部定義領域を参照します。

傷モデル参照

Flex アルゴリズムによって修正されたモデルデータを含み、FlexFlawModel 関数によって出力される データ構造体を含んでいるセルへの参照を指定します。これにより、FlexFlawModel 関数の Flex アルゴリズムによる Flex をマスクに適用して、プロセスばらつきを考慮することができます。

セグメント化

関数がセグメンテーション解析を実行する方法を指定します。

平滑化係数 エッジ検出を実行する前に適用する平滑化の量を指定します (0 ~ 31、デフォルト = 1)。平滑化を適用すると、グレースケール値を平均化し、急速な変化による影響を弱めます。
最小エッジコントラスト

エッジ検出に使用する最小コントラストを指定します (1 ~ 100、デフォルト = 10)

:  このパラメータは[マスク方法] パラメータが [エッジマスク] に設定されている場合のみ有効になります。
最小セグメント面積

抽出する必要のあるセグメントの最小面積をピクセル単位で指定します (1 ~ 50000、デフォルト = 1000)。このパラメータはセグメントからノイズを除去する場合に有効です。

:  このパラメータは [マスク方法] パラメータを [最大セグメント] または [選択したセグメント] のいずれかに設定した場合に使用します。

マスク生成

マスクを構築する方法を指定します。

マスク方法

マスクを構築する基準として、エッジまたはセグメントを指定します。

0 = 最大セグメント マスクの生成に最大セグメントを使用するように指定します。
1 = エッジマスク (デフォルト) マスクの生成にエッジ強調を使用するように指定します。使用するエッジを決定するには、最小エッジコントラストを使用します。
2 = 選択したセグメント マスクの生成にユーザーが選択したセグメントを使用するように指定します。使用するセグメントを指定するには、[セグメント] パラメータを使用します。
セグメント

マスクの生成に特定のセグメントを使用するように指定します。カンマ区切り文字列 (1,2,5,7 など) を入力し、特定のセグメントを選択します。

:  
  • このパラメータを有効にするには、[マスク方法] パラメータを [選択したセグメント] に設定する必要があります。
  • [表示画像] パラメータを [セグメント化した画像] に設定した場合、検出されたセグメントの番号を含んでいる文字列が、情報アイコンの横に表示されます。リストに表示されている最初の番号が選択されたセグメントであり、その後に検出された使用可能なセグメントが続きます。
穴塗りつぶし最大サイズ

穴を塗りつぶすために必要な (穴としてカウントされない) 最大サイズを指定します (0 ~ 10000、デフォルト = 0)

:  [マスク方法] パラメータが [エッジマスク] に設定されている場合は、このパラメータは 0 に設定する必要があります。
カーネルサイズ中央値 マスク画像のエッジを平滑化するために使用するカーネルサイズ中央値を指定します (0 ~10、デフォルト = 0)。カーネルが常に奇数値で作成されるように、カーネルは (2N + 1) に基づいて構築されます。パラメータを 0 に設定すると、カーネルを使用しないように指定します。
収縮マスク数 生成された画像が収縮または膨張する回数を指定します (-100 ~ 100、デフォルト = 0)。負の値または正の値を使用できます。負の値は画像を膨張させます。パラメータを 0 に設定すると、収縮も膨張もしないように指定します。
反転

マスクを反転するかどうかを指定します (つまり、白を黒、黒を白)。

0 = OFF (デフォルト) マスクは反転しません。
1 = ON マスクは反転します。
マスクを登録

現在設定されているパラメータ設定でマスクが登録されるように指定します。

:  このパラメータをスプレッドシートに挿入して、再登録操作の外部コントロールを許可することもできます。このパラメータをスプレッドシートに入力すると、カスタムビューを使用して、外部デバイスで実行時にマスクを再登録することができます。

タイムアウト

マスクを計算する時間をミリ秒単位で指定します (0 ~ 30000、デフォルト = 0)。指定された時間が経過すると、実行は停止し、#ERR が返されます。

表示画像

この関数によって生成される出力画像のタイプを指定します。

0 = 入力画像 入力画像が表示されます。
1 = エッジ画像 エッジ強調画像が表示されます。
2 = セグメント化した画像 色分けされ、数値のインデックスが付いたセグメント画像が表示されます。
3 = マスク画像 (デフォルト) フィクスチャ入力を考慮した 2 値化マスク画像です。セグメンテーションとマスク生成処理の後に生成されます。ピクセル値 255 = 対象ピクセル、ピクセル値 0 = 対象外ピクセル

表示

画像の上に表示されるグラフィックスオーバレイを指定します。

0 = 非表示 (デフォルト) Mask 関数を含んでいるセルがスプレッドシート上でハイライトされている場合を除き、入力画像領域は表示されません。
1 = 結果のグラフィックスのみ 処理された画像が常に表示されます。
2 = 入力と結果のグラフィックス 入力画像領域とマスクが常に表示されます。

Maskの出力

戻り値

2 値化マスクを含んでいる データ構造体。入力パラメータが無効であれば #ERR を返します。

:  
  • 画像は関数のデータ構造体に保存されません。
  • Mask 関数は誤った出力マスクを生成することがあり、次の条件では関数が #ERR 条件を返さないことがあります。最初に、[選択されたセグメント] の [マスク方法] を使用して、マスクが登録されます。次に、[領域] が、選択されたセグメントを含んでいない画像の領域に移動されます。関数が再登録されたら、新しい [領域] の位置および以前に登録されたマスクが表示されます。関数はエラー状態になりますが、#ERR は返しません。この問題を解消するには、関数のプロパティシートをもう一度開き、新しい領域内にあるセグメントを指定して、マスクを再登録します。