2017-01-31 53 views
-1

フーリエ変換を画像に適用しようとしていますが、これはフーリエスペクトルで水平および垂直方向に見えるノイズ成分を除去しようとした後に、リンクhttp://www.docs.opencv.org/2.4/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.htmlのコードに従います。 (http://www.imagemagick.org/Usage/fourier/twigs_spectrum.png) - スペクトル画像逆フーリエ変換後に画像を構築するopencv

スペクトルのノイズピクセルの位置をゼロにした後、元の画像がどのように変更されたかを確認したいだけです。 私はそれに逆DFTを適用し、画像も再構成しましたが、画像はヌル画像です。ここに私のコードです:

Mat magI_copy; 
magI.copyTo(magI_copy); 
//magI.convertTo(magI_copy, CV_8U); 
//imshow("image", magI_copy); waitKey(); 
for (int i = 0; i < 86; i++){ 
    for (int j = 127; j < 130;j++){ 
     magI_copy.at<float>(i, j) = 0; 
    } 
} 
for (int i = 171; i < magI_copy.rows; i++){ 
    for (int j = 127; j < 130; j++){ 
     magI_copy.at<float>(i, j) = 0; 
    } 
} 
for (int i = 126; i < 131; i++){ 
    for (int j = 0; j < 87; j++){ 
     magI_copy.at<float>(i, j) = 0; 
    } 
} 
for (int i = 126; i < 131; i++){ 
    for (int j = 170; j < magI_copy.cols; j++){ 
     magI_copy.at<float>(i, j) = 0; 
    } 
} 
///////////Inverse Transform 

cv::Mat inverseTransform; 
cv::dft(magI_copy, inverseTransform, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT); 
normalize(inverseTransform, inverseTransform, 0, 1, CV_MINMAX); 
Mat finalimage; 
inverseTransform.convertTo(finalimage, CV_8U); 
+0

私の質問はIDFTを適用した後どのように画像を再構成できますか – Bala

+0

0と1の間でデータを正規化するので、それらを0,255にスケーリングする必要があると思います: 'inverseTransform.convertTo(finalimage、CV_8U、 255)。 'リンクされた答えには正規化がないことに注意してください。 – Miki

答えて

-1

Inverse DFTはここに必要です。 Hereはあなたの質問に対する答えです。

+2

次回は、質問の正解がSOの別の場所にあることがわかります。 – Miki

+0

@Miki ok、ヒントを頂きありがとうございます。 –

関連する問題