【HALCON】HALCONを使用したAnomaly検出:画像入力からスコア出力まで

【HALCON】HALCONを使用したAnomaly検出:画像入力からスコア出力まで

2024-09-12

2024-09-12

HALCONを使用してAnomaly検出を行い、入力画像からスコアを出力するまでの過程を詳しく解説します。製造業での品質管理や異常検知など、さまざまな分野で活用できる技術です。それでは、ステップバイステップで見ていきましょう。

環境準備

まず、HALCONがインストールされていることを確認しましょう。バージョンは最新のものを使用することをお勧めします。また、Anomaly検出用の学習済みモデルが必要です。これは事前に準備しておく必要があります。

プログラムの基本構造

HALCONのプログラムは通常、以下のような構造になります:

* 初期化
dev_open_window(...) * ウィンドウを開く

* メイン処理
* ...

* クリーンアップ
dev_close_window(...)

この構造を念頭に置いて、Anomaly検出の実装を進めていきます。

モデルの読み込み

最初のステップは、学習済みのAnomaly検出モデルを読み込むことです。

read_anomaly_model('path/to/your/model.anom', AnomalyModel)

ここで注意が必要なのは、パスの指定です。相対パスか絶対パスかを確認し、モデルファイルが正しく配置されていることを確認してください。

画像の読み込みと前処理

次に、分析対象の画像を読み込みます。

read_image(Image, 'path/to/your/input/image.png')

画像の前処理が必要な場合は、ここで行います。例えば、グレースケール変換が必要な場合:

rgb1_to_gray(Image, GrayImage)

前処理の内容は使用するモデルの要件に依存します。モデルのドキュメントを確認し、適切な前処理を行ってください。

Anomaly検出の実行

ここからが本題です。apply_anomaly_model関数を使用して、Anomaly検出を実行します。

apply_anomaly_model(GrayImage, AnomalyModel, 'none', [], [], AnomalyImage, AnomalyScore)

この関数の引数を詳しく見てみましょう:

  • GrayImage
    入力画像
  • AnomalyModel
    読み込んだAnomaly検出モデル
  • 'none'
    閾値処理を行わないモード
  • []
    追加パラメータ(ここでは使用しない)
  • []
    パラメータ値(ここでは使用しない)
  • AnomalyImage
    出力されるAnomaly画像
  • AnomalyScore
    出力されるAnomaly スコア

結果の取得

検出が完了したら、結果を取得します。

get_anomaly_model_result(AnomalyModel, 'anomaly_score', Score)

この関数で、Anomaly scoreを取得できます。スコアの解釈は使用するモデルによって異なるため、モデルのドキュメントを参照してください。

結果の表示と解釈

最後に、結果を表示します。

dev_display(Image)
dev_display(AnomalyImage)
tuple_string(Score, '.3f', ScoreString)
disp_message(WindowHandle, 'Anomaly Score: ' + ScoreString, 'window', 12, 12, 'black', 'true')

ここでは、元の画像とAnomaly画像を表示し、スコアを数値で出力しています。

スコアの解釈は重要です。一般的に:

  • 高いスコア → 異常である可能性が高い
  • 低いスコア → 正常である可能性が高い

しかし、「高い」「低い」の基準は、使用するモデルやアプリケーションによって異なります。

クリーンアップ

処理が完了したら、リソースを解放します。

clear_anomaly_model(AnomalyModel)

一連の流れ

* HALCONを使用したAnomaly検出プログラム

* 初期化
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)

* モデルの読み込み
read_anomaly_model('path/to/your/model.anom', AnomalyModel)

* 画像の読み込みと前処理
read_image(Image, 'path/to/your/input/image.png')
rgb1_to_gray(Image, GrayImage)

* Anomaly検出の実行
apply_anomaly_model(GrayImage, AnomalyModel, 'none', [], [], AnomalyImage, AnomalyScore)

* 結果の取得
get_anomaly_model_result(AnomalyModel, 'anomaly_score', Score)

* 結果の表示
dev_display(Image)
dev_display(AnomalyImage)
tuple_string(Score, '.3f', ScoreString)
disp_message(WindowHandle, 'Anomaly Score: ' + ScoreString, 'window', 12, 12, 'black', 'true')

* ユーザー入力待ち
disp_continue_message(WindowHandle, 'black', 'true')
stop()

* クリーンアップ
clear_anomaly_model(AnomalyModel)
dev_close_window(WindowHandle)

まとめ

以上が、HALCONを使用したAnomaly検出の基本的な流れです。実際の応用では、以下のような拡張が考えられます。

  1. バッチ処理
    複数の画像を連続して処理
  2. 結果の保存
    スコアや異常画像をファイルに出力
  3. 可視化の改善
    ヒートマップの生成やROIの表示
  4. パフォーマンス最適化
    並列処理の導入

Anomaly検出は強力なツールですが、正しく使用するには経験と調整が必要です。モデルの選択、前処理の方法、スコアの解釈など、アプリケーションに応じて最適化を行っていくことが重要です。

Recommend