8

私は画像処理とロボット工学のセルフプロジェクトに取り組んでおり、代わりにロボットが通常のように色を検出してオブジェクトを選び出し、ボード上の穴 (異なるポリゴンに似ている) を検出しようとします。セットアップをよりよく理解するために、次の画像をご覧ください。 ここに画像の説明を入力

ご覧のとおり、これらの穴を検出し、その形状を調べてから、ロボットを使用してオブジェクトを穴にはめ込む必要があります。深度画像を取得するためにkinect深度カメラを使用しています。写真を以下に示します。

ここに画像の説明を入力

カメラで穴を検出する方法を考えていませんでした。最初はマスキングを使用して、深度測定に基づいて背景部分と前景部分の一部を削除しましたが、これはうまくいきませんでした。穴はボードと合体します...範囲内のようなものです(完全に白くなります)。adaptiveThresholdそれから私は機能に出くわしました

adaptiveThreshold(depth1,depth3,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,7,-1.0);

浸食、膨張、およびガウスぼかしを使用したノイズ除去。下の写真に示すように、より良い方法で穴を検出しました。次に、cvCanny エッジ検出器を使用してエッジを取得しましたが、これまでのところ、下の図に示すようにうまくいきませんでした。その後、SIFT、SURF、ORB、GoodFeaturesToTrack からさまざまな機能検出器を試したところ、ORB が最高であることがわかりました。時間と検出された機能。この後、クエリ画像の相対的なカメラ ポーズを取得しようとしました。そのキーポイントを見つけ、それらのキーポイントを一致させて、findHomography関数に適切な一致を与えるようにしました。結果は、図のように次のようになります。

ここに画像の説明を入力

最後に、2 つの画像間の相対的なカメラ ポーズを取得し、solvePnP 関数から取得した回転および並進ベクトルを使用してロボットをその位置に移動します。

キーポイントの検出とマッチングのために検出された穴の品質を改善できる他の方法はありますか?

輪郭検出と approxPolyDP も試しましたが、近似形状はあまり良くありません。

ここに画像の説明を入力

しきい値とキャニー関数の入力パラメーターを微調整しようとしましたが、これは私が得ることができる最高のものです

また、カメラのポーズを正しくするための私のアプローチは正しいですか?

更新: 何を試しても、再現性のある優れた機能をマップすることができませんでした。次に、深度画像は解像度が低く、マスキングや距離の取得などにのみ使用されることをオンラインで読みました。そのため、エッジが乱雑な低解像度の画像のために、機能が適切ではないことがわかりました。そこで、RGB 画像の特徴を検出し、深度画像を使用してそれらの特徴の距離のみを取得することを考えました。私が得た機能の品質は、文字通りチャートから外れていました.ボード上のネジも検出しました!! GoodFeaturesToTrack キーポイント検出を使用して検出されたキーポイントは次のとおりです。GoodFeaturesToTrack を使用したキーポイント. ポイントの距離がうまく出ず、距離をとっていくうちにまたハードルにぶつかりました。考えられる原因を検索したところ、カメラ間のオフセットが原因で、RGB 画像と深度画像にオフセットがあることがしばらくしてわかりました。これは、最初の 2 つの画像から確認できます。次に、このオフセットを補正する方法についてネットを検索しましたが、有効な解決策が見つかりませんでした。

あなたの誰かがオフセットを補うのを手伝ってくれるなら、それは素晴らしいことです!

更新: goodFeaturesToTrack 関数をうまく利用できませんでした。この関数は、Point2f タイプのコーナーを提供します。記述子を計算する場合は、キーポイントが必要です。以下のコード スニペットを使用して Point2f を Keypoint に変換すると、スケールと回転の不変性が失われます。

for( size_t i = 0; i < corners1.size(); i++ )
{
keypoints_1.push_back(KeyPoint(corners1[i], 1.f));
}

特徴マッチングの恐ろしい結果を以下に示します不変性の喪失

今すぐさまざまな機能のマッチングを開始する必要があります。さらに更新を投稿します。誰かがオフセットの問題を取り除くのを手伝ってくれると本当に助かります.

4

2 に答える 2

0

画像出力とワールド座標の差を補正する:

カメラの応答をキャリブレーションし、場合によってはカメラ出力の補正マトリックスを生成するために、古き良きカメラキャリブレーションアプローチを使用する必要があります(それらを実際のスケールに変換するため)。

チェッカーボードのテンプレートを印刷してさまざまなショットをキャプチャすれば、それほど複雑ではありません。(このアプリケーションでは、回転の不変性について心配する必要はありません。画像配列でワールド ビューを調整するだけです。)

詳細については、 http : //www.vision.caltech.edu/bouguetj/calib_doc/htmls/own_calib.html をご覧ください。

--

質問にコメントできないようですので、特定のアプリケーションでマシンがその場で穴の形状を「見つける」必要があるかどうかを尋ねたいと思います. 穴の形状の数が限られている場合は、それらを数学的にモデル化し、B/W エッジ イメージで定義済みのモデルをサポートするピクセルを探すことができます。

半径 r の円の (x)^2+(y)^2-r^2=0 のように、x と y はピクセル座標です。

そうは言っても、アプリケーションの要件(形状検出)に関しては、より明確にする必要があると思います。

于 2014-07-26T23:54:57.530 に答える