应用逆傅立叶变换opencv后构造图像

时间:2017-01-31 14:59:02

标签: c++ opencv fft mat ifft

我正在尝试通过跟踪链接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) - 光谱图像

现在,在将频谱中的噪声像素位置归零后,我只想看看原始图像现在是如何改变的。 我已经对它应用了逆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); 

1 个答案:

答案 0 :(得分:-1)

Inverse DFT就是你需要的。 Here是您问题的答案。