Capsules
目的
カプセルの品質検査と簡易HMIの作成を行います。カプセルの表面の黒い斑点とその形状の変形の欠陥を検出する必要があります。
Input
1つのカプセルの画像
Output
顕著な欠陥のある画像を含むHMI。
ヒント
カプセル表面の黒い点を検出するには、 このタスクを達成するための最も速くて簡単な方法であるブロブ分析技術を使用します。
形状の変形を検出するには、損傷していないカプセルの周囲にパス (パス モデル) を作成し、それを連続するカプセルを境界付けるパスと比較できます。
接続のラベル付けについては こちらを参照ください。
Solution (AVS)
- Workspace Explorerから例題を開き、 フィルム ストリップ ウィンドウでCapsuleのデータセットを選択します。Imageチャンネルを「ACQUIRE」セクションにドラッグします。
- ステップマクロフィルターのDetectBlackSpotsを作成し、Imageタイプの入力を作成します。 それをPROCESSセクションに配置します。
- スポットは背景よりもはるかに暗いため、 ThresholdToRegionフィルターを追加します。inMinValueを0に、inMaxValueを50に設定します。
- SplitRegionIntoBlobsフィルターを追加して、検出された領域を各染色に対応する領域の配列に分割します。
- outBlobsを右クリックし、「プロパティ出力」を選択し、リストからIsArrayEmptyを選択します。 outBlobs.IsArrayEmpty出力は、配列のサイズがゼロに等しいかどうかを示します。
- outBlobs.IsArrayEmptyをドラッグし、Macrofilter Outputsブロックにドロップして、同じデータ型の出力を作成します。 outIsCorrectという名前にします。
- RegionMassCenterフィルターを追加し、それを outBlobsに接続して、各染色の中心を見つけます。
- 汚れの周囲に円を作成するには、CreateCircleフィルターを追加し、その inPoint入力をoutMassCenterに接続します。inRadiusを20に設定します。
- 結果を画像上に描画するには、DrawCircles_SingleColorフィルターを追加します。 inColor を赤に設定し、inColorを2.5に設定します。
- outBlackSpotsImage出力を作成し、それをDrawCircles_SingleColorフィルターの出力に接続します。
- カプセルの領域を検索するステップ マクロフィルターFindCapsuleRegionを作成します。 Imageタイプの入力を作成します。
- ThresholdToRegion_Dynamicフィルターを追加して、暗いエッジを含む領域を作成します。inRadiusXとinRadiusYの両方を8に設定します。inMaxRelativeValueも-4に設定します。
- CloseRegionフィルターを追加し、inKernelを Cross に設定し、inRadiusXとinRadiusYの両方を2に設定します。
- FillRegionHolesフィルターを追加して拡張領域を取得します。これには、以前に穴の中にあったすべてのピクセルが含まれます。
- OpenRegionフィルターを追加して形態学的開口部を実行するため、ノイズが除去されます。
- MakeRegionConditionalを追加して領域面積を計算し、指定された範囲内にあるかどうかを確認します。inMinimumを100000に、inMaximumを125000に設定します。
- outRegionOrNothingの出力を作成し、それをMakeRegionConditionalの出力に接続します。
- ステップマクロフィルターFindCapsuleShapeを作成し、ImageタイプおよびRegionの入力を作成します。このマクロフィルターは、カプセルの輪郭を見つける役割を果たします。
- RegionConvexHullフィルターを追加し、そのinRegion入力をマクロフィルターの inRegion 入力に接続します。
- RegionContoursフィルターを追加し、その入力を前のフィルターのoutRegionに接続します。 入力領域の輪郭に対応する閉じたパスの配列を計算します。
- GetMaximumPathフィルターを追加して、カプセルのアウトラインに対応するパスを取得します。 その入力をRegionContoursの出力に接続します。
- ConvertToEquidistantPathフィルターを追加し、その入力を前のフィルターの出力に接続します。inStep入力を5に設定します。
- SmoothPath_Gaussフィルターを追加して、ConvertToEquidistantPathの出力を滑らかにします。inStdDev入力を2に設定します。
- FitPathToEdgesフィルターを追加し、inImageをマクロフィルターのinImage入力に接続します。
- inFittingFieldを右クリックし、「Expand Structure Fields」を選択します。
- inFittingField.AxisをSmoothPath_Gaussフィルターの出力に接続します。
-
FitPathToEdgesの次のパラメータを設定します
- InflatePathフィルターを追加して、カプセルの外側の輪郭に対応するようにパスを拡大します。inPathをFitPathToEdgesのoutPathに接続します。
- InflatePathフィルターのoutPathをドラッグし、Macrofilter Outputsブロックにドロップして、同じタイプの出力を作成します。outShapeOrNothingという名前を付けます。
- マクロフィルターFindCapsuleRegionおよびFindCapsuleShapeのタスクは、カプセルの輪郭を抽出することでした。 次のステップは、ステップ マクロフィルターDetectDeformationsを作成することです。 このフィルターではoutShapeOrNothingパスとモデル パスの間の距離を計算します。 規定以上の距離を置くとカプセルが破損します。
- ImageタイプのinImage、PathタイプのinShape、RealタイプのinBendErrorThresholdの3つの入力を作成します。
- inShape入力を右クリックし、「プロパティ出力」を選択し、リストからポイントを選択して、カプセルのアウトラインのポイントにアクセスします。
- FitPathToPathフィルターを追加し、そのinReferencePath入力をマクロフィルターの入力に接続し、次のパラメータを設定します。
- inIterationsを3に
- inFirstShiftを1に
- inFirstRotationを3に
- inPath入力の"..."ボタンをクリックすると、パス モデルを作成するための GUI が開きます。
- FitPathToPath(#1)::outAlignment座標系を選択します。
- カプセルの周囲に閉じたパスを作成します。
- パス間の距離を計算するには、PathToPathDistanceProfileフィルターを追加し、そのinPath1をマクロフィルターの入力に接続し、inPath2 をFitPathToPathフィルターの出力に接続します。
- ClassifyByRangeフィルターを追加して、パスの点間の距離に応じて入力配列を3つの出力配列に分割します。 モデル パスまでの距離が指定された最大距離よりも長い点の配列に注目する必要があります。 次のポートを接続します。
- inShape.Points[]を使用したinArray入力
- inValuesとoutDistances
- inMaximum入力とマクロフィルタinBendErrorThresholdの入力
- outHigherを右クリックし、「プロパティ出力」を選択し、リストからIsArrayEmptyを選択します。
- マクロフィルターのoutIsCorrect出力を作成し、それをIsArrayEmpty出力に接続します。
- 画像上にモデルパスを描画するにはDrawPaths_SingleColorフィルターを追加し、そのinPaths入力をoutPathに接続します。 次のプロパティを設定します:inColorをwhite、inDrawingStyle.PointShapeをCircle、inDrawingStyle.PointSizeを3に設定します。
- カプセルが変形する輪郭の部分を描画するには、CreateCircleフィルターを追加し、そのinPoint入力をoutHigherに接続します。 次に、DrawCircles_SingleColorフィルターを追加し、その入力をoutCircleに接続します。
- マクロフィルターのDeformationsImage出力を作成し、出力イメージに接続します。
- Imageタイプの inResultImage分岐ポートを使用して、variant型マクロフィルターPresentResultsOrInfoを作成します。
- variant型NilにDrawStrings_SingleColor フィルターを追加します。 それらinImage入力をマクロフィルタinInputImageに接続します。
- inStringをCapsule damaged or not presentに設定して、描画する文字列を指定します。
- マクロフィルターのoutImage出力を作成し、それをDrawStrings_SingleColorフィルターの出力に接続します。
- プログラムが完了したので、HMI を設計できるようになりました。
- HMI コントロールの [コンテナ] カテゴリで使用可能な GroupBox コンテナを追加し、そのTextプロパティをControl*に設定します。
- 別のGroupBoxコンテナを追加し、そのTextプロパティをResultsに設定します。
- Control GroupBox内では
- 「コントロール」カテゴリで使用可能なProgramControlBoxコントロールを追加して、ユーザーがプログラムの実行を制御できるようにします。
- 最大の形状偏差を設定するには、Knobコントロールを追加し、そのoutValue出力をDetectDeformationsマクロフィルターのinBendErrorThreshold入力に接続します。
-
In Results GroupBox:
- Add the VideoBox control from the Video Box category and connect its inImage input with output of the PresentResultsOrInfo macrofilter.
- Add the PassFailIndicator control and connect its inValue inputs with the outShapeOrNothing.IsNil.Not output. To make this output visible right-click on the outShapeOrNothing and select IsNil.Not. This control shows whether the capsule has been detected.
- Add the PassFailIndicator control and connect its inValue inputs with the outIsCorrect output of the DetectBlackSpots. This control shows whether there are no black spots on the capsule's surface.
- Add the PassFailIndicator control and connect its inValue inputs with the outIsCorrect output of the DetectDeformations. This control shows whether shape of the capsule is correct. 結果グループボックスで: Video Box カテゴリから VideoBox コントロールを追加し、その inImage 入力を PresentResultsOrInfo マクロフィルターの出力に接続します。 PassFailIndicator コントロールを追加し、その inValue 入力を outShapeOrNothing.IsNil.Not 出力に接続します。 この出力を表示するには、outShapeOrNothing を右クリックし、IsNil.Not を選択します。 このコントロールは、カプセルが検出されたかどうかを示します。 PassFailIndicator コントロールを追加し、その inValue 入力を DetectBlackSpots の outIsCorrect 出力に接続します。 このコントロールは、カプセルの表面に黒い点があるかどうかを示します。 PassFailIndicator コントロールを追加し、その inValue 入力を DetectDeformations の outIsCorrect 出力に接続します。 このコントロールは、カプセルの形状が正しいかどうかを示します。
マクロフィルタ メイン
Macrofilter FindCapsuleRegion
Macrofilter DetectBlackSpots
Macrofilter FindCapsuleShape
Macrofilter DetectDeformations
Macrofilter PresentResultsOrInfo(default)
Macrofilter PresentResultsOrInfo(Nil)
使用したフィルタ
アイコン | 名前 | 説明 |
---|---|---|
RegionContours | Computes an array of closed paths corresponding to the contours of the input region. | |
DrawCircles_SingleColor | Draws circles on an image with a single color. | |
SelectByRange | Selects the elements of the input that fall into the specified range. | |
FillRegionHoles | Adds pixels to the input region so that it contains no holes. | |
CreateCircle | Creates a circle from an aligned point and radius. | |
ThresholdToRegion | 顕著な明るさによって定義できるオブジェクトの領域の抽出。 | |
RegionConvexHull | Computes the smallest convex region containing the input region. | |
OpenRegion | Removing small parts from a region without making it thinner. | |
InflatePath | Enlarges a path by a given margin (points in the input path must be sorted clockwise). | |
RegionMassCenter | 領域のピクセルの平均座標に等しい座標を持つ点を計算します。 | |
MakeRegionConditional | Computes a region feature, checks whether its value is in range and creates a conditional region on this basis. | |
GetMaximumPath | Use this filter when you have an array of paths and you want to select one of them that best matches some criterion. | |
CloseRegion | Filling-in small gaps in a region without making it thicker. | |
DrawPaths_SingleColor | Draws paths on an image with a single color. | |
ConvertToEquidistantPath | Creates a new path whose characteristic points lie on the input path, but are equally spaced. | |
ThresholdToRegion_Dynamic | Useful in case of uneven illumination. | |
FitPathToPath | Rotates and shifts a path to minimize average distance between its points and a reference path. | |
DrawStrings_SingleColor | Draws strings (text) on an image with a single color. | |
FitPathToEdges | Tracing of an object contour, whose rough location and shape is known beforehand. | |
PathToPathDistanceProfile | Computes the profile of distances between two paths. | |
SmoothPath_Gauss | Smooths a path by averaging its characteristic points within a kernel using gaussian-weighted average. | |
SplitRegionIntoBlobs | オブジェクトが互いに接触していない場合に、領域を個々のオブジェクトにセグメント化します。 |
その他の資料
- Blob Analysis - ブロブ分析手法について詳しく説明します。
- Shape Fitting - シェイプ フィッティング テクニックの使用法を紹介します。