1

画像のしきい値処理を正常に行い、画像内のエッジを見つけることができます。私が苦労しているのは、黒いエッジの角度を正確に抽出しようとすることです。

現在、黒エッジの極値をとり、atan2 関数で角度を計算していますが、エイリアシングのため、選択したポイントによって角度に多少のばらつきが生じます。角度を計算するポイントを選択する信頼できるプログラム可能な方法はありますか?

画像例:

不安定なチェッカー ボード

たとえば、Gimp Measure ツールの角度は 3.12°、

Gimp測定ツール

4

4 に答える 4

0

あなたの問題には解決策がほとんどありませんが、すべてに非常に重要な問題が1つあり、それを無視しているようです。注: 画像内で幾何学的計算を行う場合は、使用する点が互いにできるだけ離れている必要があります。1 つの正方形内で 2 ポイントを獲得しています。これらの点は互いに非常に接近しているため、点のピクセル位置のわずかな誤差が角度の大きな誤差につながります。画像に多くの正方形があるのに、なぜ単一の正方形のみを使用するのですか? ここにいくつかの解決策があります:

  1. すべての正方形の線の角度を見つける. 画像には少なくとも 9 つの正方形があり、各正方形に 4 つの線があり、合計で 36 の角度が得られます (18 はおおよそ 3[度]、18 は ~93[度] になります)。90[度] を削除すると、角度の 36 の異なる測定値が得られます。それらを並べ替えて、中央の 30 個の平均をとります (下位 3 個と上位 3 個の測定値は無視します)。これにより、正確な結果が得られます
  2. 2 番目の解決策は、左端の正方形の左端と右端の正方形の右端を見つけます。次に、それらの間の角度を計算します。ポイントが離れているため、結果はより正確になります。
  3. ポイントを見つける必要がなく、しきい値を設定する必要がないため、正確な結果が得られる 3 番目のアルゴリズム。画像を滑らかにし、X 方向と Y 方向の勾配を(gx,gy)計算し、各ピクセルの勾配の角度を計算し、角度のatan(gy,gx)ヒストグラムを作成するだけです。3° と 93° 付近に 2 つの重要なピークがあります。ヒストグラムの最大値を検索してピークを見つけるだけです。これは、画像に多くのノイズがある場合でも、アンチエイリアスや jpg アーティファクトがある場合でも、画像に他の描画がある場合でも機能します。ただし、導関数を計算する前に、画像を大幅に平滑化する必要があることを忘れないでください。
于 2013-09-14T09:14:16.643 に答える
0

これをコーディングするためにどの C++ ライブラリを使用していますか?

Jerry の言うとおりです。実際に画像にしきい値を適用すると、2 ビットの黒または白になります。あなたが適用した可能性があるのは、代わりに一種のリミッターです。

使用している可能性のあるリミッターを適用してから、白以外のすべてのピクセルを黒にすることで、しきい値関数を作成できます (画像処理を自分でコーディングしている場合)。適切な設定があれば、正方形が分離され、角度を計算できるようになります。

これが完了すると、パス検索アルゴリズムを使用してエッジを見つけることができます。ほぼ直線的なパスが見つかった場合は、現在行っているように極値を使用して角度を決定できます。チェッカー ボードの回転は 90 度以内でのみ関連するため、角度はモジュロ 90 度または 2 ラジアンを超える pi である必要があります。

于 2013-09-13T13:43:41.003 に答える
0

それが(どこにでも)正しい答えであるかどうかはわかりませんが、私の即時の反応は、2回しきい値を設定することです。1回目は黒以外が白として扱われ、もう1回は白以外が黒として扱われます。

それぞれの角度を見つけて、2 つの角度の間を補間します。

于 2013-09-13T14:49:42.343 に答える