我想使用opencv的DFT执行一些去噪操作,方法是执行前向傅里叶执行某些操作并执行反傅立叶。但我开始注意到,在某些情况下,噪音无处不在。所以我测试了向前向后没有任何操作,我没有正确恢复原始信号,有谁知道为什么?我的所有零都应保持为零或至少非常低的值,这里我的结果是-5 -6的幂,这不是那么好。即使我使用CV_64F,结果也不是更好。在MATLAB中,这个相同的操作给了我正确的结果。
这是我的输入图像的特写
这是输出的特写
这是我使用的代码:
void func(cv::Mat &I,cv::Mat &G){
const int n1=G.rows;
const int m1=G.cols;
const int nl = static_cast<int>(n1/2);
const int ml = static_cast<int>(m1/2);
const int n = I.rows + 2*nl;
const int m = I.cols + 2*ml; // on the border add zero values
cv::Mat paddedI;
cv::Mat planesI[] = {cv::Mat_<float>(paddedI), cv::Mat::zeros(paddedI.size(), CV_32F)};
merge(planesI, 2, paddedI); // Add to the expanded another plane with zeros
cv::dft(paddedI, paddedI, cv::DFT_COMPLEX_OUTPUT);
cv::dft(paddedI, paddedI, cv::DFT_INVERSE | cv::DFT_SCALE);//I could just output the real part
split(paddedI, planesI);
planesI[0].rowRange(nl,nl+I.rows+1).colRange(ml,ml+I.cols+1).copyTo(I);
}