Matlab图像处理系列——图像复原之噪声模型仿真

2024-01-04

微信公众号上线,搜索公众号 小灰灰的FPGA ,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、图像复原的模型
二、噪声模型
1、高斯噪声
2、瑞利噪声
3、伽玛噪声
4、指数噪声
5、均匀分布噪声
6、脉冲噪声(椒盐噪声)
三、噪声模型的Matlab仿真
四、Matlab源码
1、show_noise函数源码
2、add_noise函数源码
3、噪声模型的Matlab仿真源码一
4、噪声模型的Matlab仿真源码二

本节内容
图像在形成、传播和保存过程中使图像质量下降的过程,称为图像退化。图像复原是重建退化的图像,使其最大限度恢复景物原貌的处理。图像复原的目的是改善图像质量,更偏向于利用退化过程的经验知识使已被退化的图像恢复本来的面目。引起图像退化的因素包括由光学系统、运动等造成的图像模糊,以及源自电路和光学因素的噪声等。图像复原是基于图像退化的数学模型,复原的方法也是建立在比较严格的数学推导上。
一、图像复原的模型
图像复原就是对退化过程建模,并采用相反的过程进行处理,以便恢复原图像。
图像复原一般可采用两种方法。一种是适用于对图像缺乏已知信息的情况。这种方法试图估计图像被一些相对良性的退化过程影响以前的情况。另一种是给出一幅退化图像,并且已知其退化的过程信息,对图像执行该过程的逆操作即可恢复图像。
一般将图像的退化过程模型化为一个退化函数和一个加性噪声项。
在这里插入图片描述

f(x,y)——原始输入图像;
h(x,y)——退化函数;
n(x,y)——加性噪声;
g(x,y)——退化图像;
以及复原滤波复原图像。
空间域的表达式:g(x,y)=h(x,y)*f(x,y)+n(x,y),*代表卷积。
频域的表达式:G(u,v)=H(u,v)×F(u,v)+N(u,v)。
二、噪声模型
噪声主要来源于图像的获取和传输过程。
①图像传感器的工作情况受各种因素的影响,比如图像获取的环境条件和传感元器件自身质量。
②图像在传输过程中主要由于所用传输信道被干扰而受到噪声污染。
高斯噪声的产生源于电子电路噪声和由低照明或高温带来的传感器噪声。
瑞利密度分布在图像范围内特征化噪声现象时非常有用。
指数密度分布和伽玛密度分布在激光成像中有应用。
椒盐噪声主要表现在成像中的短暂停留。
均匀分布是实践中最少出现的噪声。
1、高斯噪声
高斯随机变量的概率密度函数:
在这里插入图片描述

Ζ表示灰度值;
μ表示Ζ的平均值或期望值;
σ表示Ζ的标准差;
标准差的平方σ^2表示Ζ的方差。
2、瑞利噪声
当一个随机二维向量的两个分量呈独立的、有着相同的方差的正态分布时,这个向量的模呈瑞利分布。服从这种分布的噪声称为瑞利噪声。
概率密度函数:
在这里插入图片描述

概率密度的均值:
在这里插入图片描述

方差:
在这里插入图片描述

3、伽玛噪声
服从伽玛分布的噪声称为伽玛分布,由形状参数和尺度参数控制。
概率密度函数:
在这里插入图片描述

概率密度的均值:
在这里插入图片描述

方差:
在这里插入图片描述

4、指数噪声
概率密度函数:
在这里插入图片描述

概率密度的均值:
在这里插入图片描述

方差:
在这里插入图片描述

5、均匀分布噪声
概率密度函数:
在这里插入图片描述

概率密度的均值:
在这里插入图片描述

方差:
在这里插入图片描述

6、脉冲噪声(椒盐噪声)
概率密度函数:
在这里插入图片描述

若b>a,则灰度值b在图像中将显示为一个亮点,反之为一个暗点。
若Pa或Pb其中之一为零,则脉冲噪声称为单极脉冲。
若Pa和Pb均不为零,尤其是近似相等,则脉冲噪声将类似于随机分布在图像上的胡椒和盐粉微粒,称为椒盐噪声。
三、噪声模型的Matlab仿真
①自定义show_noise函数,实现高斯噪声、瑞利噪声、伽玛噪声、指数噪声、椒盐噪声和均匀分布噪声的显示。
在这里插入图片描述

②自定义add_noise函数,为图像添加高斯噪声、瑞利噪声、伽玛噪声、指数噪声、椒盐噪声和均匀分布噪声。
在这里插入图片描述

四、Matlab源码
1、show_noise函数源码

function y=show_noise(type,x,a,b)
%show_noise 显示不同噪声的概率密度函数
%type 噪声种类
%高斯噪声 gaussian
%瑞利噪声 rayleigh
%伽玛噪声 gamma
%指数噪声 exp
%均匀分布噪声 uniform
%椒盐噪声 salt & pepper
%设置默认噪声类型
if nargin==1
    type='gaussian';
end
switch lower(type)
    %高斯噪声
    case 'gaussian'
        if nargin<4
            b=10;
        end
        if nargin<3
            a=0;
        end
        y=normpdf(x,a,b);
    %均匀分布噪声
    case 'uniform'
         if nargin<4
            b=20;
        end
        if nargin<3
            a=-20;
        end
        y=unifpdf(x,a,b);
    %椒盐噪声
    case 'salt & pepper'  
         y=zeros(size(x));
         y(1)=0.5;
         y(end)=0.5;
     %瑞利噪声
    case 'rayleigh'
        if nargin<3
            a=30;
        end
        y=raylpdf(x,a);
    %指数噪声   
    case 'exp'        
        if nargin<3
            a=15;
        end
        y=exppdf(x,a);        
    %伽玛噪声
    case 'gamma'
         if nargin<4
            b=10;
        end
        if nargin<3
            a=2;
        end
        y=normpdf(x,a,b);   
    otherwise
        error('Unknown distribution type.')
end

2、add_noise函数源码

function out=add_noise(I,type,x,y)
%add_noise 添加噪声
%I 输入灰度图像
%type 噪声种类
%高斯噪声 gaussian
%瑞利噪声 rayleigh
%伽玛噪声 gamma
%指数噪声 exp
%均匀分布噪声 uniform
%椒盐噪声 salt & pepper
%预处理
if ndims(I)>=3
    I=rgb2gray(I);
end
[M,N]=size(I);
%设置默认噪声类型
if nargin==1
    type='gaussian';
end
switch lower(type)
    %高斯噪声
    case 'gaussian'
         if nargin<4
            y=10;
        end
        if nargin<3
            x=0;
        end
        R=normrnd(x,y,M,N);
        out=double(I)+R;
        out=uint8(round(out));
    %均匀分布噪声
    case 'uniform'
         if nargin<4
            y=20;
        end
        if nargin<3
            x=-20;
        end
        R=unifrnd(x,y,M,N);
        out=double(I)+R;
        out=uint8(round(out));        
    %椒盐噪声
    case 'salt & pepper'  
        if nargin<3
            x=0.02;
        end
        out=imnoise(I,'salt & pepper',x);
    %瑞利噪声
    case 'rayleigh'
        if nargin<3
            x=30;
        end
        R=raylrnd(x,M,N);
        out=double(I)+R;
        out=uint8(round(out));
    %指数噪声   
    case 'exp'        
        if nargin<3
            x=15;
        end
        R=exprnd(x,M,N);
        out=double(I)+R;
        out=uint8(round(out));      
    %伽玛噪声
    case 'gamma'
         if nargin<4
            y=10;
        end
        if nargin<3
            x=2;
        end
        R=gamrnd(x,y,M,N);
        out=double(I)+R;
        out=uint8(round(out));   
    otherwise
        error('Unknown distribution type.')
end

3、噪声模型的Matlab仿真源码一

x=-4:0.1:4;
y1=show_noise('gaussian',x,0,1);
y2=show_noise('uniform',x,-3,3);
y3=show_noise('salt & pepper',x);
y4=show_noise('rayleigh',x,1);
y5=show_noise('exp',x,1);
y6=show_noise('gamma',x,2,5);
subplot(3,2,1);
plot(x,y1);
title('高斯 gaussian');
subplot(3,2,2);
plot(x,y2);
title('均匀分布噪声 uniform');
subplot(3,2,3);
plot(x,y3);
title('椒盐噪声 salt & pepper');
subplot(3,2,4);
plot(x,y4);
title('瑞利噪声 rayleigh');
subplot(3,2,5);
plot(x,y5);
title('指数噪声 exp');
subplot(3,2,6);
plot(x,y6);
title('伽玛噪声 gamma');

4、噪声模型的Matlab仿真源码二

clear all;
clc;
close all;
%读取图像
I=imread('leno_old.png');
I1=rgb2gray(I);
y1=add_noise(I1,'gaussian',0,10);
y2=add_noise(I1,'uniform',-20,20);
y3=add_noise(I1,'salt & pepper',0.02);
y4=add_noise(I1,'rayleigh',30);
y5=add_noise(I1,'exp',15);
y6=add_noise(I1,'gamma',2,10);
subplot(3,2,1);
imshow(y1);
title('高斯 gaussian');
subplot(3,2,2);
imshow(y2);
title('均匀分布噪声 uniform');
subplot(3,2,3);
imshow(y3);
title('椒盐噪声 salt & pepper');
subplot(3,2,4);
imshow(y4);
title('瑞利噪声 rayleigh');
subplot(3,2,5);
imshow(y5);
title('指数噪声 exp');
subplot(3,2,6);
imshow(y6);
title('伽玛噪声 gamma');  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab图像处理系列——图像复原之噪声模型仿真 的相关文章

  • 在 GUI 内的子图中添加滚动条

    如何向子图添加滚动条 我已经阅读了很多教程 但它们似乎很难理解 例如 滚动图形演示 http www mathworks com matlabcentral fileexchange 5253 scrolling figure demo 有
  • 有没有办法在 mex 文件中制作 try-catch 语句?

    我知道在 C 中没有内置的方法来执行 try catch 语句 但是 MATLAB 是否为 MEX 文件提供了任何类型的 try catch 功能 我尝试使用Longjmp and Setjmp以中描述的方式http www di unip
  • 隐藏图中某些图形对象的 MATLAB 图例条目

    MATLAB 图例列出了绘图中的所有内容 包括您在绘图上放置的指南 绕过这个问题的软糖就是要做的 Plot Add legend Add guidelines 然而 MATLAB 将最新的行放在前面 这意味着指南将位于显示的数据之上 丑陋且
  • 将数据库导入 MATLAB 错误

    我正在尝试将表导入到我的 MATLAB 工作区 但它一直向我抛出错误 Undefined function or method fetch for input arguments of type struct 这是我尝试执行的代码 dyn
  • Matlab:通过扩展向量来扩展矩阵

    我有一个dxmxn matrix A 解释 对于每个n 有m维度向量d 我想将每个 d 维向量扩展如下 考虑一个向量v维度 d 1 2 d 它是 x 1 x 2 x d 但为了简单起见 我删除了 x 目标是延长v获得一个d d向量形式 1
  • SPMD 与 Parfor

    我对 matlab 中的并行计算很陌生 我有一个创建分类器 SVM 的函数 我想用几个数据集来测试它 我有一个 2 核工作站 所以我想并行运行测试 有人可以向我解释一下以下之间的区别 dataset array dataset1 datas
  • 如何从矩阵的每一行中减去一个向量? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将矩阵的每一行除以固定行 https stackoverflow com questions 4723824 how can i divide each row of a matrix by a
  • 如何绘制 NxN 圆数组?

    我想绘制一个 NxN 的圆数组 为了形象化 我附上了我想要实现的目标的图像 我是 MatlLab 的新手 所以我尝试先绘制一个圆 下面是示例代码 n 2 10 size of mask M zeros n I 1 n x I n 2 mas
  • 如何将 Simulink 编码器编译器版本设置为支持 C++11 的版本?

    我正在尝试将代码合并到 Simulink 及其嵌入式编码器中 该代码使用 C 11 扩展 跑步mex setup c 给出这个输出 mex setup c MEX configured to use Xcode Clang for C la
  • 读取 MEX 文件中的 4D 数组

    我在 MATLAB 中有一个 4 维数组 我正在尝试访问 MEX 函数中的数组 下面创建 testmatrix 一个 4 维矩阵 已知数据为uint8 type Create a 4D array 2x 2y rgb 3 framenumb
  • 在 MATLAB 中一次为元胞数组分配不同的值

    我需要有关在 MATLAB 中创建元胞数组的帮助 其中每个元胞都是不同大小的数组 例如 假设我有这个简单的数组和值 A 5 3 8 7 0 4 1 B 10 元胞数组C必须创建为 C 10 20 30 40 50 10 20 30 10 2
  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • 在 Matlab、VB6 和 VB.NET 程序之间发送消息的最简单方法

    我们正在将一套数据采集和分析例程从 VB6 程序升级为 VB NET VB6 和 Matlab 程序的混合体 我们希望保持系统模块化 单独的 EXE 以便我们可以轻松创建专门的独立分析程序 而无需不断升级大型应用程序 当所有程序都是用 VB
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 在Matlab中使用中心切片定理实现滤波反投影算法

    我正在研究一种使用中心切片定理的滤波反投影算法作为家庭作业 虽然我理解纸上的理论 但在 Matlab 中实现它时遇到了问题 我得到了一个可以遵循的框架 但我认为我可能误解了一个步骤 这是我所拥有的 function img sampleFB
  • 如何将向量标准化/非标准化到范围 [-1;1]

    我怎么能够正常化到范围的向量 1 1 我想使用函数norm 因为它会更快 也让我知道我该怎么做非规范化之后的向量正常化 norm对向量进行归一化 使其平方和为 1 如果要对向量进行归一化 使其所有元素都在 0 和 1 之间 则需要使用最小值
  • 数组中 2 个百分位之间的平均元素

    我有 2 个长度为 200 的向量 例如 A 和 B 然后我使用以下方法找到数组 A 的每第二个百分位数 A1 prctile A 1 2 100 1 这样A1是一个长度为50的数组 现在我想找到A1中每两个元素内的A元素的平均值 即A的第
  • 在 Matlab 2014b 中移动等高线图的 z 值

    我正在尝试绘制曲面图 在曲面下方我希望显示轮廓线 但我希望轮廓位于z 1而不是默认值0 我找到了之前关于这个问题的帖子here https stackoverflow com questions 8054966 matlab how to
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • Matlab 的快速 JSON 解析器

    您知道 Matlab 中有一个非常快速的 JSON 解析器吗 目前我正在使用JSONlab http www mathworks com matlabcentral fileexchange 33381 jsonlab a toolbox

随机推荐

  • 《知识扫盲》ROS和ROS2对比

    文章摘选自 ROS与ROS2对比 1 ROS问题举例 ROS的设计目标是简化机器人的开发 如何简化呢 ROS为此设计了一整套通信机制 话题 服务 参数 动作 通过这些通信机制 ROS实现了将机器人的各个组件给的连接起来 在设计这套通信机制的
  • Vue3.4的新变化

    解析器 3 4版本解析器速度提升2倍 提高了 SFC 构建性能 之前版本Vue 使用递归下降解析器 该解析器依赖于许多正则表达式和前瞻搜索 新的解析器使用基于htmlparser2中的标记生成器的状态机标记生成器 它仅迭代整个模板字符串一次
  • mybatis:使用SQL类的函数LIMIT、OFFSET指定从哪行开始查询、最多返回多少行

    org apache ibatis jdbc SQL类的OFFSET函数指定从哪行 行索引的位置 开始查询 LIMIT函数指定最多返回多少行 注意 第一行的行索引是0 而不是1 示例 mysql数据库user表的记录 mapper接口文件
  • CMake 教程

    这篇文章主要介绍 CMake 的使用 看完这篇文章后 CMake 的绝大多数使用方法你都能掌握 本篇文章采用循序渐进的方法带你一步步逐渐进阶 CMake 通过多个示例 告诉你如何使用 CMake 解决常见的构建系统问题 各位爱学习的朋友 收
  • 860.染色法判定二分图

    二分图是指一个图中的所有顶点可以分为两部分 并且每条边连接的是属于不同部分的两个顶点 include
  • 进程 线程

    线程和进程是计算机科学中两个重要的概念 它们在多任务处理和并发执行中起着关键作用 进程 进程是程序执行时的一个实例 是程序执行到某种程度的数据结构的汇集 进程是资源分配的最小单位 拥有 资源所有权 和 调度执行 两个特性部分 进程能够分配给
  • 免费音效素材网站,一次性介绍清楚

    不管是在游戏 电影 电视剧 短视频还是音频中 合适的音效能够更好的表达内容和渲染氛围 今天给大家分享几个免费音效素材 感兴趣的话可以接着往下看 一 制片帮素材 找音效 制片帮素材不仅有海量的优质视频素材 还有丰富的音效资源 分类清晰 更重要
  • 【MySQL用户管理】

    目录 前言 用户管理 创建用户 删除用户 修改用户密码 修改用户密码安全检测设置 用户权限 添加权限 回收权限 总结 前言
  • 电动车低速提示音系统(AVAS)

    随着电动汽车的迅速发展 以及电动汽车的保有量也越来越多 根据车辆的特征来说电动汽车相比于传统的内燃机汽车要安静 为了保护行人 减少事故的发生 欧盟最近发布了一项关于电动车的新法规 自2019年7月1日开始 欧盟关于电动汽车的最新法律正式生效
  • Win7系统提示找不到KBDUK.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDUK D
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • CSSTree:CSS解析与转换的强大工具集

    CSS作为前端开发中不可或缺的一部分 负责网页的样式和布局 但处理CSS的复杂性常常让开发者感到头疼 为了解决这个问题 CSSTree应运而生 CSSTree是一个基于规范和浏览器实现的工具集 旨在提供快速 详细的CSS解析器 CSS AS
  • 学习使用layPage, 多功能JS分页组件/插件的方法

    学习使用layPage 多功能JS分页组件 插件的方法 效果图 分页代码 效果图 点击查看链接 分页代码
  • 深入理解左倾红黑树 | 京东物流技术团队

    平衡二叉搜索树 平衡二叉搜索树 Balanced Binary Search Tree 的每个节点的左右子树高度差不超过 1 它可以在 O logn 时间复杂度内完成插入 查找和删除操作 最早被提出的自平衡二叉搜索树是 AVL 树 AVL
  • Win7系统提示找不到KBDURDU.DLL文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个KBDURDU
  • 如何使用Requests库采集前程无忧招聘数据

    使用Requests库来采集前程无忧 智联招聘 的数据涉及以下步骤 了解目标网站结构 首先 需要了解前程无忧网站的结构 查看其页面布局 URL结构和需要采集的信息位置 发送HTTP请求 使用Requests库发送HTTP请求获取页面内容 通
  • 使用pytorch构建图卷积网络预测化学分子性质

    在本文中 我们将通过化学的视角探索图卷积网络 我们将尝试将网络的特征与自然科学中的传统模型进行比较 并思考为什么它的工作效果要比传统的方法好 图和图神经网络 化学或物理中的模型通常是一个连续函数 例如y f x x x x 其中x x x
  • CAD Exchanger SDK 3.24 for Android Crack

    CAD Exchanger SDK Software Libraries to Read Write and Visualize 3D CAD files Quickly and easily enrich your web server
  • 蜜罐溯源以及蜜罐HFish的使用

    一 蜜罐是什么 蜜罐技术本质上是一种对攻击方进行欺骗的技术 通过布置一些作为诱饵的主机 网络服务或者信息 诱使攻击方对它们实施攻击 从而可以对攻击行为进行捕获和分析 了解攻击方所使用的工具与方法 推测攻击意图和动机 能够让防御方清晰地了解他
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二