2016-05-26 40 views
0

画像処理アプリケーションを継承しました。ここで物事を考えようとしています。私には3つの質問があります。 1)F2C、C2C、C2Fの順番は正しいですか? 2)C2Cを一方向に1回実行する必要がありますか? 3)どちらの方向を使うべきですか(前進か後ろ向き)?カフス画像処理

背景:

入力と出力は2D画像です。

まず、R2CはカフF2C(棚からの剪刀)を使用して行われます。 次にC2Cが行われます。これは元の開発者によって手作業でコード化さ 最後に、C2RはcufftC2F(棚からのぬいぐるみ)を使用して行われます。

結果は見苦しいジグザグの線が表示されます。元の開発者は1D計画(nx = xとバッチ= y)を使用しました。私はこれらを2D計画(nx = xとny = y)に置き換えたいと考えています。私はまた、自宅のC2Cを棚cufftC2Cのcudaに置き換えたいと思っています。

+3

[CUFFT]にはF2CもC2Fもありません(http://docs.nvidia.com/cuda/cufft/index。html#abstract)。おそらくR2CとC2Rを意味します。本当に良い答えは、(IMO)は本当に長い答え、主にフーリエ変換のチュートリアルが必要です。それはかなり広い質問として私を襲う。フーリエ変換、その動作、使用方法(CUDAとは完全に独立したトピック)があれば、どのような知識があるのか​​ははっきりしません。 –

答えて

1

1)正しいシーケンス[R2C]、C2C、[C2R]はありますか? いいえ、フーリエ変換には空間と周波数という2つのドメインがあります。変換は、CUFFT_FORWARDで空間から周波数に、CUFFT_INVERSEで周波数と空間になります。

2)C2Cを一方向に1回実行する必要がありますか? エルミートの対称性の使用法によっては、必ずしもC2C(下記参照)は必要ありません。

3)どちらの方向を使用するべきですか(前方または後方)? 画像処理フィルタを適用する場合、出力は入力と同じ空間にある可能性が高いため、1つの順変換と1つの逆変換として適用する必要があります。

データレイアウト上の注意事項とR2C/C2R最適化

従って単にベクトルの最初の半分を格納する、C2R又はR2C変換、周波数空間ベクトルのcufftis making use of the Hermitian symmetryを用いて(残りの部分ではありませんでも触れた):実数 - 複素数(R2C)と複素数から実数(C2R):

別に一般の複素数 - 複素数(C2C)変換から、CUFFTを効率的に他の二つのタイプを実装しています。多くの実際の応用では、入力ベクトルは実数値である。この場合、出力がエルミート対称性(X k = X N -k *、ここで星は複素共役を表す)を満たすことは容易に示される。逆もまた真です:複素エルミート入力の場合、逆変換は純粋に実数値です。 cuFFTはこの冗長性を利用し、エルミート・ベクトルの前半でのみ機能します。

あなたは周波数領域で実行されている操作は同じエルミート対称性を持たない場合、最適化はもはや真実ではない、とC2R操作はあなたに期待される結果を提供しないであろう。

また、C2Cの場合とは少し異なるアプローチのデータ要件とレイアウトにも注意してください。