图像降噪算法——图像噪声模型

2023-05-16

图像降噪算法——图像噪声模型

  • 图像降噪算法——图像噪声模型
    • 1. 图像噪声建模
    • 2. C++代码实现
    • 3. 结论

图像降噪算法——图像噪声模型

1. 图像噪声建模

首先,我们要区分图像传感器噪声图像噪声,图像传感器噪声我在博客图像传感器与信号处理——详解图像传感器噪声中有过总结,图像传感器噪声会造成各种各样的图像噪声。

其次,我们需要了解图像降噪模型,图像降噪模型可以建模为: y = x + n y=x+n y=x+n其中, y y y是观察到的噪声图像, x x x是图像真值, n n n是图像噪声,图像降噪过程就是通过 y y y获取 x x x,在许多论文中将这个过程描述为不可逆过程,这也就是为什么图像降噪难。本博客就是对图像噪声 n n n进行建模:

《数字图像处理》一书中对噪声建模主要有一下几种类型:

(1)高斯噪声
高斯噪声是最常见也是最重要的的一种噪声,众多的图像降噪算法都是以降低高斯噪声为目标设计的,其概率密度函数如下所示: p ( z ) = 1 2 π σ 2 e − ( z − μ ) 2 / 2 σ 2 p(z)=\frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-(z-\mu)^{2}} /_{2 \sigma^{2}} p(z)=2πσ2 1e(zμ)2/2σ2其中, σ \sigma σ是标准偏差, μ \mu μ是灰度值的平均值,这个公式说明的是灰度值为 z z z的概率为多少。

(2)瑞利噪声
瑞丽噪声的概率密度函数如下所示: p ( z ) = { 2 b ( z − a ) e − ( z − a ) 2 / b , z ⩾ a 0 , z < a p(z)=\left\{\begin{array}{ll} \frac{2}{b}(z-a) \mathrm{e}^{-(z-a)^{2} / b}, & z \geqslant a \\ 0, & z<a \end{array}\right. p(z)={b2(za)e(za)2/b,0,zaz<a概率密度的均值和方法分别为: z ˉ = a + π b / 4 \bar{z}=a+\sqrt{\pi b / 4} zˉ=a+πb/4 σ 2 = b ( 4 − π ) 4 \sigma^{2}=\frac{b(4-\pi)}{4} σ2=4b(4π)瑞利噪声对于图像直方图近似倾斜的图像中的噪声建模较为有效。

(3)伽马噪声
伽马噪声的概率密度函数如下所示: p ( z ) = { a b z b − 1 ( b − 1 ) ! e − a z , z ⩾ a 0 , z < a p(z)=\left\{\begin{array}{cl} \frac{a^{b} z^{b-1}}{(b-1) !} \mathrm{e}^{-a z}, & z \geqslant a \\ 0, & z<a \end{array}\right. p(z)={(b1)!abzb1eaz,0,zaz<a其中均值和方差分别为 z ˉ = b a \bar{z}=\frac{b}{a} zˉ=ab σ 2 = b a 2 \sigma^{2}=\frac{b}{a^{2}} σ2=a2b伽马噪声相对瑞利噪声分布会更加倾斜

(4)指数噪声
指数噪声的概率密度函数如下所示: p ( z ) = { a e − a z , z ⩾ 0 0 , z < 0 p(z)=\left\{\begin{array}{ll} a \mathrm{e}^{-a z}, & z \geqslant 0 \\ 0, & z<0 \end{array}\right. p(z)={aeaz,0,z0z<0其概率密度函数的均值和方差分别为 z ˉ = 1 a \bar{z}=\frac{1}{a} zˉ=a1 σ 2 = 1 a 2 \sigma^{2}=\frac{1}{a^{2}} σ2=a21指数噪声分布相对伽马噪声又会进一步倾斜

(5)量化噪声
量化噪声又称均匀噪声,此类噪声是由于将模拟数据转换为数字数据而引起的,因此是幅度量化过程中固有的,其概率密度函数如下: p ( z ) = { 1 b − a , a ⩽ z ⩽ b 0 o t h e r w i s e p(z)=\left\{\begin{array}{ll} \frac{1}{b-a}, & a \leqslant z \leqslant b \\ 0 & otherwise \end{array}\right. p(z)={ba1,0azbotherwise
(6)椒盐噪声
椒盐噪声又称脉冲噪声、尖峰噪声,在图像上表现为随机分布的黑白点,其概率密度函数如下图所示:
p ( z ) = { P a , z = a P b , z = b 1 − P a − P b , o t h e r w i s e p(z)=\left\{\begin{array}{ll} P_{a}, & z=a \\ P_{b}, & z=b \\ 1-P_{a}-P_{b}, & otherwise \end{array}\right. p(z)=Pa,Pb,1PaPb,z=az=botherwise椒盐噪声可以通过中值滤波器进行消除。

以上即《数字图像处理》中对各个图像噪声的建模,对于的概率密度函数的不同,书中给出了这样一张图予以区分:在这里插入图片描述
那么除了《数字图像处理》中提到的几种图像噪声模型外,一般还有如下几种模型:

(7)泊松噪声
泊松噪声又称散粒噪声,我们知道,光源每秒发射的光子到达CMOS的越多,则该像素的灰度值越大。但是因为光源发射和CMOS接收之间都有可能存在一些因素导致某个光子并没有被CMOS接收到或者某个像素一时间段内发射的光子特别多,所以这就导致了灰度值的波动,也就产生了泊松噪声,方程描述为: p [ ( N ( t + τ ) − N ( t ) ) = k ] = e − λ τ ( λ τ ) k k ! k = 0 , 1 , … p[(N(t+\tau)-N(t))=k]=\frac{e^{-\lambda \tau}(\lambda \tau)^{k}}{k !} \quad k=0,1, \dots p[(N(t+τ)N(t))=k]=k!eλτ(λτ)kk=0,1,这个公式说明的是某个像素在间隔时间 τ \tau τ内接收到 k k k个光子的概率为多少。

(8)斑点噪声
在相干成像系统(如雷达,激光和声学等)中可以看到斑点噪声的出现,其概率密度函数如下: p ( z ) = z a − 1 e − z / a a − 1 ! a a p(z)=\frac{z^{a-1} e^{-z / a}}{a-1 ! a^{a}} p(z)=a1!aaza1ez/a斑点噪声在光学成像系统中很少出现,因此这里不作赘述。

(6)周期性噪声
周期性噪声无法用概率密度函数进行描述,也无法在空间域中进行消除,通常的方法是通过频域中的带阻滤波器进行消除,如下图所示,从左至右,第一幅图原始图像,第二幅图为频域图像,第三幅图为带阻滤波器,第四幅图为滤波后的图像。
在这里插入图片描述

2. C++代码实现

下面分别是生成椒盐噪声和高斯噪声的函数:

at Noise::CreateSaltNoise(const Mat &src, int n)
{
    Mat dst = src.clone();
    for(int k = 0; k<n; k++)
    {
        int i = rand() % dst.rows;
        int j = rand() % dst.cols;

        if(dst.channels() == 1)
        {
            dst.at<uchar>(i,j) = 255;
        }
        else
        {
            dst.at<Vec3b>(i,j)[0] = 255;
            dst.at<Vec3b>(i,j)[1] = 255;
            dst.at<Vec3b>(i,j)[2] = 255;
        }
    }

    for(int k = 0; k<n; k++)
    {
        int i = rand() % dst.rows;
        int j = rand() % dst.cols;

        if(dst.channels() == 1)
        {
            dst.at<uchar>(i,j) = 0;
        }
        else
        {
            dst.at<Vec3b>(i,j)[0] = 0;
            dst.at<Vec3b>(i,j)[1] = 0;
            dst.at<Vec3b>(i,j)[2] = 0;
        }
    }
    return dst;
}

Mat Noise::CreateGaussianNoise(const Mat &src, double mu, double sigma)
{
    Mat dst = src.clone();
    int row = dst.rows;
    int col = dst.cols;
    for(int i = 0; i<row; i++)
    {
        for(int j = 0; j<col; j++)
        {
            if(dst.channels() == 1)
            {
                //构建高斯噪声
                double u1, u2;
                do
                {
                    u1 = rand() * (1.0 / RAND_MAX);
                    u2 = rand() * (1.0 / RAND_MAX);
                } while (u1 <= numeric_limits<double>::min());//u1不能为0

                double z = sigma * sqrt(-2.0 * log(u1)) * cos(2 * CV_PI * u2) + mu;
                //double z = sigma * sqrt(-2.0 * log(u1)) * sin(2 * CV_PI * u2) + mu;

                int val = dst.at<uchar>(i,j) + z * 32;
                val = (val<0)?0:val;
                val = (val>255)?255:val;

                dst.at<uchar>(i,j) = (uchar)val;
            }
            else
            {
                for(int k = 0; k<dst.channels(); k++)
                {
                    //构建高斯噪声
                    double u1, u2;
                    do
                    {
                        u1 = rand() * (1.0 / RAND_MAX);
                        u2 = rand() * (1.0 / RAND_MAX);
                    } while (u1 <= numeric_limits<double>::min());//u1不能为0

                    double z = sigma * sqrt(-2.0 * log(u1)) * cos(2 * CV_PI * u2) + mu;
                    //double z = sigma * sqrt(-2.0 * log(u1)) * sin(2 * CV_PI * u2) + mu;

                    int val = dst.at<Vec3b>(i,j)[k] + z * 32;
                    int test = dst.at<Vec3b>(i,j)[k];
                    val = (val<0)?0:val;
                    val = (val>255)?255:val;
                    dst.at<Vec3b>(i,j)[k] = (uchar)val;
                }
            }
        }
    }
    return dst;
}

下面是运行结果:
首先,下面是原图:
在这里插入图片描述
加上高斯噪声后的结果
在这里插入图片描述
加上椒盐噪声后的结果:
在这里插入图片描述

3. 结论

  1. 高斯噪声、瑞丽噪声、伽马噪声、指数噪声其实是比较类似的,只是统计分布会稍有区别,如果用代码实现应该是类似的。
  2. 研究图像噪声模型对于图像降噪算法的实现是非常重要的,比如我看Review的时候就有大佬提到,对于目前效果最好的深度学习降噪算法,其难于实际应用的一个方面就是训练模型所用的噪声都是高斯噪声,而我们摄像头拍摄图像的实际噪声要远比高斯噪声复杂,因此如果更好地对图像噪声进行建模非常重要。

那这一小节就总结到这儿啦,有问题欢迎交流~

此外,这里我写一个各种算法的总结目录图像降噪算法——图像降噪算法总结,对图像降噪算法感兴趣的同学欢迎参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图像降噪算法——图像噪声模型 的相关文章

  • 【解决问题】RLException: [xx.launch] is neither a launch file in package [x] nor is [x] a launch file name

    本博客运行环境为Ubuntu 18 04 今天在ROS工作区下编译时遇到如下错误 xff1a RLException racecar launch is neither a launch file in package racecar ga
  • Linux\Ubuntu20下解压\提取realsense-viewer的录制文件xxx.bag

    最近用realsense获取rgb和depth图像 xff0c 其中用到了有ui界面的realsense viewer 这里附上RealSense SDK 2 0的github链接 直接在命令行输入即可打开realsense viewer
  • Unity基于思岚A2雷达开发-----配置教程

    说明 此教程是根据视频总结的 xff0c 配置包是厂商提供的 1 图片中圈出来为雷达校准软件 2 打开如下 xff0c 左上角按钮功能依次是设置 扫描 划定互动区域 保存 停止 加载以前扫描文件 右上角白色圆盘调整角度 xff0c 左右箭头
  • Altium Designer20-柔性PCB绘制技巧

    Altium Designer2020 柔性PCB绘制技巧 注 xff1a 教程所用PCB随意找的 xff0c 并没有完全绘制完 xff0c 大家学习PCB折弯方法即可 1 打开PCB 点击视图 gt 板子规划模式1 xff0c 如下图所示
  • SolidWorks2020小金球

    SolidWorks2020小金球 注 xff1a SolidWorks用户对SolidWorks渲染RealView功能的一个简单的叫法 小金球 xff0c 是一款功能功能强大的图形特效工具 xff0c 它可以快速的通过SOLIDWORK
  • QT5.14.1程序打包超级详细教程(windeployqt工具+Enigma Virtual Box)

    QT5 14 1程序打包超级详细教程 windeployqt工具 43 Enigma Virtual Box 注 xff1a 1 本教程使用QT5 14 1版本 xff0c 使用官网自带的windeployqt打包工具 xff0c 可以将文
  • c# RabbitMQ 和 ActiveMQ windows环境的配置和使用

    c RabbitMQ 和 ActiveMQ windows环境的配置和使用 RabbitMQ 1 下载配置 erlang 确保 39 ERLANG HOME 39 在环境变量中配置 2 下载安装 rabbit mq 3 激活 managem
  • SolidWorks2020绘制XT30PW模型

    SolidWorks2020绘制XT30PW模型 注 xff1a 模型根据数据手册绘制下载链接 1 2 3
  • Vmware安装Ubuntu16.0.4出现Assuming drive cache: write through和1920X1080分辨率调节问题

    Vmware安装Ubuntu16 0 4出现Assuming drive cache write through和1920X1080分辨率调节问题 注 xff1a 用Vmare安装Ubuntu16几乎都会遇到下面两个问题 xff0c 跟着我
  • ubuntu QT出现qt creater能编译但qmake编译后不能完全运行

    注释 xff1a 最开始用QT 编译程序 xff0c 但是最后需要将用命令行来编译 xff0c 在使用qmake过程中出现编译能通过但是运行程序也能跑起来 xff0c 但是就感觉卡在哪里了 xff0c 每次需要在QT编译器中重新编译才能运行
  • VScode 代码行数统计

    VScode 代码行数统计 1 安装vs code counter 2 按住按Ctrl 43 Shift 43 P 在命令输入 xff1a Count lines in workspace并回车 3 自动生成 VSCodeCounter x
  • 个人主页(包含项目经历、实习经历、竞赛经历)

    个人主页 注 xff1a 个人主页中主要包含项目经历 实习经历 竞赛经历等方面的照片及文字说明 项目经历 一 基于声源目标识别与定位的微型平台设计 图1 图2 图3 图1 3声源目标识别与定位平台 二 基于STM32的六足仿生机器人设计 图
  • UBUNTU编译运行RTKLIB

    RTKLIB在ubuntu下没有图形用户界面 xff08 GUI xff09 xff01 RTKLIB作为一个功能强大的工具 xff0c 我一直以为它在ubuntu下和win10下是一个样子 xff0c 所以想着用ubuntu下的编译器去编
  • 关于makefile与CMakeList的理解

    为了编译某一工程中的众多 c文件搞出来一个makefile可以批量编译 xff1b Linux下用Cmake也即CMakeLists txt文件 作者写的很清晰易懂
  • c++版本详表

    1 语言标准 版本代目版本号年份第一版c 43 43 981998第二版c 43 43 032003第三版c 43 43 112011第四版c 43 43 142014第五版c 43 43 172017第六版待定待定 2 visual st
  • ffmpeg常用命令

    1 rtsp into mp4 ffmpeg exe i 34 rtsp username password 64 192 168 1 183 554 34 f mp4 r 25 an 640x480 ss 600 t 600 s 34 t
  • http包详解

    位于应用层的http协议 什么也不多说了 xff0c 马上放个图看看 请求方法 xff0c 主要是 xff1a get xff1a 获取 post xff1a 提交 请求头 xff1a User Agent xff1a 产生请求的浏览器类型
  • linux下编译C++项目

    include CheckCXXCompilerFlag CHECK CXX COMPILER FLAG std 61 c 43 43 11 COMPILER SUPPORTS CXX11 CHECK CXX COMPILER FLAG s
  • www总结

    一 www服务器 1 什么是www xff1a www是world wide web的缩写 xff0c 也就是全球信息广播的意思 通常说的上网就是使用www来查询用户所需要的信息 www可以结合文字 图形 影像以及声音等多媒体 xff0c
  • matlab基础练习作业(1)

    要期末考试了 xff0c 整理一下平时的题 作业 xff11 1 写出完成下列操作的命令 1 将矩阵A第2 5行中第1 3 5列元素赋给矩阵B B 61 A 2 5 1 3 5 或者B 61 A 2 3 4 5 1 3 5 2 删除矩阵A的

随机推荐

  • PHP中使用cURL实现进行Post请求 ssl 双向认证

    span class token comment 64 param string url 接收数据的api 64 param string vars 提交的数据 64 param int second 要求程序必须在 second 秒内完成
  • 大端字节序与小端字节序 (网络字节序与主机字节序)

    大端字节序与小端字节序 1 简介2 判断机器字节序 xff08 C C 43 43 xff09 3 主机字节序与网络字节序的转换4 IP地址与网络字节序的转换 1 简介 字节序分为大端字节序 xff08 big endian xff09 和
  • Noetic安装ros_canopen

    建立workspace mkdir span class token operator span p canopen span class token operator span scr cd canopen catkin make 下载n
  • ROS学习初始化ws下catkin_make必须有src生成devel和build

    安装虚拟机开启intel vt 创建工作空间 first ws src catkin make在ws下生成devel和build 创建package 在src下添加package catkin create pkg hello ros ro
  • Pyhon : 爬虫Requests高级用法--证书

    客户端证书 你也可以指定一个本地证书用作客户端证书 xff0c 可以是单个文件 xff08 包含密钥和证书 xff09 或一个包含两个文件路径的元组 xff1a requests get https kennethreitz org cer
  • 【px4】运行mavsdk中的offboard example

    运行MAVSDK中的offboard例子时无人机不执行 想控制无人机前后左右移动 xff0c 在按照官方教程实现offboard 插件的时候 发现用action插件能正常起飞和降落 但是一旦执行到offboard的插件代码的时候就会自动降落
  • MDF does not reside in a read-only database or filegroup

    错误信息 The file 34 MDF 34 is compressed but does not reside in a read only database or filegroup The file must be decompre
  • Python复习笔记4——文件和目录操作

    一 文件读写 1 1 读文件 xff08 1 xff09 打开文件 使用Python内置的open 函数 xff0c 传入文件名和标示符 xff0c 打开一个文件对象 xff1a span class token operator gt g
  • Python复习笔记5——常用模块

    一 内建模块 1 1 datetime日期时间 xff08 1 xff09 导入模块 span class token keyword from span datetime span class token keyword import s
  • COLMAP+OpenMVS实现物体三维重建mesh模型

    一 环境准备 1 COLMAP 进入COLMAP官网 xff0c 打开下载页面 xff0c 下载COLMAP程序 2 OpenMVS OpenMVS可以自己从源码下载进行编译 如果觉得编译openmvs可能要费点时间 xff0c 那也可以直
  • 解决ubuntu火狐无法上网问题

    之前安装Ubuntu时是可以上网的 xff0c 呆了一个月没怎么用突然不能搜索了 xff0c 记录一下 xff0c 已解决 只需一条命令 打开终端 xff0c 输入 sudo apt get install firefox 问题解决啦 xf
  • C语言基本数据类型int, short int, long int, long long int, unsigned int, signed int等解析

    一 普通int类型 int类型是有符号整型 xff0c 即int类型的值必须是整数 xff0c 可以是正整数 xff0c 负整数 xff0c 零 int类型取值范围因计算机系统而异 早起的16位IBM PC兼容机使用16位来存储一个int值
  • Docker容器内更新apt-get 国内加速

    Docker容器内更新源apt get的方法 由于不使用国内镜像网速缓慢 xff0c 所以使用国内镜像加速就很必要了 xff0c 但是经过博主测试大部分apt get加速都是针对Ubuntu 的 xff0c 根本解决不了Docker 容器内
  • STM32F4 422串口通信

    STM32F429 422串口通信 422串口的硬件原理图如下 xff1a 422串口和232串口不同的是引脚的电平控制 xff0c 还有DE是发送使能 xff0c 置高即可 xff1a RE是接收使能 xff0c 置低即可 422接出来的
  • Java基础学习记录

    一 基础DOS操作 dir xff1a directory 列出当前目录内容 md xff1a make directory 创建目录 rd xff1a remove directory 删除目录 cd xff1a change direc
  • 6、杂项:rtk原理简要说明

    目录 x1f345 点击这里查看所有博文 随着自己工作的进行 xff0c 接触到的技术栈也越来越多 给我一个很直观的感受就是 xff0c 某一项技术 经验在刚开始接触的时候都记得很清楚 往往过了几个月都会忘记的差不多了 xff0c 只有经常
  • 树莓派控制直流电机

    古月金真 1 直流电机 直流电机是一种将直流电能转换为机械能的装置 xff0c 被广泛的用于驱动各种设备 xff0c 如电风扇 遥控小车 电动车窗等 xff0c 在控制设备运转领域中 xff0c 它是不可或缺的一种设备 小型直流电机的的电压
  • SVN创建指定版本号的分支

    SVN创建分支下面三个选择的具体含义 xff1a 最新版本 xff08 HEAD revision in therepository xff09 直接从版本库中最新创建 xff0c 由于不需要从你的工作拷贝中传输数据 xff0c 创建过程会
  • 图像降噪算法——图像降噪算法总结

    图像降噪算法 图像降噪算法总结 图像降噪算法 图像降噪算法总结 图像降噪算法 图像降噪算法总结 前面这段时间我看了几篇和图像降噪相关的Review xff0c 给我的感觉就是SLAM这一研究领域像是一片汪洋 xff0c 而图像降噪领域则是另
  • 图像降噪算法——图像噪声模型

    图像降噪算法 图像噪声模型 图像降噪算法 图像噪声模型1 图像噪声建模2 C 43 43 代码实现3 结论 图像降噪算法 图像噪声模型 1 图像噪声建模 首先 xff0c 我们要区分图像传感器噪声和图像噪声 xff0c 图像传感器噪声我在博