Cap (Easy)
目的
Tこの例のタスクは、シール (キャップの下のプラスチックのリング) が正しく配置されているかどうかを確認することです。
Input
ボトルの上部のイメージです。 ボトルの位置は可変です。
Output
検査結果を画像上に印刷します。 欠陥が検出された場合、その周囲に四角形が描画されます。
ヒント
これは、同じ例「Caps」の簡単な変形です。 Aurora Vision Studio でのプログラミングにおいてより高度なレベルにある場合は、その例を参照してください。 Aurora Vision Studio を初めて使用する場合は、ここから続けてください。
必要な検査を実行するための最初のステップは、画像内のオブジェクトの位置を検出することです。 ボトルは特に X 軸に沿って移動し、背景は一貫しているため、1D Edge Detection技術を適用し、検出されたエッジに基づいてローカル座標系を作成することが最善の方法です。
接続のラベル付けについては こちらを参照ください。
Solution (AVS)
- Workspace Explorerで例題を開き、フィルムストリップウィンドウでCapDifficultデータセットを選択します。画像チャンネルを「ACQUIRE」セクションにドラッグします。
- ScanSingleEdgeフィルタを追加し、ReadFilmstripのoutImage出力を inImageに接続します。
- ScanSingleEdgeをクリックします。左下隅のプロパティウィンドウで、inScanPathを選択し、キャップの左端を検出できるようにスキャン パスを定義します。 inEdgeScanParams.MinMagnitude を10に設定して、エッジをノイズの可能性から守ります。
- CreateCoordinateSystemFromPointフィルタを追加します。outEdge.PointをinPointに接続します。 エッジが見つかった点にローカル座標系が作成されます。
- 別のScanSingleEdgeフィルタを追加します。ReadFilmstripのoutImageをinImageに接続し、 outCoordinateSystemをinScanPathAlignmentに接続します
- 次に、プロジェクトエクスプローラー (Aurora Vision Studio の左側) に移動します。 新しいglobal parameterを作成します。 これにScanSegmentsという名前を付けます。これはSegment2DArrayタイプになります。
次に、以下の図に示すように3つのスキャン パスを定義します。
ScanSegmentsをinScanPathに接続します。このフィルタは配列モードで実行されます。 - ScanSingleEdgeフィルタをクリックして、 「プロパティ」ウィンドウで次の変更を加えます。
- スキャンパスの幅が十分に広くなるようにinScanWidthを70に設定します。
- シール上の最小の偏差も検出するには、inEdgeScanParams.MinMagnitudeを4に設定します。
- inEdgeScanParams.EdgeTransitionをDarkToBrightに設定します。
- outEdge.IsNil出力を追加するには、ポートのShow/Hide portsオプションを使用します。DefectPresentというラベルを付けます。
- 新しい数式を追加します。フィルターに接続せずにステートメント内でラベル DefectPresentを使用します。
outIsOK = all(DefectPresent) ?? False
- 次に、新しいステップ マクロフィルターを作成し、DrawResultsという名前を付けて、次の入力をそれに接続します。
- inImageとして、ReadFilmstripのoutImage出力
- inDefectLocationsとしての outEdge.Point (後者のフィルターから)、式のoutIsOKはinIsOKとして出力されます。
- 新しく作成されたマクロフィルターの内部に入ります。String型のChooseByPredicateを追加します。 [プロパティ] ウィンドウで次の値を設定します。
- inObjectIfTrueでPASS
- inObjectIfFalseでFAIL
- マクロフィルタの入力inIsOKをinConditionに接続します。
- DrawStrings_MultiColorフィルタを追加します。
- マクロフィルタの入力inImageをinImageに接続します。
- outObjectをinStringsに接続します。
- マクロフィルタの入力inIsOKをinColorIdsに接続します。
- inLocationsでキャップ上のどこかにテキストの位置を定義します。
- inPaletteをインデックス 0 で赤、1 で緑に設定します。
- inSizeを24に設定します。
- CreateBoxフィルタを追加します。
- マクロフィルタの入力inDefectLocationsをinLocationに接続します。
- inLocationAnchorをMiddleCenterに設定します。
- inWidthを40に設定します。
- inHeightを40に設定します。
- DrawRectangles_SingleColorフィルタを追加します。
- outImageをinImageに接続します。
- outBoxをinRectanglesに接続します。
- inColorを赤に設定します。
- inDrawingStyle.Thicknessを 3に設定します。
- Connect the outImageをマクロフィルター出力にoutImageとして出力します。
マクロフィルタ メイン
マクロフィルタ DrawResults
使用したフィルタ
アイコン | 名前 | 説明 |
---|---|---|
ChooseByPredicate | E.g. to choose GREEN color to visualize correct objects or RED to visualize defective ones. | |
CreateBox | ボックスを作成します。 | |
ScanSingleEdge | 物体 (ボトルの水平方向の変位など) と簡単な測定 (ボトル内の液面など) を非常に高速に検出します。 | |
DrawStrings_MultiColor | 画像上に複数の色で文字列(テキスト)を描画します。 | |
CreateCoordinateSystemFromPoint | 1D エッジ検出またはブロブ分析の結果からオブジェクトの位置合わせを定義するために最もよく使用されます。 | |
DrawRectangles_SingleColor | 画像上に単色で四角形を描画します。 |
その他の資料
- 1D Edge Detection - エッジ検出フィルターがどのように機能するかを説明しています。
- Local Coordinate Systems - 座標系の使用に関する基本的な概念について説明しています。