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

article/2025/9/30 3:45:21

一、图像噪声的基本定义

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

图像噪声按照噪声和信号之间的关系可以分为加性噪声和乘性噪声两种。假设图像的像素值为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)

在这里插入图片描述
(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);% 最终效果是从上到下噪声的方差越来越大,图像越来越模糊

在这里插入图片描述
(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);

在这里插入图片描述
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)

在这里插入图片描述

(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);

在这里插入图片描述
(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);

在这里插入图片描述
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));

在这里插入图片描述
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));

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

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

close all;
clear all;
clc;
a=0.04;
b=3;
m=256;
n=256;
I=zeros(m,n);
for i=1:bI=I+(-1/a)*log(1-rand(m,n));
end
subplot(121),imshow(uint8(I));
subplot(122),imhist(uint8(I));

在这里插入图片描述
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);

在这里插入图片描述
(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);

在这里插入图片描述
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)

在这里插入图片描述
(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);

在这里插入图片描述
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));

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


http://chatgpt.dhexx.cn/article/cNveKT9a.shtml

相关文章

图像噪声模型(matlab)

概述 在图像的采集、传送和转换过程中&#xff0c;会添加一些噪声&#xff0c;表现为图像模糊、失真和有噪声等。图像复原就是尽可能恢复退化图像的本来面目&#xff0c;沿用图像退化的逆过程进行处理。图像复原技术是根据图像退化的先验知识建立一个退化模型&#xff0c;以此…

OpenCV 图像噪声

图像噪声 由于图像采集、处理、传输等过程不可避免的会受到噪声的污染&#xff0c;妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。 1.1椒盐噪声 椒盐噪声也称为脉冲噪声&#xff0c;是图像中经常见到的一种噪声&#xff0c;它是一种随机出现的白点或…

图像噪声学习总结

目录 一、图像噪声 1.1.图像噪声概念 1.2.噪声来源—两个方面 1.3. 图像噪声的特征 1.4.图像噪声的分类 1.4.1常见的图像噪声主要有以下几种&#xff1a; 1.4.2 图像噪声模型 &#xff08;1&#xff09;高斯噪声 &#xff08;2&#xff09;脉冲噪声&#xff08;椒盐噪…

图像噪声与去噪

图像的空域噪声以及二维降噪算法介绍 1 图像噪声的成因 图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质&#xff0c;这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多&#xff0c;比如:电噪声&#xff0c;机械噪声&#xff0c;信道噪声和其他…

图像噪声处理

一、为图像添加噪声 为图像添加噪声可以起到数据增强的作用 对训练数据添加适量噪声&#xff0c;可以使训练后的模型更加鲁棒&#xff0c;对模型的性能提升有一定的帮助。 两种常用噪声&#xff1a;椒盐噪声和高斯噪声 import cv2 import numpy as np import random #添加椒…

图像噪声简介

一、什么是图像噪声&#xff1f; 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般&#xff0c;噪声信号与要研究的对象不相关&#xff0c;它以无用的信息形式出现&#xff0c;扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。 二、噪声来源—两个方面…

VS找不到标识符

情况一&#xff1a; 忘记加&#xff1a;&#xff1a; 情况二&#xff1a; 没有包含相应的头文件 #include “xxx”** 情况三&#xff1a; 调用函数没有声明或定义

VS C++程序报错:找不到标识符

报错如下&#xff1a; 原因&#xff1a; cpp编译时是顺序编译的&#xff0c;我在一个函数中嵌套使用了上面报错的InsertNextNode&#xff08;&#xff09;函数&#xff0c;而把InsertNextNode&#xff08;&#xff09;函数的定义放在了上一个函数的后面&#xff0c;所以报错找…

c++编译错误error C3861: “xxxx”: 找不到标识符

错误描述 在导入自定义的头文件时&#xff0c;报C3861 “_ReturnAddress”: 找不到标识符错误&#xff0c;错误信息如下 解决办法 在自定义的头文件前面导入&#xff0c;指向的头文件即可 include ""//自定义头文件 include <ppltasks.h> 参考&#xff…

找不到标识符问题

复习动态数组时&#xff0c;出现了找不到标识符的问题&#xff0c;原因是cpp编译时是“顺序编译”的&#xff0c;主函数调用vector_2()函数的时&#xff0c;vector_2()在它所调用的函数printfV()的定义之前&#xff0c;因此找不到标识符。 将两函数调换顺序即可编译通过 &…

编写C语言出现“找不到标识符”

用C语言编写代码的时候虽然是从main函数开始的。但是其中有一个编译的过程。这个过程就是顺序编译。例如函数2调用了函数1。 #include<iostream> using namespace std; void print2() {cout << "调用第一个函数";print1();//调用第一个函数 } void prin…

关于error C3861: “xxxx”: 找不到标识符的处理方法

关于 error c3861:“XXXX”&#xff1a;找不到标识符的见解 在写代码是编译器提醒了找不到标识符的错误下来学习了一下,总结了一下希望对大家有帮助,先来认识一下什么是标识符&#xff08;如果知道就当巩固复习&#xff09;。 标识符:标识符&#xff08;identifier&#xff09…

error C3861: “AT_CHECK”: 找不到标识符

今天跑别人代码时遇到这个问题 会提示我 error C3861: “AT_CHECK”: 找不到标识符 我搜了一下发现在pytorch1.5版本之后AT_CHECK标识符已经不再使用了 只需要把 AT_CHECK 换成 TORCH_CHECK 即可

VS 2022 :C3861 “Covers”: 找不到标识符

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3861 “Covers”: 找不到标识符 CampusGuide 没有声明函数是无法调用的哦&#xff01; 还有还有 如果你的多行注释不是成对出现&#xff0c;它就会这样提示&#xff1a; 错误(活动) E00…

成功解决error C3861: “printf”: 找不到标识符

问题描述&#xff1a; 错误如下&#xff1a;error C3861: “printf”: 找不到标识符。 解决方法 提示找不到标识符“printf”&#xff0c;猜想这可能是由于编译器没能包含进头文件stdio.h造成的&#xff0c;然后我就在代码上面重新写了一行#include<stdio.h>,之后再运行…

“pcl_isfinite”: 找不到标识符

错误信息是&#xff1a;“pcl_isfinite”: 找不到标识符 我搜了&#xff0c;好多网站&#xff0c;搜了好多包&#xff0c;都没有这个“pcl_isfinite”的定义。后来看别人的代码找到了。。。 在我们自己的代码中&#xff1a;添加一行&#xff1a; # define pcl_isfinite(x) s…

VS中使用c++函数显示找不到标识符

VS中使用c函数显示找不到标识符 解决办法&#xff1a;把函数定义在main函数前原因&#xff1a;这个CPP并没有面向对象的结构。所以进行编译时是“顺序编译”的&#xff0c;而main函数的定义又在A的定义之前、自然找不到标识符了 如图使用函数时&#xff0c;出现代号为C3801的错…

VS找不到标识符问题

问题描述&#xff1a; 在我的一个screen.cpp文件中&#xff0c;我调用在这个文件里面定义的一个函数 并且在我的这个cpp文件中&#xff0c;我也明确定义函数 但是却爆出来的错误&#xff0c;注意这个错误不是没有定义 如果我把函数名改为&#xff1a;load_buyer_. 报的错误就…

地理加权回归GWR4.0软件下载与使用

1、GWR4.0软件下载链接&#xff1a;https://download.csdn.net/download/xiaodongfly/7027693 &#xff08;GWR4.0官方下载网址&#xff1a;https://gwrtools.github.io/&#xff0c;但是我打不开&#xff0c;所以从上面那个链接下载的软件&#xff09; 2、软件的安装 双击安…

spgwr | R语言与地理加权回归(Ⅰ-1):线性地理加权回归

地理加权回归&#xff08;Geographically Weighted Regression, GWR&#xff09;经过多年发展&#xff0c;已经具备了多种形式&#xff0c;在R语言中也对应着多个工具包&#xff0c;其中spgwr是一个开发较早、比较经典的工具包&#xff0c;功能也相对基础。 library(spgwr)在该…