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

@Miki我的问题是应用IDFT后,我该如何重建图像 – Bala

+0

由于你正在规范0和1之间的数据,我想你需要将它们缩放到0,255:inverseTransform.convertTo(finalimage,CV_8U, 255); '请注意,在链接的答案没有规范化,但。 – Miki

回答

-1

Inverse DFT是你需要在这里。 Here是你的问题的答案。

+2

下一次你发现问题的正确答案是在其他地方,请标记为重复,而不是写一个链接回答 – Miki

+0

@Miki好的,谢谢你的提示。 –