SurfaceFlaw

SurfaceFlaw 関数を使用して、検査対象の対象物や部品のスクラッチ、刃こぼれ、裂け目などの欠陥を示す、ローカルな明度のばらつきを検出します。

概要

SurfaceFlaw 関数は、生産プロセスの欠陥である、ローカルな明度のばらつきとカラーのばらつきのある領域を検出するように設計されています。この関数は、2 種類の内部フィルタ操作 (エッジ状の欠陥の検出に使用する [高速検出]、またはブロブ状の欠陥の検出に使用する [明るい傷]、[暗い傷]、[両方]) を使用します。しきい値を設定し、ブロブ解析を適用して欠陥の有無を判断する前に、最初に、カラーまたはグレースケールに急な変動のあったエッジと領域をハイライトします。

SurfaceFlaw 関数はスタンドアローン関数です。モデルを使用する必要がないため、設定が簡略化され実行時間が改善されます。モデルを組み込まないため、この関数は実行時の照明のばらつきを考慮し、欠陥を正確に検出することができます。ただし、DetectFlaw 関数、FlexFlawModel 関数、および TrainFlawModel 関数が備えているような、発生する可能性のあるばらつきを補正する機能はないため、部品のプロセスのばらつきを調整することはできません。このため、SurfaceFlaw 関数は、検査される部品の領域が均一である、つまり、明度に急な変動があると欠陥として分類されるアプリケーションに適しています。部品にプロセスのばらつきがある場合、ほかの Flaw Detection 関数でばらつきが考慮される必要があります。

:  SurfaceFlaw 関数は、Mask 関数によって出力された データ構造体を受け入れます。これにより、画像内の指定した領域のみを検査することができます。

SurfaceFlaw 関数の設定

SurfaceFlaw 関数の設定では、欠陥の有無の判別に使用されるしきい値を確立します。開始前に、検査対象となる部品の画像のデータベースを収集します。これには、誤差のない状態の部品画像と、一般的な誤差を示す画像が含まれます。画像は [記録/再生のオプション] ダイアログを使用してロードします。

まず最初に、誤差のない状態の部品の画像をロードします。SurfaceFlaw 関数をスプレッドシートに挿入し、検査対象の画像領域を囲むように [領域] を調整します。[領域] を設定するときは、ラベルや、文字またはロゴのエッジなどの無関係な特徴は含めないようにします。検査対象に部品のエッジを含める場合、領域がエッジに対して平行に位置される必要があります (円形の領域についても同様に、部品のエッジに対して円形のカーブ領域が平行)。ただし、エッジを超えないようにします。

:  
  • 部品が動きを有する場合、[フィクスチャ] を使用して [領域] が部品に応じて移動することを確認してください。
  • ラベルや英数字などの検査対象から除外する必要のある領域が部品に含まれる場合、Mask 関数によって出力された データ構造体を使用し、除外する領域を削除します。これにより、画像内の指定した領域のみを検査することができます。

関数のパラメータが欠陥を特定しないように設定されていることを確認します。SurfaceFlaw 関数には、[表示画像] パラメータが含まれています。このパラメータによって、パラメータでの調整がどのように関数に影響するかを示す視覚的フィードバックが提供されます。四角形の赤ボックス内に検出される傷がすべて含まれるように、[画像表示] パラメータを [傷候補] に設定します。

パラメータを調整する際は、[サンプル係数][平滑化係数] パラメータを調整することを推奨します。勾配の少ない傷を検出したり、低コントラストの大きな傷を検出したりするには、[サンプル化係数] を大きくします。[サンプル係数] パラメータを大きくすると、小さな欠陥や疑似欠陥を除外することができます。

これらのパラメータを調整したら、[検出タイプ][検出サイズ]、および [検出軸] パラメータのさまざまなオプションを使用します。この関数には、エッジ状の欠陥と、ブロブ状の欠陥の、2 種類の欠陥の検出方法があります。[検出タイプ] パラメータを [高速検出] に設定すると、「領域」タイプの欠陥のエッジに対してエッジ状の欠陥を検出するエロージョン/ダイレーションフィルタを実行します。これにより、欠陥の面積全体ではなく、欠陥の境界ボックスの周囲長として欠陥のサイズが報告されます。この設定は、スクラッチや裂け目などの欠陥を検出するのに有用です。

[検出タイプ] のオプション ([明るい傷]、[暗い傷]、または [両方]) は、ボトムハットフィルタとトップハットフィルタの組み合わせを使用してブロブ状の欠陥を検出します。これにより、ピクセルサイズに基づいて欠陥を検出することができます。このオプションは、斑点、染み、汚れなどの欠陥の面積を基準にして欠陥を検出するのに有用です。ただし、この 3 種類の [検出タイプ] オプションは、一般的により長い処理時間を必要とします。

[検出タイプ] パラメータを [高速検出] に設定する必要のあるほとんどのアプリケーションで、[検出サイズ] は通常、1 に設定するのが適切です。[明るい傷]、[暗い傷]、または [両方] に設定する必要のあるアプリケーションでは、[検出サイズ] パラメータは、検出対象の欠陥の半径よりも大きいサイズに設定する必要があります。

:  [領域] がエッジに対して平行に設定された場合、[検出軸] を領域と平行になるように設定する必要があります。

最後に、[最小傷面積][最大傷面積] および [最小コントラスト] パラメータを調整し、欠陥がそれぞれ適切に検出され、ハイライトされることを確認します。

誤差のない状態の部品を正しく検査したら、欠陥の含まれる部品の画像をロードします。ここでも、関数が目的の欠陥を正しく特定するまでパラメータを調整するプロセスを実行します。欠陥が特定されたら、誤差のない状態の部品の画像を再ロードして、欠陥が含まれていない画像として正しく検査されることを確認します。データベースのすべての画像が正常に設定されると、実行時の検査向けの関数の準備が整います。

SurfaceFlawの入力パラメータ

Syntax:SurfaceFlaw(画像,フィクスチャ.行,フィクスチャ.列,フィクスチャ.角度,領域.X,領域.Y,領域.高さ,領域.幅,領域.角度,領域.カーブ,外部定義領域,歪みのない画像,サンプル係数,自動平滑化,平滑化係数,検出タイプ,検出サイズ,検出軸,傷データの計算,傷形の計算,最小傷面積,最大傷面積,最小コントラスト,タイムアウト,表示画像,表示行,表示列,表示)

画像

 

画像データ構造体を含んだスプレッドシートセルを参照するように指定します。デフォルトでは、このパラメータは、AcquireImage 画像データ構造体を含むセル A0 を参照しています。また、このパラメータは、ビジョンツールのグラフィックス関数や、座標補正関数により返された、そのほかの画像データ構造体も参照できます。

:  
  • SurfaceFlaw 関数はピクセル座標で動作します。
  • SurfaceFlaw 関数では、グレースケール画像とカラー画像の両方がサポートされています。カラー画像を参照する場合、赤、緑、および青 (RGB) の 3 つのカラープレーンのいずれかの欠陥が識別されます。

フィクスチャ

 

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

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

Row (デフォルト = 0) 画像座標での行オフセット。
Column (デフォルト = 0) 画像座標での列オフセット
Theta (デフォルト = 0) 画像座標系での方位角

領域

 

これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。変換および回転可能な矩形の画像領域を作成します。このパラメータを選択して、プロパティシートのツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。

:  別のビジョンツール関数またはオペレータ I/F 関数の出力に対する ROI を定義する場合、領域座標へのセル参照を設定する代わりに、[外部定義領域] パラメータを使用します。[外部定義領域] パラメータはフィクスチャの動きを正しく考慮しますが、セル参照は正しく機能しない可能性があり、フィクスチャの動きを参照する関数は #ERR を返すことがあります。
X フィクスチャ座標での原点の X オフセット
Y フィクスチャ座標での原点の Y オフセット
高さ 領域の X 軸に沿った寸法。
領域の Y 軸に沿った寸法。
角度 フィクスチャ座標での角度。
カーブ 領域の X 軸と反対側の境界線との間の角度変位。
:  :[フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
外部定義領域

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

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

画像処理を先に進める前に、カーブや角度のある対象領域 (ROI) から歪みを取り除くかどうかを指定します。このパラメータは、欠陥を特定の軸 (X または Y) に沿ってのみ検出する場合に使用すると有用です。検出カーネルは ROI の方向や形に関係なく、常に画像の X 軸および Y 軸に沿って処理するようになります。画像内で「対角」の直線エッジに沿って欠陥を検出するには、最初に画像の歪みを取り除く必要があります。

:  
  • このパラメータは、内部 [領域] または [外部定義領域] パラメータに角度やカーブがある場合に必要になります。
  • 角度やカーブのある領域を使用して設定した SurfaceFlaw 関数で、[歪みのない画像] チェックボックスを ON にし、[表示] パラメータを [入力と結果のグラフィックス] に設定した場合、赤いオーバレイグラフィックスのみ表示されます。このようなアプリケーションでは、[表示] パラメータを [結果のグラフィックスのみ] に設定して、補正画像およびグラフィックスを表示してください。
0 = OFF (デフォルト) カーブや角度のある ROI から歪みを取り除かないように指定します。
1 = ON カーブや角度のある ROI から歪みを取り除くように指定します。
サンプリング係数 入力画像をサンプリングする量 (1 ~ 99999、デフォルト = 1) を指定します。これにより解像度を下げます。サンプリングは関数の実行時間を短縮するのに有用ですが、精度に影響を与えます。画像のサブサンプリングは欠陥のコントラストが低く、少しずつ移動するような場合に有用です。サブサンプリングによってピクセルがより密接するため、変化がより短く急になります。適切なサンプリング値を決定する際、値 1 はサンプリングを実行しないことを示します。つまり、入力画像はフル解像度で使用されます。値を高くすると解像度と精度が低くなりますが、実行時間はより速くなります。

自動平滑化

 

画像を滑らかにする最適な平滑化係数を選択するかどうかを指定します。最適な平滑化係数を選択することによって、通常、パフォーマンスを向上させることができます。

:  [自動平滑化] パラメータはデフォルトでオフになっています。このパラメータをオンにするには、[サンプル係数] パラメータを 1 より大きい値に設定する必要があります。[サンプル係数] パラメータを 1 より大きい値に設定し、[自動平滑化] を使用しない場合は、パラメータをオフにし、代わりに [サンプル係数] パラメータを使用して適切な値を設定します。
0 = OFF (デフォルト) [サンプル係数] パラメータを使用して手動の平滑化係数を適用するように指定します。
1 = ON 最適な平滑化係数を決定するように指定します。

平滑化係数

 

画像を滑らかにする係数 (0 ~ 99999、デフォルト = 0) を指定します。最適な値を決定する際は、[サンプル係数] パラメータに指定した値に近い値から開始します。平滑化を指定しない場合、値を 0 に設定します。

:  [自動平滑数] パラメータがオンに設定されている場合、このパラメータは使用できません。

平滑化係数

 

画像に適用して欠陥の有無を判別する画像処理のタイプを指定します。

:  画像処理のタイプに [明るい傷]、[暗い傷]、または [両方] を選択する場合、[検出サイズ] パラメータに検出する欠陥の最大サイズを設定する必要があります。
0 = 高速検出 (デフォルト) このオプションは、縞やスクラッチなど、表面の「エッジ状」の明度変化に適しています。傷のエッジをハイライト表示する、収縮誇張処理を適用します。実行時間は一番短いですが、報告されるのは傷の面積ではなく、周囲長のみとなります。
1 = 明るい傷 このオプションは、暗い背景にある「ブロブ状」の欠陥を、面積のピクセルサイズを基準にして検出するのに適しています。「トップハット」フィルタ処理を行い、[検出サイズ] パラメータで指定した値より小さい白い特徴以外をすべて取り除き、潜在的な傷を検出します。
2 = 暗い傷 このオプションは、明るい背景にある「ブロブ状」の欠陥を、面積のピクセルサイズを基準にして検出するのに適しています。「ボトムハット」フィルタ処理を行い、[検出サイズ] パラメータで指定した値より小さい黒い特徴以外をすべて取り除き、潜在的な傷を検出します。
3 = 両方 このオプションは、暗い、または明るい「ブロブ状」の欠陥を、面積のピクセルサイズを基準にして検出するのに適しています。「ボトムハット」および「トップハット」両方の処理を行い、両方の処理の最大結果を使用します。
検出サイズ

検出した近傍のサイズ (1 ~ 99999、デフォルト = 1) をピクセル単位で指定します。このパラメータは、[検出タイプ] パラメータで使用する処理近傍またはカーネルを構築するために使用します。

:  [高速検出] 以外の [検出タイプ] 操作では、サイズ値に、検出する欠陥の最大の長さまたは幅以上の値を設定する必要があります。
検出軸

欠陥候補を検出する軸を指定します。このパラメータはカーネルの高さも決定します。例えば、このパラメータを [X および Y] に設定し、[検出サイズ] を 1 に設定すると、カーネルは 3 × 3 グリッドになります。このパラメータを [X] に設定し、[検出サイズ] を 1 に設定すると、カーネルは 1 × 3 グリッドになります。

0 = X X 軸に沿って欠陥を検出します。
1 = Y Y 軸に沿って欠陥を検出します。
2 = X および Y (デフォルト) X 軸と Y 軸の両方に沿って欠陥を検出します。
傷データの計算

検出された個々の欠陥の面積、明度、境界ボックスを計算するかどうかを指定します。

:  
  • このパラメータを無効にすると、関数の実行時間が短縮されます。このパラメータを無効にすると、内部のブロブ解析は実行されません。これにより、「欠陥」ピクセルの総面積のみが返されます。画像内の欠陥の位置を示すグラフィックス情報は返されません。この関数によって自動的に生成される結果テーブルは、個々の結果に #ERR を返します。データを抽出するには、すべての欠陥を合わせた総面積を返す GetTotalFlawArea データアクセス関数を使用します。
0 = OFF 検出された個々の欠陥の面積、明度、境界ボックスを計算しないように指定します。
1 = ON (デフォルト) 検出された個々の欠陥の面積、明度、境界ボックスを計算するように指定します。
傷形の計算

検出された個々の欠陥の周辺長および真円度を計算するかどうかを指定します。真円度は、欠陥がどのくらい円状であるかを単位のない数値で示します。完璧な真円は、値 1.0 です。伸長した欠陥は、1 より大きい値になります。数値が増えると伸長がさらに大きくなることを示します。点状の欠陥は 0 に近い値になります。

:  このパラメータを有効にするには、[傷データの計算] パラメータを ON にしておく必要があります。
0 = OFF 個々の欠陥の周辺長および真円度を計算しないように指定します。
1 = ON (デフォルト) 個々の欠陥の周辺長および真円度を計算するように指定します。
最小傷面積 検出する欠陥の最小サイズをピクセル単位で指定します (1 ~ 99999、デフォルト = 30)
最大傷面積 検出する欠陥の最大サイズをピクセル単位で指定します (1 ~ 99999、デフォルト = 99999)。値 0 は最大サイズを指定しません。
最小コントラスト 欠陥の検出に使用する明度しきい値を指定します (1 ~ 255、デフォルト = 20)。傷を検出するには、明度は背景の値と異なる必要があります。
タイムアウト (ミリ秒) この関数による欠陥のサーチ時間をミリ秒単位で指定します (0 ~ 30000、デフォルト = 0/タイムアウトなし)。指定された時間が経過すると、実行は停止し、#ERR が返されます。値を 0 に設定すると設定値が無効になり、タイムアウトは適用されません。
表示画像

表示する出力画像を指定します。

:  この画像は表示のためにのみ使用されます。別の関数への入力として使用することはできません。
0 = 入力画像 そのときに取り込まれている画像が表示されるように指定します。
1 = 歪みのない画像 角度またはカーブのある ROI が入力として使用された場合、変換され、歪みが取り除かれた画像が表示されるように指定します。
2 = サンプル画像 平滑化され、サンプリングされた画像が表示されるように指定します。角度またはカーブのある ROI が入力として使用された場合、平滑化およびサンプリング効果に加えて、変換されて、歪みが取り除かれた画像が表示されるように指定します。
3 = 傷候補 欠陥の候補が表示されるように指定します。傷候補は背景に対比してハイライトされ、赤色の境界ボックスで囲まれます。この表示オプションには、定義した欠陥 ([最小傷面積] および [最大傷面積]) の範囲外の欠陥も含まれます。
4 = 傷マスク画像 (デフォルト) 欠陥が表示されるように指定します。欠陥は白色で描画され、そのほかの領域は黒色で描画されます。
表示行

表示画像が表示される行座標 (デフォルト = 0) を左上隅を基準に指定します。

:  

このパラメータは次の条件下で有効になります。

  • [画像表示] パラメータは [サンプル画像]、[傷候補]、または [傷マスク画像] のいずれかに設定され、[サンプリング係数] パラメータは 1 より大きい値に設定されます。
  • [画像表示] パラメータは [歪みのない画像]、[サンプル画像]、[傷候補]、または [傷マスク画像] に設定され、[歪みのない画像] パラメータは有効にされ、[領域の 角度] パラメータまたは [曲線] パラメータの設定は 0 になりません。
表示列

表示画像が表示される列座標 (デフォルト = 0) を左上隅を基準に指定します。

:  

このパラメータは次の条件下で有効になります。

  • [画像表示] パラメータは [サンプル画像]、[傷候補]、または [傷マスク画像] のいずれかに設定され、[サンプリング係数] パラメータは 1 より大きい値に設定されます。
  • [画像表示] パラメータは [歪みのない画像]、[サンプル画像]、[傷候補]、または [傷マスク画像] に設定され、[歪みのない画像] パラメータは有効にされ、[領域の 角度] パラメータまたは [曲線] パラメータの設定は 0 になりません。

表示

 

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

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

指定された [表示画像] と結果グラフィックス (検出された欠陥は赤色の矩形に囲まれて描画されます) が常に表示されます。

:  [外部定義領域] パラメータを データ構造体の参照として設定すると、入力画像は表示されません。

SurfaceFlawの出力

戻り値 表示画像データと検出された欠陥を含む SurfaceFlaw データ構造体。入力パラメータが無効であれば #ERR を返します。
結果

この関数が初めてセルに挿入されると、スプレッドシート内に結果テーブルが作成されます。

:  [傷データの計算] パラメータを無効にすると、すべての検出された欠陥の総面積のみを返します。すべての欠陥を合わせた総面積を返すには、GetTotalFlawArea データアクセス関数を使用します。

SurfaceFlawデータアクセス関数

次のデータアクセス関数が、SurfaceFlaw データ構造体結果テーブルを作成するためにスプレッドシートに自動挿入されます。

スプレッドシート名 関数名 説明
傷総サイズ GetTotalFlawArea(傷検査) すべての欠陥の面積を足した総面積を返します。
インデックス N/A 面積内で最大から最小までソートされた、インデックス付き欠陥を返します。
GetRow(傷検査, インデックス) 欠陥を囲む境界ボックスの行座標をピクセル単位で返します。
GetCol(傷検査, インデックス) 欠陥を囲む境界ボックスの列座標をピクセル単位で返します。
高さ GetHigh(傷検査, インデックス) 欠陥を囲む境界ボックスの高さ値をピクセル単位で返します。
GetWide(傷検査, インデックス) 欠陥を囲む境界ボックスの幅の値をピクセル単位で返します。
面積 GetArea(傷検査, インデックス) 欠陥の面積をピクセル単位で返します。
周囲長 GetPerimeter(傷検査, インデックス) 欠陥の周辺長をピクセル単位で返します。
明度 GetAverageIntensity(傷検査, インデックス) 欠陥の平均ピクセル明度の値を返します。
真円度 GetRoundedness(傷検査, インデックス) 欠陥の真円度をピクセル単位で返します。