我试图删除' 5行'在部分,在音乐论文中,我的原始图像是:http://en.wikipedia.org/wiki/Requiem_(Mozart)#/media/File:K626_Requiem_Mozart.jpg
首先,我应用高斯滤波器并用阈值二进制化(最小值:100,最大值255)。 然后将dft应用于此图像,擦除一些合适的线条,并通过反向dft重建图像。
我在opencv文档中使用示例代码,实际上我怀疑自己是否理解这段代码。 :( http://docs.opencv.org/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html
在这个示例代码中,有2个Mats。一个是复杂的'对于频谱,另一个是“魔术师”。实际可视化。 cv :: dft的结果是complexI,magI是归一化的complexI。我的问题是这个。如何添加黑线(在频率域中取消)并重建?
答案 0 :(得分:1)
OpenCV(现在)提供了有关如何通过频谱过滤处理周期性噪声的详细教程:https://docs.opencv.org/trunk/d2/d0b/tutorial_periodic_noise_removing_filter.html
取决于使用cv::dft()
,cv::idft()
,cv::mulSpectrums()
和cv::magnitude()
。
(来自教程的)执行过滤的核心功能如下:
void filter2DFreq(const Mat& inputImg, Mat& outputImg, const Mat& H)
{
Mat planes[2] = { Mat_<float>(inputImg.clone()), Mat::zeros(inputImg.size(), CV_32F) };
Mat complexI;
merge(planes, 2, complexI);
// find FT of image
dft(complexI, complexI, DFT_SCALE);
Mat planesH[2] = { Mat_<float>(H.clone()), Mat::zeros(H.size(), CV_32F) };
Mat complexH;
merge(planesH, 2, complexH);
Mat complexIH;
// apply spectral filter
mulSpectrums(complexI, complexH, complexIH, 0);
// reconstruct the filtered image
idft(complexIH, complexIH);
split(complexIH, planes);
outputImg = planes[0];
}
有关详细信息,请参阅本教程。