画像処理の並列化処理と一口にいっても、様々な課題や問題があり、HALCONは2001年初頭にリリースされたHALCON
6.0から並列化処理に対応し、その後のバージョンアップの度に改善・改良が行われ高速化・高効率化を追及し続けています。
並列化を最適に行うための画像処理関数群を強力にサポートしているHALCONであれば、マルチコアCPUをフル活用するアプリケーションを、少ない工数で開発できます。
今回はユーザ様からの問い合わせも増えてきている、並列化処理に対応したHALCON【パラレルHALCON】について紹介します。
|
■ HALCONでの並列化処理
|
HALCONを使用して並列化画像処理を実現するには、パラレルHALCONを使用します。
パラレルHALCONはマルチコアを活用することで、単一の画像を各プロセッサで分割して処理したり、ある
いは複数のタスクを各プロセッサに有効に分割した状態で並列化画像処理を行うことができる、並列化処
理のためのHALCONです。
|
■
パラレルHALCONの使い方 |
パラレルHALCONを使い並列化処理を実現する手順はとても簡単です。
ビルドの際に、単純にライブラリへのリンクを、”スタンダードな”HALCONから”パラレル”HALCONのライブ
ラリファイルへ切り替えるだけです。
|
図1 パラレルHALCONへライブラリファイルの切り替え(C++の場合)
|
”パラレル”HALCONはHALCONをインストールするとき同時にインストールされていますので後から何かを追加インストールする必要はありません。
すでに”スタンダードな”HALCONでプログラムを作成済みであっても、並列化のためにソースを修正する必要は一切ありません。
ライブラリファイルの切り替えだけで、そのまま並列化処理の恩恵を受けることができます。
※HALCONの開発環境HDevelopでも「HDevelop」と「Parallel HDevelop」があり、
前者は”スタンダードな”HALCONライブラリを、後者は”パラレル”HALCONライブラリを参照しています。
|
■
2つの並列化手法
|
実際にはHALCONがサポートする並列化手法には2種類あります[図2]。
図2 HALCONによる画像処理の並列化手法
■1. オペレーターレベルでの並列化
前項で紹介した、ライブラリへのリンクを切り替えるだけで評価可能な並列化手法です。
HALCONのオペレーターを実行すると自動的に並列化処理が開始されます。内部的には図3のよう
な処理が実行されます。(1)呼び出したHALCONオペレーターが内部的にタスクを自動分割し、(2)
CPUごとに分担して画像処理を行います。画像をCPUの数だけ分割して並列処理する例を図示して
います。(3)全ての処理が終わると、オペレーターは各CPUでの処理結果を1つにまとめた状態で、
(4)結果を出力します。
以上のように、ユーザは並列化プログラミングを意識することなくオペレーターレベルでの並列処理
を実現することができます。
図3 オペレーターレベルでの並列化手法
■2. プログラムレベルでの並列化
もちろんマニュアルによる並列化プログラミングにも対応しています。パラレルHALCONのライブラリを使用
することで、HALCONの各種オペレーターをリエントラントに呼び出すことができます。これにより、ユーザ
が独自にCPUごとにタスクを割振ることで、スレッドセーフな処理を容易に構築することができます。
この際、すでに説明した「オペレーターレベルでの並列化」の機能を無効化しておくオプションもあるので、
完全にユーザ独自の並列化処理を組むことができます。
|| ※「オペレーターレベルでの並列化」の機能を無効化 ⇒
|| オペレーター”set_system”で 'parallelize_operators'
を 'false' に設定
|
■
処理速度検証 |
”パラレル”HALCONを使用することでどれだけの処理速度向上が見込めるか、”スタンダードな”HALCON
との処理速度比較についてご紹介します。
検証用PCにおいて、オペレーターごとに”スタンダード”HALCONと”パラレル”HALCONで処理速度を計測
しました。速度上昇率を表に示します。
■
検証環境
2000 x 2000 ピクセル、
8bit画像
HALCON8.0、 Windows XP
|
■
”スタンダード”HALCONを1としたときの”パラレル”HALCON処理速度上昇率
|
オペレーター
|
PC1 ※2CPU
(Core2 Duo 2.13 GHz)
|
PC2 ※8CPU
(Intel
QuadCore 2,3 GHz x 2)
|
スタンダードHALCON |
パラレルHALCON |
スタンダードHALCON |
パラレル
HALCON |
threshold
|
1.0
|
1.31
|
1.0
|
1.69
|
gray_dilation_shape
|
1.0
|
1.23
|
1.0
|
2.55
|
mean_image |
1.0
|
1.49
|
1.0
|
2.77
|
binocular_disparity
|
1.0
|
1.86
|
1.0
|
5.28
|
ライブラリの切り替えを行うだけで、画像処理の処理速度向上(8CPUで”threshold”は1.69倍、”binocular_disparity”は5.28倍)
をこれだけ見込めるのですから、これを活用しない手はありません。
ぜひご検証ください。
|
■ パラレルHALCON:Tips
|
■
パラレルHALCON最適化オペレーター check_par_hw_potential |
パラレルHALCONでの並列化処理を動作環境下にて最適化するには、事前に【check_par_hw_potential】
オペレーターを実行してください。PCのハードウエア情報を取得し、最適化に必要な情報がWindowsのレジストリに書き込まれます。
以後、パラレルHALCONで並列化処理をする際にこの情報が参照されるようになり、並列化処理を動作環境下にて最適な状態で実現できます。
具体的には、あまり小さな画像に対してオペレーターレベルでの並列化を適用しようとすると、並列化のオーバーヘッドが生じるため、処理速度が逆に遅くなることがあります。そのため、あまり画像サイズが小さい場合は並列化せず、高速化が見込めるサイズの画像の場合は並列化を適用するというような判定を行う必要があります。check_par_hw_potentialを実行すると、HALCONが入力画像に対してオペレーターレベルでの並列化をする(CPUごとにタスクを分割する)べきかどうかを、ご使用のハードウエア環境に合わせて各オペレーターごとに最適に判断できるようになります。
※なお、%HALCONROOT%\bin\HALCONARCHにある「hcheck_parallel」というプログラムを実行することでも最適化情報を蓄積可能です。
|
■
C言語でプログラムレベル並列化 |
プログラムレベルでの並列化処理は、CPUごとのスレッド内でHALCONのオペレーターを呼び出すことで実現できます。
例としてC++でCPUを指定してスレッドを立てるサンプルプログラムを下記に挙げます。コーディング方法は各言語の手順書をご参照ください。
【CPU指定C++サンプルプロジェクト ダウンロード】
http://www.linx.jp/image/news/express/2008/images/i08063/threadtest.zip
※CPU1に処理が集中していることをタスクマネージャにて確認してみて下さい。
※2CPUのPCにて動作させることを前提としています。
|
■
HALCON無償総合体験・学習キット 「HALCON Trial Kit」登場!
|
HALCONの機能を総合的に体験できるHALCON Trial Kitをリリースしました。
HALCONを導入したが使いこなすまでには至っていないと感じているHALCONユーザー様、
簡易センサーでは困難なアプリケーションを柔軟に実現すべく、HALCON導入を検討中のお客様にとって、
まさに理想的な体験・学習キットを無償にてお試しいただけます。
HALCON Trial
Kitは、以下のwebサイトよりダウンロードすることができます。
(※ダウンロードにはユーザー登録が必須です)
↓「HALCON Trial Kit」の 詳細はこちら↓
https://linx.jp/product/mvtec/halcon/trial_kit/
|
HALCON Trial Kit 起動画面
|
|
|
|
■
HALCON新教科書
好評発売中!
|
「画像処理アルゴリズムと実践アプリケーション」の詳細・お申し込みはこちら
↓
https://linx.jp/product/mvtec/halcon/
|
■
HALCON
8.0のデモ版を使用してのオンライン自習書 |
本書はオンライン自習書としての特長を持ち、付録CD-ROMからHALCON 8.0のデモ版をインストールすることで、
本書にて紹介した実践的なサンプルプログラムを実行できます。また、各章で解説した技術内容をベースに課題が設けられており、
HALCONデモ版を用いてオンラインで学習することができます。
|
|
|