ブロブ解析

イントロダクション

ブロブ解析は、一貫した画像領域の解析に基づく機械ビジョンの基本的な手法です。このため、対象物が背景から明確に区別できるアプリケーションでは、選択のツールとなります。多様なブロブ解析メソッドは、さまざまな視覚検査の問題に対応するためのカスタマイズされたソリューションを作成できます。

この手法の主な利点には、高い柔軟性と優れたパフォーマンスがあります。その制限事項は、明確な背景と前景の関係が必要なこと(代替手法としてテンプレートマッチングを参照)およびピクセル単位の精度が必要なこと(代替手法として1次元エッジ検出を参照)です。

コンセプト

領域ブロブの概念を定義してみましょう。

  • 領域は画像ピクセルの任意のサブセットです。Aurora Vision Studioでは、領域はRegionデータ型を使用して表されます。
  • ブロブは連結した領域です。Aurora Vision Studioでは、ブロブ(領域の特殊なケース)も同じRegionデータ型を使用して表されます。1つのSplitRegionIntoBlobsフィルターを使用するか、(それよりも少ない頻度で)Image Analysisのテクニックから直接イメージを使用して取得できます。

例の画像。

128よりも暗いピクセルからなる領域。

領域をブロブの配列に分解。

ブロブ解析ソリューションの基本的なシナリオは、次のステップで構成されています:

  1. 抽出 - 初期段階では、対象物(または単一のオブジェクト)に対応する領域を得るために、イメージの閾値処理手法の1つが適用されます。
  2. 精製 - 抽出された領域は、さまざまな種類のノイズによってしばしば欠陥があります(例:一貫性のない照明や画像の品質が悪いため)。精製ステップでは、領域変換技術を使用して領域を強化します。
  3. 解析 - 最終的なステップでは、精製された領域が測定対象となり、最終結果が計算されます。領域が複数のオブジェクトを表す場合、それぞれが個別に検査されます。

以下の例は、ブロブ解析アルゴリズムの一般的なスキーマを示しています。各例において、使用されている各テクニック(しきい値処理、モルフォロジー、領域特徴の計算など)は後のセクションで詳細に説明されています。

ラバーバンド

この理想化された例では、ラバーバンドで巻かれた電子デバイスの画像を分析します。目的は、バンドの見える部分の面積を計算することです(例:正しく組み立てられたかどうかを判断する)。

このケースでは、Extraction、Refinement、Analysisの各ステップが単一のフィルタで表されています。

Extraction - 赤いバンドに対応する領域を取得するには、色ベースのしきい値処理技術が適用されます。 ThresholdToRegion_HSx フィルタは、指定された色特性のピクセルの領域を見つけることができます。

Refinement - 抽出された領域にはしばしばさまざまな種類のノイズがあります(例:一貫していない照明や画像の品質が悪いため)。リファインメントステップでは、領域変換技術を使用して領域を強化します。

Analysis - 最後に、単一の RegionArea フィルタを使用して、得られた領域の面積を計算します。

初期画像

Extraction

Refinement

結果

マウント

この例では、一連のマウントの写真を検査して、損傷したものを特定します。

Extraction - 画像の照明が均一で、オブジェクトが一貫して暗く、背景が一貫して明るいため、オブジェクトに対応する領域を抽出するのは簡単なタスクです。基本的な ThresholdToRegion フィルタが仕事をし、この例では Refinement フェーズは必要ありません。

Analysis - 各ブロブを個別に分析する必要があるため、抽出された領域に SplitRegionIntoBlobs フィルタを適用して開始します。

悪い部分と正しい部分を区別するには、領域の特性(面積、円形度など)を選択する必要があります。ここでは面積が適していますが、やや洗練された長方形度の特徴を選択します。これにより、各ブロブの矩形度を計算することができます。

ブロブの矩形度を選択したら、分類フィルタ(ClassifyRegions フィルタ)に分類する領域を提供するだけです(および inMinimum 値パラメータを設定します)。矩形度が低すぎるブロブは、分類フィルタの outRejected 出力で利用できます。

入力画像

Extraction

Analysis

結果

抽出

画像から領域を抽出するための2つの技術があります:

  • 画像のしきい値処理 - 特定の条件を満たすピクセルの集合として領域を計算する一般的に使用される方法です(例:特定の値より明るいピクセルの領域、またはその近傍の平均輝度よりも明るい領域)。得られるデータは常に単一の領域であり、多くのオブジェクトを表す可能性があります。
  • 画像セグメンテーション - 特定の条件を満たす画像内の領域に対応する一連のブロブを計算するより専門化された方法です。得られるデータは常に連結した領域(ブロブ)の配列です。

しきい値処理

画像の領域へのしきい値処理技術は、その単純さと優れた性能のために、一般的なアプリケーション(単一のオブジェクトではなくオブジェクトのセットが検査される場合も含む)で好まれます。Aurora Vision Studioには、6つの画像から領域へのしきい値処理のためのフィルタがあり、それぞれ異なるしきい値処理メソッドを実装しています。

明るさベース
(基本)
ThresholdToRegion ThresholdToRegion_Dynamic
明るさベース
(追加)
ThresholdToRegion_Relative
色ベース ThresholdToRegion_RGB ThresholdToRegion_HSx

クラシックなしきい値処理

ThresholdToRegion は、指定された明るさの画像ピクセルを選択します。被検査オブジェクトの強度が一定で一貫しており、背景の強度とは明確に異なる場合、このフィルタを基本ツールとして考え、適用する必要があります。

動的なしきい値処理

検査対象のオブジェクトの一貫性のない明るさは、通常、照明のセットアップの不完全さによる一般的な問題です。以下の例のように、画像の一部のオブジェクトが実際には画像の別の部分の背景と同じ明るさを持つことがよくあります。この場合、基本的な ThresholdToRegion フィルタを使用することはできません。代わりに、ThresholdToRegion_Dynamic を検討する必要があります。後者は、与えられたピクセルの輝度とその近傍の平均輝度の差として定義されるローカル輝度である画像ピクセルを選択します。

色ベースのしきい値処理

カラー画像で検査を行う場合、色の大きな違いにもかかわらず、オブジェクトの明るさが実際にはその周囲の明るさと同じである可能性があります。そのような場合は、ThresholdToRegion_RGBThresholdToRegion_HSx のような色ベースのしきい値処理フィルタを使用することをお勧めします。サフィックスは、求めるピクセルの特性を定義する色空間を示しており、画像の表現に使用される空間ではありません。言い換えれば、これらのフィルタはどちらも標準のRGBカラー画像を処理するために使用できます。

例の画像

画像のピクセルの明るさを示すモノクロの等価物

赤いピクセルを対象とした色ベースのしきい値処理の結果

精緻化

領域形態学

領域形態学は領域変換の古典的な手法です。このツールセットの中心的な概念は、構造要素またはカーネルとしても知られるものを使用します。カーネルは比較的小さな形状であり、変換されている領域の寸法内の各ピクセルに対して繰り返し中心に配置されます。そのようなピクセルは、カーネルの実際の入力領域ピクセルとの重なりに対する操作固有の条件に基づいて、結果の領域に追加されるかどうかが決まります。例については膨張の説明を参照してください。

膨張収縮
基本 DilateRegion ErodeRegion
複合 CloseRegion OpenRegion

膨張および収縮

膨張は2つの基本的な形態学的変換の一つです。ここでは、変換されている領域の寸法内の各ピクセルPごとに、中心に配置された構造要素が実際の入力領域ピクセルと少なくとも1つ重なる場合にのみ、結果の領域にPが追加されます。円形のカーネルの場合、この変換はすべての方向に領域を均等に拡張することと同等です。

収縮膨張の双対操作です。ここでは、変換されている領域の寸法内の各ピクセルPごとに、中心に配置された構造要素が領域ピクセルに完全に含まれている場合にのみ、結果の領域にPが追加されます。円形のカーネルの場合、この変換はすべての方向に領域を均等に縮小させることと同等です。

クロージングおよびオープニング

領域形態学の実際の力は、その複合演算子であるクロージングおよびオープニングにあります。直前に行われた膨張によるブラインド領域の拡張中に、変換された領域の隙間が埋まります。残念ながら、拡張された領域はもはや検査対象のオブジェクトに対応していません。ただし、収縮演算子を適用して拡張された領域を元の境界に戻すことができます。拡張中に完全に埋まった隙間は、収縮後も埋まったままです。領域の抽出された部分の隙間を埋めるためのタスクには、クロージングが適しています。

オープニングクロージングの双対操作です。ここでは、変換されている領域が最初に収縮され、次に膨張されます。結果の領域は初期の領域の形状を保持しますが、その過程で薄い/小さい部分が削除されます。したがって、オープニングは領域から薄い/外れ個所を除去するためのツールです。以下の例では、オープニングはゴムバンドの幅の過剰なセグメントを見つけるという - それ自体は比較的複雑な - タスクを行います。

その他の精緻化手法

解析

対象のオブジェクトまたはオブジェクトに対応する領域を取得したら、解析を開始できます。つまり、興味のある情報を抽出できます。

領域の特徴

Aurora Vision Studioでは、数値(例:面積)および非数値(例:境界円)の領域特徴を幅広く計算できます。blob解析を適用すること自体が、取得された領域を記述する尺度を計算することを目的とすることがよくあります。矩形の包装箱が歪んでいるかどうかを確認する場合、包装領域の矩形度ファクターを計算することに興味があるかもしれません。ビスケットの上のチョコレートコーティングが十分に広いかどうかを確認する場合、コーティング領域の面積を知りたいかもしれません。

取得された領域が複数の画像オブジェクトに対応している場合(それぞれを個別に検査する場合)、特徴の計算を行う前にSplitRegionIntoBlobsフィルタを適用する必要があります。

数値特徴

以下の各フィルタは、領域形状の特定の特性を表す数値を計算します。

括弧内の注釈は、結果の値の範囲を示しています。

RegionArea

領域のサイズ(0 -

RegionCircularity

円に類似した度合い(0.0 - 1.0)

RegionConvexity

独自の凸包に類似しています(0.0 - 1.0)

RegionRectangularity

矩形に類似しています(0.0 - 1.0)

RegionElongation

線に類似した度合い(0.0 -

RegionMoment

領域のモーメント(0.0 -

RegionNumberOfHoles

領域の穴の数(0 -

RegionOrientation

主な領域軸の方向(0.0 - 180.0)

RegionPerimeterLength

領域の輪郭の長さ(0.0 -

非数値特徴

以下の各フィルタは、領域の形状に関連するオブジェクトを計算します。これらのフィルタを使用して抽出したプリミティブは、さらなる分析の対象にすることができます。たとえば、RegionHoles フィルタを使用して領域の穴を抽出し、RegionArea フィルタを使用してその面積を測定できます。

括弧内の注釈は、Aurora Vision Studioの結果のタイプを示しています。

RegionBoundingBox

領域を包含する最小の軸に平行な四角形(Box)

RegionBoundingCircle

領域を含む最小の円(Circle2D)

RegionBoundingRectangle

領域を包含する最小の任意方向の四角形(Rectangle2D)

RegionContours

領域の境界(PathArray)

RegionDiameter

領域内の2点を結ぶ最長セグメント(Segment2D)

RegionHoles

領域の隙間を表すブロブの配列(RegionArray)

RegionMedialAxis

領域のスケルトン(PathArray)

ケーススタディ

カプセル

この例では、コンベアライン上の洗濯機のカプセルのセットを検査します。目標は、変形したカプセルを識別することです。

2つのステップで進めます:まず、コンベアラインの写真に対応する領域を識別できるプログラムを設計します。次に、このプログラムを完全なソリューションの構築ブロックとして使用します。

FindRegion ルーチン

このセクションでは、最終的なソリューションの抽出およびリファインメントフェーズに責任を持つプログラムを開発します。このセクションでは、入力画像をその初期セグメントに制限します。

入力画像を簡単に検査した結果、このタスクが簡単ではないことがわかります。カプセルの本体の平均輝度は背景の輝度と類似しています。一方、カプセルの境界は一貫して背景よりも暗いです。オブジェクトの形状に関する重要な情報を含むのはオブジェクトの境界であるため、画像の最も暗いピクセルを抽出して、抽出したカプセルの境界をさらにリファインメントします。

抽出された領域は確かにそのリファインメントを必要とします。実際には、解決する必要がある2つの問題があります。カプセルの形状を塗りつぶし、コンベアラインセットアップの要素に対応する細い水平ストライプを除去する必要があります。幸い、これらの問題に対する比較的簡単な解決策があります。

FillRegionHoles は、現在の領域ピクセルに囲まれたすべてのピクセルを含むように領域を拡張します。領域が塗りつぶされたら、古典的な OpenRegion フィルタを使用して細いコンベアラインを除去します。

初期画像

ThresholdToRegion

FillRegionHoles

OpenRegion

抽出およびリファインメントのルーチンが完成しました。これは、よく定義されたタスクを実行する一連のフィルタからなるため、プログラムがますます成長するにつれて、ルーチンをマクロフィルタ内にカプセル化してプログラムの可読性を向上させることがお勧めです。

完全なソリューション

現時点では、プログラムは画像に表示されているカプセルに直接対応する領域を抽出することができます。残されているのは、各カプセルを検査し、正常または変形したものとして分類することです。

各カプセルを個別に分析したいので、抽出された領域を接続されたコンポーネント(ブロブ)の配列に分解する必要があります。この一般的な操作は、簡単な SplitRegionIntoBlobs フィルタを使用して実行できます。

解決策の重要な部分に近づいています - 正しいカプセルと変形したカプセルをどのように区別するかです。この段階では、Analysis セクションで提供される数値領域フィーチャの概要を確認することがお勧めです。手元の問題と相関する数値領域プロパティを見つけることができれば(たとえば、正しいカプセルには低い値があり、変形したカプセルには高い値があるか、その逆であるか)、ほぼ完了です。

形状の長方形度は、その面積と最小の包含矩形の面積との比率として定義されます - その値が高いほど、対象の形状が四角形に似ています。正しいカプセルの形状はほぼ長方形(角が丸い四角形)であり、明らかに変形したカプセルの形状よりも明確により長方形であるため、カプセルを分類するために長方形度フィーチャを使用することを検討できます。

分類に使用される数値フィーチャを選択したら、プログラムに ClassifyRegions フィルタを追加し、データを供給する準備が整いました。 inRegions 入力にカプセルブロブの配列を渡し、 inFeature 入力で Rectangularity を選択します。 inMinimum 閾値との対話的な実験の後、最小の長方形度を0.95に設定すると、正しい(outAcceptedで利用可能)と変形した(outRejectedで利用可能)カプセルブロブを適切に区別できます。

FindRegionルーチンによって抽出された領域。

領域を個々のブロブに分解。

ClassifyRegions フィルタによって選択された低長方形度のブロブ。