C++维纳滤波
时间: 2023-07-11 15:11:36 浏览: 103
C++中的维纳滤波可以通过使用OpenCV库来实现。维纳滤波是一种空域滤波方法,用于减少图像中噪声的影响并增强图像的细节。
以下是一个使用OpenCV库实现维纳滤波的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("input.jpg", IMREAD_GRAYSCALE);
// 添加高斯噪声
Mat noise = Mat::zeros(image.size(), CV_32F);
randn(noise, 0, 50);
image.convertTo(image, CV_32F);
image += noise;
// 维纳滤波
Mat result;
double snr = 10.0; // 信噪比
double sig = sqrt(norm(image) / (image.rows * image.cols * pow(10, snr / 10.0)));
double psf_size = 5.0; // PSF大小
Mat psf = getGaussianKernel(psf_size, sig, CV_32F) * getGaussianKernel(psf_size, sig, CV_32F).t();
psf /= sum(psf)[0];
filter2D(image, result, -1, psf);
// 显示结果
result.convertTo(result, CV_8U);
imshow("Input", imread("input.jpg"));
imshow("Noisy", image);
imshow("Denoised", result);
waitKey(0);
return 0;
}
```
这段代码首先加载一张灰度图像,并添加高斯噪声。然后,根据信噪比和PSF大小计算出维纳滤波器,并使用`filter2D`函数将其应用于图像。最后,显示原始图像、带噪声的图像和去噪后的图像。
阅读全文