マシン ビジョン_HALCON_テンプレート マッチング_1.CreateScaledShapeModel


I.はじめに

HALCON オペレーターマニュアルでは、オペレーターの紹介に HALCON ネイティブプログラム、C#、C++、C の 4 つの言語の紹介が含まれています。

この記事では、 HALCON ネイティブ プログラム (他の言語で HALCON と連携して開発されており、HALCON ネイティブ サンプル プログラムを理解できる必要があります) の下でcreate_scaled_shape_modelオペレーターを導入する形でオペレーターを学習します。タイトルの CreateScaledShapeModel は C# や C++ で採用されている大きなキャメルケースの命名方法ですが、これは以前の記事のタイトルがアンダースコアで区切られていたためで、スタイルを統一して曖昧さを避けるため、キャメルケース名 (それ以外の場合は、タイトルがMachineが、現在の名前では HALCON が他の言語と混同されるという別の曖昧さが生じます)。

演算子を紹介する前に、いくつかの予備知識を学びましょう。

テンプレート マッチングは一般に、コンピュータ ビジョンにおけるマッチング技術を指します。パターン マッチングという言葉を耳にすることもありますが、パターン マッチング (パターン マッチング) はより広い概念であり、そのマッチング データセットには画像、テキスト、音声などさまざまな形式のデータが含まれます。

テンプレート マッチングは、最も原始的で基本的なパターン認識方法です。特定のオブジェクトのパターンが画像内のどこに位置するかを調べて、オブジェクトを識別します, これはマッチングの問題です。

画像、テンプレート、モデルの違い:

  • 画像(イメージ):画像は現実世界の投影であり、レンズを通過する光によって形成される 2 次元画像です。画像はデジタルでもアナログでも構いません。デジタル画像はピクセルのマトリックスであり、各ピクセルの値はその点の明るさまたは色の値を識別します。模擬画像は、連続的な光強度分布で表される画像である。
  • テンプレート (テンプレート):テンプレートは固定された画像領域であり、通常は画像内で最も類似した領域を見つけるために使用されます。テンプレートは、長方形、円、多角形など、任意の形状の画像領域にすることができます。テンプレートには、バイナリ、グレースケール、またはカラー イメージを使用できます。
  • モデル:モデルは、現実世界のオブジェクトまたはシーンを抽象的に表現したものです。コンピューター ビジョンでは、通常、認識や分類などのタスクのためにオブジェクトの形状、動き、テクスチャ、その他の特性を記述するためにモデルが使用されます。

したがって、画像は生データであり、テンプレートは画像内のオブジェクト (通常は小さな画像領域、画像は大きな画像全体) を見つけるために使用されるツールです。モデルは、オブジェクトの特性と変化を記述するために使用されます。そうは言っても、まだ少し抽象的かもしれません。以下に図を示します。

画像

レンプレート

モデル

2. create_scaled_shape_model オペレーター

2.1 名前

create_scaled_shape_modelオペレーターは、マッチング用に等方的にスケーリングされたモデルを準備します

等方的に


等方性 (測定方向によって変化しない特性); 等尺性;
私の理解では、以下に示すように比例スケーリングです。
ここに画像の説明を挿入

また、名前の直訳から、テンプレートとして使用できるスケーリングされた形状モデルを準備する(モデルを直接出力できないため作成ではなく準備するが、使用する ModelID が提供される) ことがわかりますパターンを使用して、後続の画像で類似のオブジェクトを検索します。

2.2 演算子/関数のシグネチャ

create_scaled_shape_model(テンプレート : : NumLevels、AngleStart、AngleExtent、AngleStep、ScaleMin、ScaleMax、ScaleStep、最適化、メトリック、コントラスト、MinContrast : ModelID)

2.3 説明

このオペレーターはテンプレートを準備します。このテンプレートは、マッチング用に等角スケールの形状モデルとして画像テンプレートに渡されます。モデルの ROI はテンプレートのドメインとして渡されます。

ドメインとは、
一般的に言えば、画像内のコンテンツの領域です。
HALCON は、画像の処理対象の部分を指します。したがって、ROI (関心領域) になります。
ドメインは HALCON 内の領域であり、柔軟に定義できます (切断されたピクセルの集合である場合もあります)。

出力パラメーター ModelID は、 find_scaled_shape_modelへの後続の呼び出しのためのモデルへのハンドルですモデル画像のテンプレート(Template)の領域の重心がモデルの原点(または基準点、参照点)として使用されます。set_shape_model_originを使用して、異なる原点を設定できます。モデルは複数の画像ピラミッド レベルを使用して生成され、メモリに保存されます。

画像ピラミッド、画像ピラミッド
画像ピラミッドは、画像のマルチスケール表現の一種であり、複数の解像度で画像を説明するための効果的だが概念的に単純な構造です。画像の画像ピラミッドは、同じ元の画像に由来し、ピラミッド形状 (ボトムアップ) で徐々に減少する一連の画像解像度です。段階的にダウンサンプリングすることで得られ、一定の終了条件に達するまでサンプリングが停止されます。レイヤーごとの画像をピラミッドに例えます。レベルが高くなるほど、画像は小さくなり、解像度は低くなります。
ここに画像の説明を挿入
完全な事前生成モデルが選択されている場合、モデルは各レベルで複数の回転とスケールを使用して生成されます。

2.3.1 入力パラメータの詳細

  1. NumLevels、(ピラミッド) レベルの数
    ピラミッド レベルの数はNumLevelsによって決まります。その値はできるだけ大きくする必要があり、オブジェクトの検索に必要な時間を大幅に短縮できます。一方、NumLevels は、モデルが最上位のピラミッド レベルでも認識可能であり、十分な数のポイント (少なくとも 4 つ) が含まれるように選択する必要もあります。これは、 Inspection_shape_modelの出力で確認できます十分なモデル ポイントが生成されない場合、システムは、最上位のピラミッド レベルで十分なモデル ポイントが見つかるまで、内部的にピラミッド レベルの数を減らします。このプロセスの結果、ピラミッド レベルなしでモデルが生成される場合、つまり、最下位のピラミッド レベルのモデルの数がまだ少なすぎる場合、create_scaled_shape_model はエラー メッセージを返します。

    NumLevels が'auto' (または下位互換性のために 0) に設定されている場合、 create_scaled_shape_model はピラミッド レベルの数を自動的に決定します。get_shape_model_paramsを使用して、自動的に計算されたピラミッド レベルの数をクエリします。まれに、create_scaled_shape_model によって過度に大きいまたは小さいピラミッド レベルの数が決定される場合があります。ピラミッド レベルの数が大きすぎる場合、画像内のモデルが認識されないか、モデルを見つけるためにfind_scaled_shape_modelの MinScore または Greediness のパラメーターを非常に低く設定する必要がある場合があります。選択したピラミッド レベルの数が少なすぎると、find_scaled_shape_model がモデルを見つけるのに必要な時間が長くなる可能性があります。このような場合、inspect_shape_modelの出力を使用してピラミッド レベルの数を選択する必要があります。

  2. AngleStart、AngleExtent、および AngleStep、回転角度関連
    パラメータAngleStart、初期角度、およびAngleExtent、角度範囲は、画像内のモデルの可能な回転角度の範囲を決定します。find_scaled_shape_model はその角度範囲内のモデルのみを検索できることに注意してください。パラメータAngleStep は、選択した角度範囲内のステップ サイズを決定します。したがって、サブピクセル精度がfind_scaled_shape_modelで指定されていない場合、このパラメーターは達成可能な角度の精度を指定します。

    サブピクセル、Sub Pixel
    サブピクセル、エリアスキャンカメラの撮像面はピクセルを最小単位とします。たとえば、CMOS カメラ チップのピクセル ピッチは 5.2 ミクロンです。カメラが撮影すると、物理世界の連続画像が離散化されます。撮像面上の各ピクセルは、その近傍の色のみを表します。「近く」とはどの程度ですか?説明するのはとても難しいです。2 つのピクセル間には 5.2 ミクロンの距離があり、巨視的には互いに接続されているように見えます。しかし、小宇宙では、それらの間には無限に小さなものが存在します。この小さなものを「サブピクセル」と呼びます。実際には「サブピクセル」が存在するはずですが、ハードウェアにはそれを検出する小さなセンサーがありません。したがって、ソフトウェアはそれを近似的に計算します。

    AngleStep は、オブジェクトのサイズ、角度ステップに応じて選択する必要があります。小型のモデルでは、画像内にさまざまな個別の回転があまりありません。したがって、小さいモデルの場合は、より大きなAngleStepを選択する必要があります (これは影響を受けるピクセルから確認する必要があります。小さいモデルは小さい角度で回転し、ピクセルの変化はほとんどなく、視覚効果は明ら​​かではないため、ステップ サイズは適切である必要があります)。長く引っ張られる)。AngleExtent がAngleStepの整数倍でない
    場合、 AngleStep はそれに応じて変更されます。find_scaled_shape_modelによって返される回転角度値が正確に 0.0 でないことを確認するため、可能な回転範囲は次のように変更されます。正の整数値 n がない場合、つまり AngleStart とAngleStep のnが正確に 0.0 になる場合、AngleStartは AngleStep まで減少し、AngleExtent は AngleStep まで増加します。

  3. ScaleMin、ScaleMax、ScaleStep、スケール関連の
    ScaleMinScaleMaxは、モデルのズーム (サイズ) 範囲を決定します。スケール (より適切な比率に変換) が 1 の場合、モデルは元のサイズになります。パラメータ ScaleStep は、選択したズーム範囲のステップ サイズを決定します。したがって、サブピクセル精度がfind_scaled_shape_modelで指定されていない場合、このパラメーターはfind_scaled_shape_modelで達成可能なスケーリングの精度を指定します。AngleStep と同様に、ScaleStep もオブジェクトのサイズに応じて選択する必要があります。ズーム範囲が ScaleStep の整数倍でない場合、ScaleStep はそれに応じて変更します。find_scaled_shape_model がスケールなしのモデル インスタンスに対して正確に 1.0 のスケール値を返すようにするために、可能なスケール範囲は次のように変更されます。 ScaleMin に ScaleStep を掛けた値の n 倍が正確に 1.0 になるような正の整数値 n がない場合、ScaleMin は ScaleStep

  4. 最適化、最適化
    一部の非常に大規模なモデルでは、最適化を「なし」以外の値に設定してモデル ポイントの数を減らすと便利な場合があります。Optimization='none' (つまり、最適化をオフにする) の場合、すべてのポイントが保存されます。その他の場合は、最適化の値に応じて、ポイントの数がそれに応じて減ります。ポイントの数が減る場合は、find_scaled_shape_modelの Greediness パラメーターを 0.7 や 0.8 などの小さい値に設定することが必要になる場合があります。小さいモデルの場合、モデル ポイントの数を減らしても検索は高速化されません。この場合、通常、より多くの潜在的なモデル インスタンスをチェックする必要があるためです (モデルが小さいほど、イメージ内に存在する可能性が高くなります)。

    最適化が「自動」に設定されている場合、create_scaled_shape_model はモデル ポイントの削減を自動的に決定します。

  5. メトリック、メトリック/標準
    パラメータメトリックは、画像内で認識されるモデルの条件/標準を決定します。

    Metric = 'use_polarity'の場合、画像内のオブジェクトはモデルと同じコントラスト (コントラスト) を持つ必要があります。たとえば、モデルが暗い/暗い背景上の明るいオブジェクトである場合、オブジェクトが背景より明るい場合にのみ検出されます。

    Metric = 'ignore_global_polarity'の場合、コントラストが全体的に反転している場合でもオブジェクトは検出されます (つまり、オブジェクトは背景より明るい場合に検出されますが、現在は背景より暗くなります)。この場合、find_scaled_shape_modelの実行時間はわずかに増加します。

    Metric = 'ignore_local_polarity'の場合、ローカルのコントラストが変化してもモデルは検出されます。このモードは、たとえばパーツが中間のグレー (明るくも暗くもない) の場合に便利です。この場合、暗いサブオブジェクトと明るいサブオブジェクトの両方を見つけることができます。この場合、 find_scaled_shape_modelの実行時間が大幅に増加するため、通常は、 create_scaled_shape_modelを使用して複数のモデルを作成し、オブジェクトのコントラストの変化を反映し、find_scaled_shape_modelsを使用してそれらを同時に照合することが最善です。

    上記の 3 つのメトリクスは、単一チャネルの画像にのみ適用されます。マルチチャンネル画像がモデル画像または検索画像として使用される場合、最初のチャンネルのみが使用されます (エラー メッセージは返されません)。

    Metric = 'ignore_color_polarity'の場合、色のコントラストが局所的に変化した場合でもモデルは検索されます。たとえば、オブジェクトの一部の色が赤から緑に変わる可能性がある場合です。このモードは、オブジェクトがどのチャンネルで表示されるかが事前にわからない場合に特に便利です。このモードでは、find_scaled_shape_modelの実行時間が大幅に増加する可能性があります。メトリック「ignore_color_polarity」は、任意の数のチャネルを持つ画像に使用できます。単一チャンネル画像で使用すると、「ignore_local_polarity」と同じ効果があります。Metric = 'ignore_color_polarity' の場合、'create_scaled_shape_model' でモデルを作成するときと、'find_scaled_shape_model' でモデルを検索するときでは、チャネルの数が異なる場合があることに注意してください。たとえば、これを使用して、合成的に生成された単一チャネル画像からモデルを作成できます。また、チャネルには (RGB 画像の場合のように) 光のスペクトルが含まれている必要はないことに注意してください。チャネルには、異なる方向からオブジェクトを照明することによって取得された同じオブジェクトの画像も含めることができます。

  6. コントラスト、コントラスト
    パラメータ「コントラスト」は、モデル ポイントが持つ必要があるコントラストを決定します。コントラストは、オブジェクトとその背景の間、または同じオブジェクトの異なる部分間の局所的なグレースケールの違いの尺度です。テンプレートの顕著な特徴のみがモデルの構築に使用されるように、適切なコントラストを選択する必要があります。コントラストには 2 つの値を持つタプルを含めることもできます。この場合、モデルは、edges_imageでセグメンテーションに使用されるものと同様のヒステリシスしきい値処理方法を使用します。ここで、タプルの最初の要素が下限しきい値を決定し、2 番目の要素が上限しきい値を決定します。オプションで、Contrast にはタプルの最後の要素として 3 番目の値を含めることができます。この値は、コンポーネント サイズに基づいて重要なモデル コンポーネントを選択するために使用されるしきい値を決定します。つまり、指定された最小サイズよりもポイントが少ないコンポーネントは抑制されます。連続する各ピラミッド レベルでは、最小サイズのしきい値が 2 で除算されます。小さなモデルコンポーネントを抑制する必要があるが、ヒステリシスしきい値がまだ適用されていない場合は、

  7. MinContrast、最小コントラストMinContrast を
    使用すると、 find_scaled_shape_modelによって実行される認識に対してモデルが持つ最小コントラストを決定できます。言い換えれば、このパラメータはモデルを画像ノイズから分離します。したがって、画像内のノイズによって引き起こされるグレー値の範囲の変動を考慮するのが適切な選択となります。たとえば、グレー値が 10 グレー レベル以内で変動する場合、MinContrast を10 に設定する必要があります。モデルと検索イメージがマルチチャネル イメージを使用し、Metric = 'ignore_color_polarity'の場合、 MinContrast は1 つのチャネルのノイズにチャネル数の平方根を乗じて決定する必要がありますたとえば、シングル チャネル イメージのグレー値が 10 グレー レベル以内で変動し、そのイメージが 3 チャネル イメージである場合、MinContrast を17 に設定する必要があります。明らかに、MinContrast はContrastより小さくなければなりませんモデルが非常にコントラストの低い画像で認識される場合は、MinContrast をそれに応じて小さな値に設定する必要があります。モデルが重度のオクルージョン下で認識される場合、find_scaled_shape_model がモデルの位置と回転を安定して正確に抽出できるように、MinContrast はノイズによって生成されるグレー値の変動範囲よりわずかに大きくする必要があります。

MinContrast が「auto」に設定されている場合、最小コントラストはモデル イメージ内のノイズに基づいて自動的に決定されます。したがって、自動決定は、認識プロセスの画像ノイズがモデル画像のノイズと類似している場合にのみ意味を持ちます。また、場合によっては、耐閉塞性を向上させるために、自動的に決定される値を増やすことが推奨されます。自動的に計算された最小コントラストは、get_shape_model_paramsでクエリできます。

2.3.2 完全な事前生成モデル

オプションで、2 番目の値をOptimizationに渡すことができます。この値により、モデルが完全に事前生成されているかどうかが決まります。事前生成効果を実現するには、最適化の 2 番目の値を'pregeneration'または'no_pregeneration'に設定する必要があります。2 番目の値が使用されない場合 (値が 1 つだけ渡される)、モードはset_system('pregenerate_shape_models', …)で設定されます。デフォルト値 ('pregenerate_shape_models' = 'false') を使用する場合、モデルは完全には事前生成されません。モデルを完全に事前生成すると、実行時にモデルを変換する必要がないため、通常、実行時間が短縮されます。ただし、この場合、モデルの作成に必要なメモリと時間が大幅に増加する可能性があります。また、実行時にモデルを変換すると、変換されたモデルは事前に生成された変換モデルとは異なる内部データを持つことになるため、2 つのスキーマが同じ結果を返すことは期待できないことにも注意してください。たとえば、モデルが完全に事前生成されていない場合、find_scaled_shape_model は通常、より低いスコアを返します。そのため、完全に事前生成されたモデルにはより低いMinScore値を設定する必要がある場合があります。また、2 つのモードで補間によって得られるポーズは若干異なる場合があります。最大の精度が必要な場合は、モデルの姿勢を最小二乗調整によって決定する必要があります。

モデルの完全な事前生成がチェックされている場合、選択した角度およびスケール/スケール範囲に従ってモデルが事前生成され、メモリに保存されます。モデルを保存するために必要なメモリは、角度ステップ、ズーム ステップ、およびモデル内のポイント数に比例します。したがって、AngleStepまたはScaleStepが小さすぎる場合、またはAngleExtentまたはスケール範囲が大きすぎる場合、モデルが (仮想) メモリに収まらなくなる可能性があります。この場合、回転角度やスケーリングのステップサイズを大きくするか、角度範囲やスケーリング範囲を小さくする必要があります。いずれの場合も、モデルは可能な限りメイン メモリに収まるように努めます。これにより、オペレーティング システムのページングが回避され、オブジェクトを見つける時間が大幅に短縮されます。角度はfind_scaled_shape_modelを介してサブピクセル解像度で決定できるため、直径が 200 ピクセル未満のモデルの場合は、 AngleStep ≥ 1°およびScaleStep ≥ 0.02を選択できます。

AngleStep='auto'またはScaleStep='auto' (または下位互換性のために両方の場合に 0)を選択した場合、 create_scaled_shape_model はモデルのサイズに応じて適切な角度またはスケール ステップを自動的に決定します。自動的に計算された角度とズーム ステップは、 get_shape_model_paramsを使用してクエリできます

[完全にモデルを事前生成] がチェックされていない場合、モデルは各ピラミッド レベルの基準ポーズでのみ作成されます。この場合、実行時にfind_scaled_shape_modelでモデルをさまざまな角度とスケールに変換する必要があります。そのため、モデルの特定には時間がかかる場合があります。

事前に生成された形状モデルは特定の画像サイズに合わせて調整されることに注意してください。同じモデルを使用して異なるサイズのイメージを並行して検索することは、実行時の理由からサポートされていません。この場合、同じモデルのコピーを使用する必要があります。そうしないと、プログラムがクラッシュする可能性があります。

2.4 実行情報

  • マルチスレッドタイプ: リエントラント、リエントラント (非排他的演算子と並行して実行可能)
  • マルチスレッドスコープ: グローバル、グローバル (どのスレッドからも呼び出すことができます)
  • 並列化できない

この演算子はハンドルを返します。このハンドル タイプのインスタンスの状態は、ハンドルが特定の演算子への入力パラメータとして使用されている場合でも、特定の演算子によって変更される可能性があることに注意してください。

2.5 パラメータ

テンプレート(入力オブジェクト)
モデルの作成にドメインが使用される入力画像。
NumLevels(入力制御)
ピラミッド レベルの最大数。
デフォルト: 'auto'
可能な値: 0、1、2、3、4、5、6、7、8、9、10、'auto'
角度開始(入力制御)
パターン/テンプレートの最小回転角度
デフォルト : -0.39
推奨値: -3.14、-1.57、-0.79、-0.39、-0.20、0.0
AngleExtent(入力制御)
回転角度の範囲
デフォルト : 0.79
推奨値: 6.29、3.14、1.57、0.79、0.39
制限: AngleExtent >= 0
角度ステップ(入力制御)
角度ステップ サイズ (解像度/精度)
デフォルト: 'auto'
推奨値: 'auto'、0.0175、0.0349、0.0524、0.0698、0.0873
制限: AngleStep >= 0 && AngleStep <= pi / 16
ScaleMin(入力制御)
パターン/テンプレートの最小スケール
デフォルト : 0.9
推奨値: 0.5、0.6、0.7、0.8、0.9、1.0
制限: ScaleMin > 0
ScaleMax(入力制御)
パターン/テンプレートの最大スケール
デフォルト : 1.1
推奨値: 1.0、1.1、1.2、1.3、1.4、1.5
制限: ScaleMax >= ScaleMin
スケールステップ(入力制御)
スケール ステップ (解像度/精度)
デフォルト: 'auto'
推奨値: 'auto'、0.01、0.02、0.05、0.1、0.15、0.2
制限: ScaleStep >= 0
最適化(入力制御)
最適化のタイプとモデルの生成に使用される方法
デフォルト : 'auto
' 可能な値: 'auto'、'no_pregeneration'、'none'、'point_reduction_high'、'point_reduction_low'、'point_reduction_medium'、'pregeneration'
メトリック(入力制御)
一致基準/条件
デフォルト : 'use_polarity'
可能な値: 'ignore_color_polarity'、'ignore_global_polarity'、'ignore_local_polarity'、'use_polarity'
コントラスト(入力制御)
テンプレート イメージ内のオブジェクト コントラストのしきい値またはヒステリシスしきい値、およびオブジェクト部分のオプションの最小サイズ。
デフォルト: 'auto'
推奨値: 'auto'、'auto_contrast'、'auto_contrast_hyst'、'auto_min_size'、10、20、30、40、60、80、100、120、140、160
MinContrast(入力制御)
画像内のオブジェクトの最小コントラストを検索します。
デフォルト: 'auto'
推奨値: 'auto'、1、2、3、5、7、10、20、30、40
制限: MinContrast < Contrast

ModelID (output_control)
モデルへのハンドル。

2.6 実行結果

パラメーターが有効な場合、create_scaled_shape_model は2 (H_MSG_TRUE) を返します。必要に応じて例外が発生します。モデルに含まれるポイントが少なすぎるようにパラメーターNumLevelsContrastが選択されている場合、エラー 8510 が発生します。

2.7 可能な先行演算子

描画領域、縮小ドメイン、しきい値

2.8 可能な後継オペレータ

find_scaled_shape_model、find_scaled_shape_models、get_shape_model_params、clear_shape_model、write_shape_model、set_shape_model_origin

2.9 代替案

create_shape_model、create_aniso_shape_model

おすすめ

転載: blog.csdn.net/BadAyase/article/details/131144001