ARToolKitにQRコードを探させてみた結果

| | コメント(6)
Clip to Evernote ARToolKitにQRコードを探させてみた結果
090812_ar01.jpg

今日の成果.あとは,選択された領域を切り取って,射影変換して,libdecodeqrに投げてみる.上手くいけば,上手くいくはず.ただ,残念なことに,QRコード同士が近すぎて誤認識が多いです.領域が正方形に近いかどうかというチェックも必要かしら?実際はこんなに詰まった状態では使わないから,無視でも良いかな?

コメント(6)

はじめまして。openCVとARtoolkitの勉強を始めたばかりの者です。
こちらの画像ではARtoolkitで検出したマーカーの座標をopenCVに渡して表示しているようですが、どのように座標変換して渡しているのでしょうか?
お答えいただけると幸いです。

件のマーカ検出はQRコードのポジション(四隅の三カ所にある四角いやつ)をマーカパターンとしてARToolKitに探させています.そのため,arGetTransMat()で入力画像からパターンを探し出して,その情報を返してきます.情報は第1引数のARMarkerInfo構造体で受け取ります.詳しくは以下のドキュメントを参照して下さい. http://artoolkit.sourceforge.net/apidoc/ar_8h.html#01eddf593ac98e4547e7131263e0d8c6 http://artoolkit.sourceforge.net/apidoc/structARMarkerInfo.html
で.ARMarlerInfo構造体内のpos[]とかvertex[][]に座標情報が入っているので,それを利用してOpenCV側で描写しています.
なので,ご質問の「どのように座標変換しているか」については「ARToolKitに押しつけている」といったところでしょうか.自前では特にそのようなコードは書いていません.参考になりますでしょうか?

お返事ありがとうございます。pos[]やvertex[][]はスクリーン座標で返してくれるのでそのまま使えるのですね。大変参考になりました。

昨日はありがとうございました。
こちらの画像ではQRコード上の3つのマーカー(?)を綺麗に検出して、QRコードの領域を抽出されていますが、マーカーの座標からどのようにQRコード全体の領域を抽出しているのでしょうか?
私も同じようなプログラムを作ってみようとcvConvexHull2ですべてのマーカーの頂点座標に対する凸包を描こうとやってみましたが、マーカーがすべて同じパターンのためか凸包が安定しませんでした。
たびたびの質問で恐縮なのですが差し支えなければで結構ですので、教えていただけないでしょうか?

cvConvexHull2()でもできるかと思いますが,私は検出されたQRコードの3ポジション座標を全部cvSeqPush()して,cvMinAreaRect2()で矩形選択させて,cvBoxPoints()で四隅の座標を取得する方法でやりました(現段階のソースコードはそうなっています.当時はどうだったか覚えていません).
複数のQRコードが存在する場合,各ポジションの距離を計算して,相互に近い3点で処理しないと,別のQRコードのポジションを含んでしまう可能性があります.
私の用途では紙面(QRコード面)に対してほぼ水平で利用する想定だったので,この程度でもきれいに領域抽出できました.

cvMinAreaRect2()とcvBoxPoints()だと便利そうですね。それに加え、cvSeqPush()の数を増やしたら少し安定してきました。これから自分なりに工夫して作っていこうと思います。
過去の記事のコメントにもかかわらず丁寧にお返事していただき、本当にありがとうございました。とても参考になりました。

プロフィール

e-m@il @ddress