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

文章介绍了微信公众号上关于FPGA的相关资源,重点讲解了图像复原的模型,包括高斯噪声、瑞利噪声等在内的多种噪声模型,以及如何使用Matlab进行噪声模型的仿真和噪声添加到图像中的示例代码。
摘要由CSDN通过智能技术生成

微信公众号上线,搜索公众号小灰灰的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');  
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值