4

直線のイメージがあります。周波数領域を使用して線が平行かどうかを確認したい。画像に対して fft を実行していると、変換画像が得られます。

線が平行かどうかを調べるために変換イメージを使用する方法を知っている人はいますか?

4

3 に答える 3

5

したがって、ここでは、ランダムな角度または同じ角度のいずれかを使用して、可変長の 2 つの線とそれらの絶対値 fft の 2 つのケースを示します。 サンプル画像

そのため、fft を見ることでそれらが平行かどうかを判断できる方法はたくさんあります。簡単な方向の 1 つでヒントを与えます。fft された画像の中心から始めます...

于 2013-01-13T06:20:13.923 に答える
4

FFT よりも 2 行しかない場合は、悪い考えです。遅くて複雑です。

最も簡単な実装は、画像を滑らかにすることです。勾配の角度(atan2(gradY,gradX))を計算し、ヒストグラムに入れるだけではありません。明確なピークが 1 つある場合、線は平行です。そうでなければ、そうではありません。ヒストグラムから、各線の角度もわかります (極大値は線を表します)。

最速の実行時間は、接続されたコンポーネント スタイルを使用することです。

  1. 白いピクセルが見つかるまで、黒いイメージをループで検索します。これは線の始まりです
  2. 最も遠いピクセルが見つかるまで、隣接するピクセルを再帰的にトラバースします。これが行の終わりです
  3. 始点と終点が分かれば、各線の傾きを で計算できますatan2(endY-startY,endX-startX)。次に、線を分析的に比較します。傾きの差が 0.1 ラジアン (5 度) を超える場合、直線は平行とは見なされません。このソリューションは、任意の量の行に対して機能し、各行のすべてのピクセルのリスト + AX + BY + C = 0 としての行の数式も提供します。

それでも FFT に固執する場合元の画像またはFFT画像を回転させて、少なくとも1本の線がY軸に平行になるようにすることをお勧めします(FFTの表現はX軸にあります)。2 番目の線が平行かどうかを確認するのは簡単です。それらが平行である場合、それらは両方とも y 軸に整列しており、FFT 変換全体が X 軸上にあることを意味します。中央のいくつかの行より上のFFTのすべてのピクセルがゼロであることを確認してください。そうでない場合は、最初の線が FFT 画像の X 軸上にあり、2 番目の線が上下に移動するため、線が平行でないことを意味します。Ps 画像を回転する方法を説明しなかったため、少なくとも 1 つの線が Y 軸に一致します。元の画像でそれを行う場合は、グラデーションの方向(角度)を計算し、最大値を見つけて、画像を(マイナス最大値(度))だけ回転させます。FFT 画像でも同じことができます。

重要な注意: あなたの質問には、他の人から多くの不正確な回答がありました。ここにいくつかの修正があります

  1. ハフまたはラドン変換を使用しないでください。これは比較的遅く、わずか 2 行の簡単な作業には完全にやり過ぎです。
  2. FFT を使用すると、実際に線の位置を知ることができます。今まではFFTの振幅画像を使っていましたが、位相画像もあり、線の位置は位相画像にエンコードされています。

結論として、最速の実行時間として示したソリューションを実装することをお勧めします。画像に N 個のピクセルがある場合O(N)、FFT のみが少なくともO(N*log(N))ステップを実行しますが、平均ステップで実行します。

于 2013-01-13T13:40:25.023 に答える
1

多くの等間隔の平行線の周期性を決定することに興味がある場合は、FFTを使用しても問題ありません。この場合、FFT変換された画像は特定の周波数のピークを与えるはずです。しきい値処理により、画像内のこれらの線を取り除くこともできます。ただし、実際には画像のどこに線があるかはわかりません。

平行線を見つけるには、次のような他の手法を使用できます。

于 2013-01-12T15:57:42.427 に答える