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图像处理系列——图像复原之噪声模型仿真 的相关文章

  • 用由少量元素组成的向量平滑曲线?

    我有 4 条曲线 由这些向量表示 x 300 700 1000 1500 y1 1 0055394199673442 0 11221578805214968 1 502661406039569 1 0216939169819494 y2 1
  • 使用 MATLAB 读取 CSV 文件?

    我正在尝试使用 MATLAB 读取 csv 文件 这是我的代码 csvread out2 csv out2 csv 如下所示 03 09 2013 23 55 12 129 32 129 33 03 09 2013 23 55 52 129
  • 在 GUI 内的子图中添加滚动条

    如何向子图添加滚动条 我已经阅读了很多教程 但它们似乎很难理解 例如 滚动图形演示 http www mathworks com matlabcentral fileexchange 5253 scrolling figure demo 有
  • 与 Matlab 相比,Numpy 加载 csv 太慢

    我发布这个问题是因为我想知道我是否做了一些非常错误的事情才能得到这个结果 我有一个中等大小的 csv 文件 我尝试使用 numpy 来加载它 为了便于说明 我使用 python 创建了该文件 import timeit import num
  • 有没有办法在 mex 文件中制作 try-catch 语句?

    我知道在 C 中没有内置的方法来执行 try catch 语句 但是 MATLAB 是否为 MEX 文件提供了任何类型的 try catch 功能 我尝试使用Longjmp and Setjmp以中描述的方式http www di unip
  • 如何在 MATLAB 中调整矩阵大小?

    假设我有一个1 by 12矩阵 我想将其调整为4 by 3矩阵 我怎么能这样做呢 我当前的解决方案有点丑陋 for n 1 length mat 3 out n 1 3 mat n 1 3 1 n 1 3 3 end 有一个更好的方法吗 r
  • MATLAB - 函数的多个返回值?

    我正在 matlab 中编写 2 个函数 一个初始化函数和一个将项目插入数组的函数 将其视为双向链表 但是 我的初始化函数仅返回 ans 和初始化的数组 我怎样才能让它也设置其他变量的值 这是我的代码 function array list
  • MatLab 中的输出有小数点的上限 [重复]

    这个问题在这里已经有答案了 我修改了 MatLab 中的一些代码 以便它可以给出函数 cos x 3 x 的根 当我运行代码并要求它返回 xnew 的值 因为 xnew 应该等于函数的根 时 它仅将 xnew 返回到小数点后 4 位 我希望
  • MATLAB:让audioplayer()在函数结束后继续播放

    我正在使用使用以下子函数的代码 function playTone duration toneFreq Generate a tone samplesPerSecond 44100 the bit rate of the tone y si
  • 结合阴影误差和实线平均值的图例

    我在用此 FEX 条目 http www mathworks com matlabcentral fileexchange 27485 boundedline line plots with shaded errorconfidence i
  • DYMOLA:opc 服务器如何使用 MATLAB 使用 dsin.txt 或 mat 文件进行初始化

    我在 DYMOLA 中创建了一个 OPC 服务器 现在我在 DYMOSIM 中有这个可以单击并初始化 使用 dsin txt 的 MAT 文件 现在我在 MATLAB 中创建了一个 GUI 文件 并获取变量的输入并创建了一个 mat 文件
  • SPMD 与 Parfor

    我对 matlab 中的并行计算很陌生 我有一个创建分类器 SVM 的函数 我想用几个数据集来测试它 我有一个 2 核工作站 所以我想并行运行测试 有人可以向我解释一下以下之间的区别 dataset array dataset1 datas
  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • 我的傅立叶逆变换中的尖峰

    我正在尝试在 MATLAB 中比较两个数据集 为此 我需要通过傅里叶变换数据来过滤数据集 对其进行过滤 然后对其进行逆傅里叶变换 然而 当我对数据进行逆傅里叶变换时 我在红色数据集的两端都出现了一个尖峰 图片显示了第一个尖峰 它在开始时应该
  • Google Chrome 的互联网历史记录脚本

    我并不是在寻找 最佳 或最有效的脚本来执行此操作 但我想知道是否存在一个脚本可以从 Google Chrome 中提取一天的互联网历史记录并将其记录到 txt 文件中 我更喜欢用 Python 或 MATLAB 编写 如果你们有不同的方法
  • 我的 matlab 图中需要不同的颜色

    这是我的情节代码 问题是我的图中的两条线具有相同的颜色 我需要为图中的每条线 总共 4 条线 分配一个特殊的颜色 for i 1 nFolderContents data hdrload folderContents i if size f
  • MATLAB:涉及大数的计算

    如何在 MATLAB 中执行涉及大量数字的计算 举一个简单的例子 任意精度计算器将显示 1 120 132 370 260 约为 1 56 但 MATLAB 无法执行此类计算 power 120 132 factorial 370 fact
  • MATLAB:生成给定三种颜色的颜色图

    我正在尝试在 MATLAB 中生成给定三种颜色 最高值 零值和最低值 的颜色图 我的思维过程是从最高端到中间循环 并将每个步骤存储到一个 3xN 第一列是 R 第二列是 G 第三列是 B 矩阵 所以我正在使用 fade from high
  • 将 Android 应用程序与服务器上的 Matlab 应用程序连接

    我正在 Android 上开发一个应用程序 它将获取图像输入 并将该输入传递到安装 MATLAB 应用程序的服务器 MATLAB 应用程序将计算结果并将其返回到该 Android 应用程序 我想知道我可以使用哪个服务器 如何将 MATLAB
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

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

随机推荐

  • 《知识扫盲》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总线等 本节目录 一 图像复原的模型 二