• opencv c++ 图像噪声及去噪


    1、噪声类型及生成

    1.1、类型

    高斯噪声椒盐噪声、泊松噪声、乘性噪声,等。

    具体解释参考:(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声

    高斯噪声                                                        泊松噪声

    乘性噪声                                                       椒盐噪声

     

     原图

    1.2、来源

    图像获取过程中

    两种常用类型的图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声。

    图像信号传输过程中

    由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的对象并不如预想时也会在结果图像中引入噪声。

    生成椒盐噪声:

    1. void QuickDemo::noise_img(Mat& image)
    2. {
    3. Mat img;
    4. image.copyTo(img);
    5. //产生椒盐噪声
    6. RNG rng(12345);
    7. int h = img.rows;//行数
    8. int w = img.cols;//列数
    9. int nums = 10000;//噪点个数定义
    10. //通过循环随机在图像上任意点生加上黑白噪声(生成概率相同)
    11. for (auto i = 0; i < nums; ++i) {
    12. //图像随机点坐标生成
    13. int x = rng.uniform(0, w);
    14. int y = rng.uniform(0, h);
    15. if (i % 2 == 1) {
    16. img.at(y, x) = Vec3b(255, 255, 255);
    17. }
    18. else
    19. img.at(y, x) = Vec3b(0, 0, 0);
    20. }
    21. namedWindow("椒盐噪声", WINDOW_FREERATIO);
    22. imshow("椒盐噪声", img);
    23. }

    生成高斯噪声:

    利用现有API

    randn(inputMat, 与输入图像相同维度的均值,与输入图像相同维度的方差);

    inputMat——在生成噪声图像时的输入矩阵为与原始图像大小类型均相同空矩阵

    1. void QuickDemo::noise_img(Mat& image)
    2. {
    3. //产生高斯噪声
    4. Mat noise = Mat::zeros(image.size(), image.type());
    5. randn(noise, (25, 25, 25), (30, 30, 30));//生成噪声图像
    6. Mat dst;
    7. add(noise, image, dst);
    8. namedWindow("高斯噪声", WINDOW_FREERATIO);
    9. imshow("高斯噪声", dst);
    10. }

    参考:(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声

    2、去除噪声

    2.1、中值滤波

    将异常像素点取其周围一层或多层像素点,进行排列,将排列后的中值取代异常像素点值

    常用于去除椒盐噪声(因为椒盐噪声是在图像上均匀随机产生的极限像素点值),但当异常点占原图大部分时就会无效果。

    opencvAPI

    mediaBlur(input ,output , kernelSize);

    kernelSize——卷积核大小,int型;

    代码:

    1. Mat dst;
    2. medianBlur(img, dst, 5);
    3. namedWindow("中值滤波", WINDOW_FREERATIO);
    4. imshow("中值滤波", dst);

    2.2、高斯滤波

    顾名思义,对高斯噪声效果较好

    1. GaussianBlur(dst2, dst, Size(5, 5), 0);
    2. namedWindow("高斯滤波", WINDOW_FREERATIO);
    3. imshow("高斯滤波", dst);

     2.3、边缘保留滤波(EPF)

    a)高斯双边滤波

     

     API

    d——双边模糊近邻选用像素点半径,和sigmaSpace一起控制卷积核大小,如果为0,则只由sigmaSpace制卷积核大小。

     sigmaColor——双边模糊颜色阈值,像素值大于该值的像素点将被处理。

    sigmaSpace——双边模糊空间阈值,控制卷积核大小。

    bilateralFilter(img, dst, 0, 100, 10);

    b)非局部均值滤波

    对像素点进行处理时,对周围像素点赋予权值,像素值相近的周边点赋予较高权值,像素值差距大的赋予较低权值。

     API

     官网OpenCV: Denoising

  • 相关阅读:
    骨传导耳机的利与弊有哪些?骨传导耳机到底好不好?
    前后端分离(SpringBoot)
    移动app测试的7个关键点,建议收藏
    速码!!BGP最全学习笔记:路由反射器实验配置
    C++ 指针
    【算法题】从数量最多的堆取走礼物
    轻地图+数据闭环加速落地,觉非科技获多家头部车企定点
    php://filter协议在任意文件读取漏洞(附例题)
    LoadRunner场景介绍
    CRM客户关系管理系统开发源码小程序
  • 原文地址:https://blog.csdn.net/lucust/article/details/128131071