gpt4 book ai didi

opencv - 如何在opencv中去除正弦噪声w\频域

转载 作者:行者123 更新时间:2023-12-02 17:48:22 25 4
gpt4 key购买 nike

我正在尝试删除部分中的“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 个垫子。一个是频谱的“complexI”,另一个是实际可视化的“magI”。 cv::dft 的结果是 complexI,magI 是归一化的 complexI。我的问题是这个。我如何添加一条黑线(在频率域中取消)并重建?

最佳答案

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];
}

有关详细信息,请参阅教程。

关于opencv - 如何在opencv中去除正弦噪声w\频域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com