OpenCV 笔记(28):图像降噪算法——中值滤波、高斯滤波

1.  图像噪声

图像降噪(Image Denoising)是指从图像中去除噪声的过程,目的是提高图像质量,增强图像的视觉效果。

图像噪声是指图像中不希望出现的随机亮度或颜色变化,通常会降低图像的清晰度和可辨识度,以及会降低图像的质量并使图像分析和理解更加困难。

图像噪声主要有以下几个原因来产生的:

  • 光线不足:光线不足会导致光子噪声增加,从而降低图像的信噪比。

  • 电子元器件的热噪声:电子元器件在工作时会产生热噪声,这种噪声会影响图像的质量。

  • 电路噪声:电路中的电磁干扰也会导致图像噪声的产生。

  • 图像传输过程中的错误:图像在传输过程中可能会受到各种干扰,从而导致图像噪声的产生。

根据噪声的统计特性来分类,可以将图像噪声分为以下几类:

  • 椒盐噪声:图像中随机出现黑白像素的噪声。

  • 高斯噪声:最常见的噪声类型,其概率密度函数服从高斯分布。

  • 泊松噪声:光子噪声的一种类型,其概率密度函数服从泊松分布。

  • 斑点噪声:由图像传感器坏点或污点引起的噪声。

下面的例子,分别展示了在图像中添加椒盐噪声、高斯噪声、泊松噪声和斑点噪声。

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <random>

using namespace std;
using namespace cv;

void addSaltNoise(Mat &src, int num, Mat &dst)
{
    dst = src.clone();

    // 随机数产生器
    std::random_device rd; //种子
    std::mt19937 gen(rd()); // 随机数引擎

    auto rows = src.rows; // 行数
    auto cols = src.cols * src.channels();

    for (int i = 0; i < num; i++)
    {
        auto row = static_cast<int>(gen() % rows);
        auto col = static_cast<int>(gen() % cols);

        auto p = dst.ptr<uchar>(row);
        p[col++] = 255;
        p[col++] = 255;
        p[col] = 255;
    }
}

void a

猜你喜欢

转载自blog.csdn.net/SLFq6OF5O7aH/article/details/137252678