5

ですから、私がしなければならないのは、普通のユーザーが撮った画像から足の長さを測定することです。その画像には、黒い靴下を履いた足、コイン(または他の既知のサイズのオブジェクト)、および他の2つのオブジェクトが置かれる白い紙(A4など)が含まれます。私はすでに何を持っていますか?-私はすでにopencvを使用していましたが、単純なプロジェクトです。-私はすでにカメラキャリブレーション( 「LearnOpenCv」 )に関するいくつかの記事を読み始めましたが、それでも私がここまで行かなければならないかどうかわかりません。

私が今必要としているのは、この問題を解決するための正しい方法に従っているかどうかがまだわからないため、オリエンテーションです。いくつか質問があります。2つまたは3つの足の測定値を取得するために、カメラを実際に調整する必要がありますか?線を測定するために関心のあるポイントを見つけるにはどうすればよいですか?各画像は異なる画像であるか、従うべきテクニックがありますか?

追伸:私の英語について申し訳ありませんが、私は本当にそれを改善する必要があります:-/

4

4 に答える 4

4

まず、いくつかの画像取得のこと:

  1. 黒の靴下と白の背景を頼りにできますか?色は靴下と背景のコントラストの高さほど重要ではありません。
  2. 視角を標準化できますか?足を真下に見下ろすと、遠近法の歪みが減少します。
  3. シーンの照明を標準化できますか?これにより、以下で説明する処理の多くが容易になります。
  4. 最後に、足が画像フレームのより多くの部分を占めるようにズーム(またはカメラを近づける)すると、より適切な見積もりが得られます。

分析。(この説明は、足の軸を特定するという質問に向けられていることに注意してください。コインの特定と分析は同様のプロセスを使用しますが、いくつかの違いが生じます。)

  1. 次のタスクは、関心領域(ROI)を分離することです。カメラが足を見下ろしている場合、ROIは白い長方形に制限できます。このStackOverflowの投稿に対する私の答えは、正方形/長方形の識別の良いスタートです。画像内の長方形を検出するための最も簡単な*正しい*方法は何ですか?
  2. 足が完全に白い長方形にある場合は、手順1で見つけた長方形に画像をクリップできます。これにより、画像分析がホワイトペーパー内の領域に制限されます。
  3. しきい値関数を使用して画像を「2値化」します:http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-threshold。しきい値パラメータを適切に選択すると、画像を黒の領域(靴下のピクセル)と白の領域(靴下以外のピクセル)に縮小できるはずです。
  4. これで楽しみが始まります。輪郭を一致させてみるかもしれませんが、これが私の問題である場合は、バウンディングボックスを使用してすばやく解決するか、瞬間を使用してより興味深い(場合によっては堅牢な)解決策を作成します。
  5. cvFindContoursを使用して、黒い(靴下)領域の輪郭を見つけます:http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#findcontours
  6. cvUsingPolyを使用して、輪郭を多角形に変換します http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#approxpoly
  7. 簡単な解決策として、cvMinRect2を使用して、靴下の形状の任意の方向のバウンディングボックスを見つけます。ボックスの短軸はlargura.jpgの線に対応し、ボックスの長軸はcomprimento.jpgの線に対応する必要があります。 http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#minarearect2
  8. より高い(可能な)精度が必要な場合は、cvMomentsを試して形状のモーメントを計算することができます。http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#moments
  9. cvGetSpatialMomentを使用して、足の軸を決定します。空間モーメントの詳細については、http://en.wikipedia.org/wiki/Image_moments#Examples_2およびhttp://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#getspatialmomentを参照してください。
  10. 軸がわかったら、長軸が軸に揃えられるように(つまり垂直になるように)画像を回転させることができます。次に、ピクセルを水平方向と垂直方向に数えるだけで、線の長さを取得できます。このモーメント指向のプロセスにはいくつかの仮定があることに注意してください。これは楽しい解決策ですが、それ以上の精度が得られない可能性があります。特に、サイズ測定の精度は、上記のカメラのポジショニングの問題に大きく依存しているためです。

最後に、古いCインターフェースへのリンクを提供しました。あなたは新しいC++インターフェースを見るかもしれません(私は単に私のコードを2.4に移行することに慣れていません)

于 2012-07-10T19:02:43.367 に答える
3

アントニオ・クリミニシは、おそらく何年も前にこの主題に関する最後の言葉を書いたでしょう。彼の「SingleViewMetrology」論文と、時間があれば彼の博士論文を参照してください。

于 2012-07-10T11:51:24.973 に答える
0

画像に既知のサイズのオブジェクトがある場合は、カメラを調整する必要はありません。ええと...少なくとも、カメラがあまり歪んでおらず、高品質の測定を期待していない場合は。

簡単なアプローチは、白い(パースペクティブが歪んだ)長方形を検出し、角を歪んでいない長方形にマッピングし(たとえば、cv :: warpPerspective()を使用)、その長方形の既知のサイズを使用して、写真。ただし、これは紙と同じ平面内のオブジェクトに対してのみ機能します。できれば、紙から離れすぎないようにしてください。

于 2012-07-09T16:05:09.603 に答える
0

これを自分で作成する必要があるかどうかはわかりませんが、コーディングするのではなく、作成する必要があるだけなのかどうかはわかりません。これには、 KLONK画像測定を使用できます。無料と有料のバージョンがあります。

于 2013-09-03T20:49:42.917 に答える