ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

HALCONコミュのQ & A トピック

  • mixiチェック
  • このエントリーをはてなブックマークに追加
HALCONに関するQ&Aトピックです。
質問することも、回答することも自由におこなっていきましょう。但し、HALCONの販売元である(株)リンクスのHP上HALCONQ&Aの欄にも相当数のQ&Aが存在しますので、まずはそちらのご活用をよろしくお願いいたします。

また、基本的に記述内容に関する正誤の保証は負いかねますのでご了承ください。あくまで、個人レベルでの検討結果です。
どうしても問題をクリアにしたい場合は、ベンダーのサポート係に質問することが妥当かなと思います。

ただしHALCONの画像処理的な細かな部分を追いかけたりといった脱線トークや、オペレータの使用方法に関する疑問点、そもそもオペレータのレファレンスで説明されている内容がよくわからないなど、どんな自由な質問もこちらでは皆様で楽しんで検討していければと思います。

よろしくお願いいたします。

コメント(26)

HALCON 7.1に関する新機能詳細はコチラ
http://www.mvtec.com/halcon/version7.1/new-features.html

不明な部分についていくつか考察
■3D Position of Circles
円形部を使用した3次元姿勢情報の取得です。
事前にキャリブレーションが必要と思われます。

簡単なエッジ処理で円となる部分を抽出し、円の相対位置関係により傾き、z方向などの距離を推測します。

円の相対位置を把握するための方法として恐らくワーク自体をキャリブレーションプレートとして使用するような方法がとられているか、ワークないしカメラの傾きとキャリブレーションプレートの対応を同期づける必要があるのではないでしょうか。

■Self Calibration
モザイキングに限っての話か?
実世界の座標系を取得するためには、キャリブレーションプレートを使用するのが一般的。
内部カメラパラメータ(レンズ収差などによる歪)の補正を自動に行い、特徴点抽出により画像の自動的なスケーリング結合を行っているのかな・・・。

と思ったらその項目は
Mosaicking With Bundle Adjustmentに書いてありました。
となると内部補正を自動的に行えるという話なのでしょうか。

■Grouping of Contours
HALCON XLD データを使用した円フィッテイングの難しさとしてコントラスト比がばらつく場合に求めたいエッジをきれいに抽出できないという問題がありました。

エッジが不完全な断片として抽出された場合にも推定してXLDデータのグルーピングを行うという作業が行われています。

■Inpainting
背景推定を使用した、ノイズの除去、テクスチャの補間です。
HALCONのShape Based Matchingはエッジベースのマッチング技術になるため、オリジナル画像からマッチングのモデルを使用する場合細かなノイズを拾ってしまうという問題がありました。解決する方法として人工モデルを使用する方法がありましたが、手のかかる方法である上、複雑な形状を作成するのはかなり困難という問題点がありました。

そこで、この機能を使用して周辺のノイズを削除することで、モデルとなるものの概形を取得しやすくしているのではないかと思います。

また、テクスチャの異なる対象を画像から取り除き、周辺テクスチャ情報を使用して除かれた部分のスペースを補間するといったことが行われているようです。
はじめまして。今年の4月から大学院の研究でHALCONを使い始めました。
コミュを探したら、あったのでとても驚いています(^^;
HALCONって機能満載で、すごい便利ですよね。
今までは画像処理とは違う研究をしていて、初めて画像処理をしているんですが、HALCONを使っての作業が新鮮で楽しいです☆

トピ通り、いきなり質問で申し訳ないんですが、伺ってもよろしいでしょうか・・・m(_ _)m

今、1つのターゲットを2台のカメラで撮影して、得られた2枚の画像をHALCONで照合し、同じ絵が写っているかを調べています。(それぞれのカメラで照明を変えているので、得られる画像は少し違います)
私が考えたのは、まず得られた画像AとBをそれぞれ threshold() で2値化して、connection() でObject化しました。
そして、画像A中のObjectAの領域中に、画像B中のObjectBの重心(area_centerで算出)が含まれているかを調べようと思いました。
しかし、含まれているかどうかの判断のやり方がどうも浮かびません(>_<)

領域A(Region)の中に座標B(area_center()の(row,column))が含まれているかどうかの判断はどのようにしたらよいのでしょうか。
オペレーターがあるのでしょうか。
ぜひ知恵を貸してください(^-^;
モンキーさん、こんにちは

座標Bを1pixel領域化{gen_circle(B, row, column, 1)}して、領域AとのANDを取り{intersection(A, B, Result)}、結果{Cnt := count_obj(Result)}が空でなければ{if Cnt>0}含まれている..なんてのでヨロシイでしょうか?

では、頑張って下さいね!
>福麿呂さん
返信ありがとうございます(^o^)

早速試してみたところ、成功しました。
本当にありがとうございます!

intersection()というオペレーターがあるということを知りませんでした。
皆さんはどのように自分の行いたい作業に適したオペレーターを探されるのでしょうか。
私は、Linx社が発行している「HALCON活用法」に似たような作業がないかを探すか、LinxのQ&Aを見るという方法で探すのですが、なかなかすべてを網羅しきれないようです。
最後はHALCON Reference Manualをしらみつぶしに探しました・・・
レジストリが・・

いろんなベンダーのライブラリ使ってるんですけど、今日久しぶりにHALCONじゃないライブラリ使おうとしたらドングルUSBキーを認識してくれませんでした。どうやらHALCON7.1にアップデートしたときに、レジストリ書き換えられたらしく一度削除したんですけどうまく動作しなくて。。

サポート係りに連絡しても、たぶん再インストールしなっていわれるだけそうだし。

凹みますね。
ドングル認証が競合するライブラリは入れないほうがいいのかなぁ。それとも単にインストールに失敗しただけなのか・・

HALCONが触ってるレジストリとか知ってる人いないですよね。
はぁ。。
福麿呂さんこんにちは。

アドバイスありがとうございます。
上記の件ですが、USBドライバ関連のソフトが競合していたのが原因だったみたいです。メニューの『アンインストール』では完全に削除されてなかったみたいで、コントロールパネルの『アプリケーションの追加と削除』の項目で片方のソフトを消すと無事もとに戻りました。(よくみたらそのドングルメーカーのマニュアルにそういう風に消せと書いてありました。)

お手数をおかしてすみません。
ありがとうございました。
初めまして。今年から研究でHALCONを使うようになりました。

Q & Aトピックということで、初歩的とは思うのですが、さっそく質問させて下さい!

HALCONで書かれたプログラムを、Microsoft[visual studio 2005]のC++で書き換えたいのですが、visual studioを立ち上げた際、どのプロジェクトの種類、テンプレートの種類を選んで良いのかよく分かりません・・・。

また、ディレクトリのパスはどのように設定すれば良いのですか??

ご存知の方いましたら、教えて下さい・・・。
オトジョさん
はじめまして
HALCONがインストールされているフォルダの下にexamplesというディレクトリがあります。

使用方法はエクスポートするソースの言語によると思うので、まずはそこにあるソリューションを開いてみてください。

プロジェクトの参照にdllを追加すれば使用できるのではないでしょうか。

プロジェクトにある参照の部分で右クリックして追加を選択すればできるはずです。
(halconcpp.dll など)

同じくHALCONがインストールされているディレクトリの下にbinというディレクトリがあると思うので、そこを参照してください。

間違っていたらごめんなさい。
>みっつーさん
ありがとうございました。なんとかなった模様です。
->オトジョさん
イマイチな提案だったかもしれません。
どうにかなったようでよかったです。
->KAZUTAさん
抽出されているデータ形式がRegionか、XLDかどうかによりますが、Regionである場合、

area_center()というオペレータで重心を求めることができます。

重心ではなく、長方形の中心が求めたいというような場合であればget_region_points()というオペレータでRegionの座標を取得することもできます。ただし、この方法だとnullデータのハンドリングや座標データの方向を気にするときやっかいです。
tupleデータの取り出しはassign()というオペレータを使用してColumn[|Column|-1]などという風にすれば最後の配列データをとりだせます。HDevelop独特の記述です。

かなりトリッキーなやり方ですが、
erosion1()というオペレータで入力と同じRegionデータ(つまり指の部分)をStructElementに入れると中心位置のみデータが残ります。

延長の線を引くときはline_orientationというオペレータで直線の方向を求めgen_region_hline()というオペレータで線はひけると思います。(線が抽出できていれば。)

データがXLDデータでも、同様のことができるオペレータがあります。

スケルトン(細線化のオペレータ)です。
skeleton()というオペレータを使用した後に
split_skeleton_lines()などというオペレータを使用するとそれらしき座標が取得できます。
このとき抽出されたデータは
junctions_skeleton()で生成されたデータです。

ただ、長方形のデータでためしてみたら余計なヒゲのようなものが抽出されてしまうので、こういう余計なデータを削除する必要があるかもしれません。

だらだら順序だてもデタラメになってしまいましたが、やりたいことに対して間違っていたらごめんなさい。
大学の研究でHALCONを使うことになりました。
周りに分かる人間もおらず、苦戦してます。

質問させていただきます。

C++のプログラムのうち、PCに接続したwebカメラでQRコードを読み取る部分をHALCONで処理させたいのですが、どのオペレーターを使ったらいいのか分かりません。
それ以前に、銀河などのボードがなければ無理なのでしょうか?

初心者丸出しの質問で申し訳ありませんが、お力を貸していただけたらと思います。
さる☆ましらさんこんばんは。
みっつーと申します。よろしく。

まず、USBをインターフェースとするカメラも含めてHALCONがインターフェースをとれる・・

つまりHALCONが持つ関数を使用してデフォルトで使用できるカメラですが、メニューからMVTec HALCON7.1→Documentation→ReferenceManual→ Frame Grabber Interfacesで確認することができます。USBインタフェースですと、IDS uEyeなどがあります。こちらは日本FAシステムさんが代理店のようです。
簡単に使うことをお考えならThe Imaging Source 社のIEEE1394カメラ(アルゴさんが代理店)のカメラなどが安くお買い求めできるかと思います。アルゴさんはこの前IEEE1394カメラを破格の値段でたたき売りしてました。今もやってるかは不明です。銀河はアナログ信号やカメラリンクなどのデジタル信号の対応となりますのでUSBカメラの入力にはご利用できません。

QRコードのプログラムに関してはサンプルプログラムの
Method→2d data code →qrcode〜というサンプルがあるのでそちらを参考にしてみるとよいかもしれません。

参考になるかわかりませんが、よろしくお願いします。
>みっつーさん

ありがとうございました!
とりあえずDirectShowを使って試してみます。
また質問することがあるかもしれませんが、よろしくお願いいたします。
度々申し訳ありません。またお力を借りたく参りました。

HALCONを用いてマークシートの処理を行わなくてはならなくなったのですが、手に負えず困っています。

以下の条件が与えられています。
・QRコード認識と同時にマーク読み取りを行う
・マーク欄だけでなく、手書きメモ等も記入した画像を扱う
・複数マークの関連付けを行う

指示者はQRコードの座標データを用いればできるはずだと言っているのですが、HALCONを使えるわけではないので要領を得ておらず参考になりません。

毎度質問ばかりで心苦しいのですが、この時期に課題が増えて非常に困っております。
アドバイスを頂けたら幸いです。
あけましておめでとうございます。

さる☆ましらさん、こんばんは。
>・QRコード認識と同時にマーク読み取りを行う
この部分について確認したいのですが、「マーク」とはQRコードそれ自体のことでしょうか、それとも何か他のマークになるのでしょうか?QRコードの認識及び、デコードであれば簡単に標準のオペレータでできると思います。
もしQRコードとは別のマークを意味するのであれば、shape base matching等の処理によってその「マーク」を認識するシーケンスが別に必要になります。

>・マーク欄だけでなく、手書きメモ等も記入した画像を扱う
手書きメモ等を記入した画像を扱う目的は、手書きメモの認識を行うためでしょうか?それともQRコードのミスマッチングを防ぐためでしょうか。さしつかえなければ確認させてください。手書き文字についても文字認識のシーケンスでできると思います。ただし、手書き文字の抽出がどれだけ困難かどうかという問題があります。文字自体が抽出できない場合、問題はやっかいです。

>複数マークの関連付けを行う
関連付けとは例えばどのような処理を指しているのでしょうか?相対位置に関する座標位置関係に何か意味を与えるのでしょうか。かなり処理の候補が幅広くなるので、差し支えなければ抽象的でもよいので、できるだけ具体的に教えていただけると何かアドバイスできるかもしれません。

質問に質問をお返しする形になり恐縮ですが、よろしくお願いいたします。
さる☆ましらさん
こんばんは。

なんだか答えにくいことを書いてしまって申し訳ないです。

その後いかがでしょうか。

上記の問題についてですが、まず単純にQRコードのサンプルプログラムについて紹介しておきたいと思います。

HDevelopのFileメニュー→Open Example Program→Method→
2D data code という項目があります。
そちらにあるqrcode_*というサンプルプログラムを使用すればQRコードを読み取るプログラムは比較的単純に作れると思います。


その中にqrcode_simple.devというサンプルプログラムがあるのですが、まずはそのプログラムを参照してください。

find_data_code_2dというオペレータで
SymbolXLDsというContourデータを取得しています。
これがQRcodeのオブジェクトです。

それからそこに
get_contour_xld(SymbolXld,Row,Col)というオペレーターで座標を求める処理が行われています。

SymbolXlDsとあるように、find_data_code_2dで読み取られたデータは複数存在します。
したがってそれをひとつひとつオブジェクトの数だけ座標を取得しているとお考えください。

デコードしたデータについては、find_data_code_2dの出力DecodedDataStringsというアウトプットデータとして出力されています。

以上、すでにご承知の部分かもしれませんが参考までにお願いします。
HALCON 5.0とは大分昔のバージョンですね。すごい。
私も6.0からしか使ったことがないので、5.0のことに関して正しくお答えできるかどうか。。

6.0からしかわからないので、その範囲で回答すると
->文字認識プログラムで得られたデータをcsvファイルに保存出来るのでしょう
->か?

open_file、close_fileというオペレータがあってcsv形式のファイル書き込み
をサポートしています。

->また、文字認識を行う際、動画を処理出来るのでしょうか?

もちろんできますが、動画を直接取り込んで処理する場合、画像を
取り込むためのカメラや撮像に関するオペレータの記述が必要です。
動画ファイルに関しても現在だとaviファイルもサポートしているの
ですが5.0ですとちょっと自信がありません。

現状だとcsvなどの書き込みについては、
MVTec\HALCON\examples\hdevelop\File\Text
OCR(Optical Character Reader)文字認識サンプルについては
MVTec\HALCON\examples\hdevelop\Applications\OCR
動画撮像に関してのサンプルについては
MVTec\HALCON\examples\hdevelop\Image\Framegrabber

あたりにサンプルがあるのですが、これもやはり5.0だとどうなっているか
不明です。

ある程度調べてわからなければ、代理店に質問するしかないと思います。
ただ、5.0はもうサポートしていない気がしますが。。

はっきりしたことがいえず申し訳ございません。

あと、気になる点として
6.0の時点では文字認識のオペレータがそんなに充実していなかった
気がしています。
性能も今のバージョン(9.0)より大分落ちるという印象があります。
研究の内容によると思いますが、いろいろ試したいことがあるのであれば
バージョンアップするのも一つの手だと思います。

ちゃんとお答えできず申し訳ありません。
がんばってください。



ログインすると、残り8件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

HALCON 更新情報

HALCONのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。