应用逆傅立叶变换opencv后构建图像[重复]

Posted

技术标签:

【中文标题】应用逆傅立叶变换opencv后构建图像[重复]【英文标题】:constructing image after applying inverse fourier transform opencv [duplicate] 【发布时间】:2017-01-31 14:59:01 【问题描述】:

我正在尝试通过遵循链接 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); 

【问题讨论】:

@Miki 我的问题是应用 IDFT 后,如何重建图像 由于您正在对 0 和 1 之间的数据进行标准化,我想您需要将它们缩放到 0,255:inverseTransform.convertTo(finalimage, CV_8U, 255); 请注意,在链接的答案中没有标准化。 【参考方案1】:

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

【讨论】:

下次您发现问题的正确答案在 SO 上的其他地方时,请标记为重复,而不是用链接写答案 @Miki 好的,谢谢你的提示。

以上是关于应用逆傅立叶变换opencv后构建图像[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检测图像中的莫尔条纹 - iOS Swift

图像中的傅立叶变换

OpenCV 完整例程68. 连续周期信号的傅立叶级数

matlab或mathematica怎样实现对离散点的傅立叶变换和逆变换

Matlab信号处理基础

python 图像的离散傅立叶变换