• 图像处理之图像噪声和各种噪声的matlab实现


    一、图像噪声的基本定义

    噪声在图像上常表现为引起较强视觉效果的孤立像素点或像素块。一般噪声信号与要研究的对象不相关,其以无用的信息形式出现,扰乱图像的可观测信息。通俗的说即噪声让图像不清楚。

    图像噪声按照噪声和信号之间的关系可以分为加性噪声和乘性噪声两种。假设图像的像素值为F(x,y),噪声信号为N(x,y)。如果混合叠加信号为F(x,y)+N(x,y)的形式,则这种噪声为加性噪声。如果叠加后信号为F(x,y)x[1+ N(x, y)]的形式,则这种噪声为乘性噪声。

    二、图像噪声的分类

    1、高斯噪声

    高斯噪声是一种源于电子电路噪声和由低照明度或高温带来的传感器噪声。高斯噪声又称为正态噪声,是自然界中最常见的噪声。高斯噪声可以通过空域滤波的平滑或图像复原技术来消除。其概率密度函数为:
    在这里插入图片描述
    2、椒盐噪声

    椒盐噪声又称为双极脉冲噪声,其概率密度函数为:
    在这里插入图片描述
    椒盐噪声是指图像中出现的噪声两种灰度值,分别是a和b,这两种灰度值出现的概率分别是Pa和Pb。该噪声的均值和方差分别为:
    在这里插入图片描述
    在这里插入图片描述
    通常情况下,脉冲噪声总是数字化允许的最大值或最小值。所以,负脉冲以黑点(胡椒点)出现在图像中,正脉冲以白点(盐点)出现在图像中。去除椒盐噪声的较好方法是中值滤波

    3、均匀分布噪声
    在这里插入图片描述

    4、指数分布噪声

    在这里插入图片描述

    5、伽马分布/爱尔兰噪声
    在这里插入图片描述
    以上五种噪声是书中一般给出的噪声分类,经过查询资料,其实还有其它几种噪声:泊松噪声、斑点/乘性噪声和瑞利噪声。

    6、泊松噪声

    泊松噪声是指其概率密度函数服从泊松分布的一类噪声,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。泊松噪声一般在亮度很小或者高倍电子放大线路中出现。

    7、斑点/乘性噪声

    根据相干原理进行成像的系统中普遍存在的一类噪声,如超声、雷达、SAR等。噪声原理是反射表面在波长尺度上是粗糙的,因此反射波存在明显的散射效应,导致所成的像出现斑点。

    8、瑞利噪声
    在这里插入图片描述
    瑞利噪声概率密度分布到原点的距离及密度的基本形状右偏,常用于倾斜状直方图的建模

    三、各种噪声的matlab实现

    关于imnoise函数可以看我之前写过的一篇博客:图像处理之matlab中imnoise函数用法详解

    1、高斯噪声

    (1)J=imnoise(I,‘gaussian’,m,v)/高斯噪声的直方图

    close all;
    clear all;
    clc;
    % 生成均值为100的图像,uint8函数转换为图像类型,
    % ones(256,256)生成256*256大小的矩阵,注意乘以100是为了方便显示直方图使均值为100,否则均值将为1
    I=uint8(100*ones(256,256));
    % 添加高斯白噪声给图像I,均值为m,方差为v.默认m = 0,v = 0.01
    J=imnoise(I,'gaussian',0,0.01);
    K=imnoise(I,'gaussian',0,0.03);
    
    subplot(221),imshow(J);
    subplot(222),imshow(K);
    subplot(223),imhist(J);
    subplot(224),imhist(K)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    (2)J=imnoise(I,‘localvar’,V)

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    I=im2double(I);
    V=zeros(size(I));% 建立与图像I大小相同的矩阵V
    for i=1:size(V,1) % size(V,1)表示图像的高/,size(V,2)表示图像的宽/,此处为遍历图像的高
        V(i,:)=0.02*i/size(V,1);% 此表达式使矩阵V的方差越来越大,给矩阵V第i行的所有元素赋值
    end
    
    % J=imnoise(I,'localvar',V)将均值为0,局部方差为V的高斯噪声添加到图像I,其中V是与I大小相同的一个数组
    J=imnoise(I,'localvar',V);
    subplot(121),imshow(I);
    subplot(122),imshow(J);% 最终效果是从上到下噪声的方差越来越大,图像越来越模糊
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    (3)J=imnoise(I,‘localvar’,h,v)

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    h=0:0.1:1; % h为在[0,1]之间的向量,表示图像的亮度值
    v=0.01:-0.001:0; % v为一个长度和h相同,表示与h中亮度对应的高斯噪声的方差
    % J=imnoise(I,'localvar',h,v)在图像的不同亮度值上叠加不同方差的高斯噪声,向量h中没有的亮度值将自动插值得到
    J=imnoise(I,'localvar',h,v);
    subplot(121),imshow(I);
    subplot(122),imshow(J);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    2、椒盐噪声

    (1)J = imnoise(I,‘salt & pepper’,d)/椒盐噪声的直方图

    close all;
    clear all;
    clc;
    % 生成均值为100的图像,uint8函数转换为图像类型,
    % ones(256,256)生成256*256大小的矩阵,注意乘以100是为了方便显示直方图使均值为100,否则均值将为1
    I=uint8(100*ones(256,256));
    J=imnoise(I,'salt & pepper',0.01);
    K=imnoise(I,'salt & pepper',0.05);
    
    subplot(221),imshow(J);
    subplot(222),imshow(K);
    subplot(223),imhist(J);
    subplot(224),imhist(K)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    (2)图像添加椒盐噪声

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    I=im2double(I);
    % J = imnoise(I,‘salt & pepper’,d),默认d=0.05
    % 在添加类型为Salt & Pepper的噪声时,符号&的前面和后面必须有空格,否则系统会出错
    J=imnoise(I,'salt & pepper',0.01);
    K=imnoise(I,'salt & pepper',0.05);
    % 图像中黑色的像素点为椒盐噪声,白色的像素点为盐噪声
    subplot(131),imshow(I);
    subplot(132),imshow(J);
    subplot(133),imshow(K);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    (3)图像分别添加椒噪声和盐噪声

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    I=im2double(I);
    % rand(size(A))返回和A由相同尺寸的随机矩阵(各个元素值在0-1之间)
    R=rand(size(I));
    J=I;
    %I中小于等于0.02的灰度值置为0,即图像的像素点显示为黑色
    J(R<=0.02)=0; 
    K=I;
    %I中小于等于0.03的灰度值置为1,即图像的像素点显示为白色
    K(R<=0.03)=1;
    subplot(131),imshow(I);
    subplot(132),imshow(J);
    subplot(133),imshow(K);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    3、均匀分布噪声

    均匀分布表达式如下所示,可由rand(m,n)函数直接生成:
    在这里插入图片描述

    close all;
    clear all;
    clc;
    m=256;
    n=256;
    a=50;
    b=180;
    % 建立大小为256*256的均匀分布噪声图像,范围为50-180
    I=a+(b-a)*rand(m,n); % 使用函数rand(m,n)就可以产生一个均值为0,方差为1的均匀噪声
    subplot(121),imshow(uint8(I));
    subplot(122),imhist(uint8(I));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    4、指数分布噪声

    指数分布的表达式如下所示,可由均匀分布来实现,注意a的取值为0.04。
    在这里插入图片描述

    close all;
    clear all;
    clc;
    m=256;
    n=256;
    a=0.04;
    % 建立大小为256*256的指数分布噪声图像,参数为0.04
    I=(-1/a)*log(1-rand(m,n));
    subplot(121),imshow(uint8(I));
    subplot(122),imhist(uint8(I));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    5、伽马分布/爱尔兰噪声

    伽马噪声的分布服从伽马曲线的分布,其实现需要使用b个服从指数分布的噪声叠加而来,而指数分布的噪声可以使用均匀分布来实现。
    在这里插入图片描述
    在这里插入图片描述

    close all;
    clear all;
    clc;
    a=0.04;
    b=3;
    m=256;
    n=256;
    I=zeros(m,n);
    for i=1:b
        I=I+(-1/a)*log(1-rand(m,n));
    end
    subplot(121),imshow(uint8(I));
    subplot(122),imhist(uint8(I));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    6、泊松噪声

    (1)J = imnoise(I,‘poisson’)/泊松噪声的直方图

    close all;
    clear all;
    clc;
    % 生成均值为100的图像,uint8函数转换为图像类型,
    % ones(256,256)生成256*256大小的矩阵,注意乘以100是为了方便显示直方图使均值为100,否则均值将为1
    I=uint8(100*ones(256,256));
    J=imnoise(I,'poisson');
    
    subplot(121),imshow(J);
    subplot(122),imhist(J);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    (2)图像添加泊松噪声

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    % J = imnoise(I,‘poisson’)添加泊松噪声给图像I
    J=imnoise(I,'poisson');
    subplot(121),imshow(I);
    subplot(122),imshow(J);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    7、斑点/乘性噪声

    (1)J = imnoise(I,‘speckle’,v)/斑点噪声的直方图

    close all;
    clear all;
    clc;
    % 生成均值为100的图像,uint8函数转换为图像类型,
    % ones(256,256)生成256*256大小的矩阵,注意乘以100是为了方便显示直方图使均值为100,否则均值将为1
    I=uint8(100*ones(256,256));
    J=imnoise(I,'speckle');
    K=imnoise(I,'speckle',0.2);
    
    subplot(221),imshow(J);
    subplot(222),imshow(K);
    subplot(223),imhist(J);
    subplot(224),imhist(K)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    (2)图像添加斑点/乘性噪声

    close all;
    clear all;
    clc;
    I=imread('cameraman.tif');
    % J = imnoise(I,'speckle',v)添加斑点/乘性噪声给图像I,方差为v,默认v=0.04
    J=imnoise(I,'speckle');
    K=imnoise(I,'speckle',0.2);
    subplot(131),imshow(I);
    subplot(132),imshow(J);
    subplot(133),imshow(K);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    8、瑞利噪声

    瑞利噪声的实现可以由平均噪声来实现,公式如下所示:
    在这里插入图片描述

    close all;
    clear all;
    clc;
    m=256;
    n=256;
    a=-0.1;
    b=1000;
    % 建立大小为256*256的瑞利分布噪声图像
    % 注意对a和b取值范围没有理解
    I=a+sqrt((-b*log(1-rand(m,n))));% 使用函数rand(m,n)就可以产生一个均值为0,方差为1的均匀噪声
    subplot(121),imshow(uint8(I));
    subplot(122),imhist(uint8(I));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    由于刚刚开始学习图像处理,对于很多知识理解不到位。如有错误,恳请指正,任重而道远,慢慢加油!

  • 相关阅读:
    动态SQL---P22,P23,P24
    Shopee买家通系统之如何注册虾皮账号
    模电课程设计
    三.【NodeJs入门学习】POST接口
    Volcano成Spark默认batch调度器
    01背包问题
    c语言-输入输出详解
    怎样在电脑上设置路由器的WiFi密码
    yolov6 win10环境配置详细过程
    Unity3D开发流程及注意事项
  • 原文地址:https://blog.csdn.net/qq_44111805/article/details/126346525