图像的去噪

article/2025/9/28 2:34:29

一、图像噪声概要

1. 图像噪声的产生主要源于两个方面:

  • 图像获取过程中

常见的图像传感器CCD和CMOS在采集图像过程中,由于受到工作环境或者电子电路结构的影响,会引入各种噪声,如热噪声、光子噪声、暗电流噪声等。

  • 信号传输过程中

由于传输介质和记录设备等的不完善,或者受到外部环境的干扰,数字图像在其传输记录过程中往往会受到多种噪声的污染。

2. 噪声的分类

  • 加性噪声模型
    产生机制是粉尘的遮挡或者采集元器件的损坏以及传输过程中数据的丢失等等
  • 乘性噪声模型
    在自然图像中由于一些光照等因素的影响,导致原始信号中的像素值成倍数的改变,在这个模型中,噪声信号被乘以原始信号,信号在它在,信号不在他也就不在。

3. 常见噪声种类

图像常见噪声基本上有以下四种:高斯噪声泊松噪声乘性噪声椒盐噪声

3.1 高斯噪声

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。

产生原因:
1)图像传感器在拍摄时市场不够明亮、亮度不够均匀;
2)电路各元器件自身噪声和相互影响;
3)图像传感器长期工作,温度过高。

使用python代码模拟高斯噪声:

def gasuss_noise(image, mean=0, var=0.001):'''添加高斯噪声mean : 均值var : 方差'''image = np.array(image/255, dtype=float) # image/255是将矩阵归一化到[0.1]noise = np.random.normal(mean, var ** 0.5, image.shape)out = image + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0) # 将数组out中的所有数限定到范围[low_clip,1]中out = np.uint8(out*255)return out

3.2 椒盐噪声

椒盐噪声,椒盐噪声又称脉冲噪声,它随机改变一些像素值,是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。

代码模拟椒盐噪声:

def sp_noise(image,prob):'''添加椒盐噪声prob:噪声比例'''output = np.zeros(image.shape,np.uint8)thres = 1 - probfor i in range(image.shape[0]):for j in range(image.shape[1]):rdn = random.random()if rdn < prob:output[i][j] = 0elif rdn > thres:output[i][j] = 255else:output[i][j] = image[i][j]return output

3.3 泊松噪声

泊松噪声,就是符合泊松分布的噪声模型,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。

def poisson_noise(image,lam):'''添加泊松噪声'''image = np.array(image / 255, dtype=float)  # image/255是将矩阵归一化到[0.1]noise = np.random.poisson(lam, image.shape)out = image + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0) # 将数组out中的所有数限定到范围[low_clip,1]中out = np.uint8(out*255)return out

3.4 乘性噪声

乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在他也就不在。

4. 图像评价标准

去噪处理后图像的评价指标用 P S N R PSNR PSNR(峰值信噪比)来客观评价:
P S N R = 10 ⋅ l o g 10 ( M A X I 2 M S E ) PSNR=10\cdot{log}_{10}{\left(\frac{MAX_I^2}{MSE}\right)} PSNR=10log10(MSEMAXI2)
其中 M S E MSE MSE为均方误差:
M S E = ∑ i = 0 n − 1 ∑ j = 0 m − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE=\sum_{i=0}^{n-1}\sum_{j=0}^{m-1}\left[I\left(i,j\right)-K\left(i,j\right)\right]^2 MSE=i=0n1j=0m1[I(i,j)K(i,j)]2

二、传统去噪算法

1. 传统去噪算法主要分类

  • 空间域去噪算法
    该类算法主要是在空间中进行去噪,将图像看做二维或者三维矩阵,噪声就是矩阵中元素数值比较突兀的部分,利用矩阵的相关运算对这些突兀的部分进行处理,从而达到去噪的目的。
  • 频域去噪算法
    这类算法主要是将图像通过某些变换(傅里叶变换、小波变换等)转换到频域上,噪声就是频域中峰值比较高的点,在频域中将这些峰值高的地方做均匀化处理,最后把频域通过逆变换转换到空间域上,从而完成去噪的工作。

2. 常见去噪算法

2.1 均值滤波

均值滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。均值滤波用像素邻域的平均灰度来代替像素值,适用于脉冲噪声。从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。

imag = cv2.blur(src,ksize=(w,h))
# src为输入图像
# ksize为滤波器大小

2.2 高斯滤波

高斯滤波矩阵的权值,随着与中心像素点的距离增加,而呈现高斯衰减的变换特性。这样的好处在于,离算子中心很远的像素点的作用很小,从而能在一定程度上保持图像的边缘特征。

imag = cv2.GaussianBlur(src,ksize=(5,5),sigmaX=1.5)
# src是输入图像
# ksize是滤波器大小
# sigmaX X方向上的高斯核标准差
# sigmaY Y方向上的高斯核标准差

2.3 中值滤波

中值滤波器是一种非线性滤波器,首先确定一个滤波窗口及位置,然后将窗口内的像素值按灰度大小进行排序,最后取其中位数代替原窗口中心的像素值。对椒盐噪声表现较好,但是对流量、速度等快速变化的参数不宜。

imag = cv2.medianBlur(src,ksize=5)
# src是输入图像
# ksize是滤波窗口大小

3、传统的去噪算法

3.1 NLM算法

非局部均值滤波(Non-Local Means,NLM)是Buades等人于2005年在论文“A non-local algorithm for image denoising”中提出。

基本原理:假设同一副图像上,有着很多相似的纹理;因此在有噪声的区域,可以通过将相似的纹理区域来替换噪声区域从而达到去噪目的。
在这里插入图片描述

1、该算法需要遍历整个原图像:首先取出一个原图像pixel,以该pixel坐标为中心,圈出一大、一小两个矩形。大的矩形表示纹理替换搜索区域 R R R,小的矩形表示待处理pixel的纹理区域 L L L
2、将 R R R矩形区域,分成若干个和 L L L矩形区域一样的大小的矩形 L i L_i Li。计算出每块 L i L_i Li L L L之间的权重 W W W
3、将 L L L的像素值都设置为0,然后根据 L L L与每块 L i L_i Li的权重 W W W,叠加当前 L L L的像素值为: W × L i W×L_i W×Li
4、将 L L L和每块 L i L_i Li之间的权重 W W W,同样累加起来到 W a l l W_{all} Wall
5、所有 L i L_i Li遍历完了之后, L = L W a l l L =\frac{L}{W_{all}} L=WallL,就得到了经过去噪处理之后的 L L L区域像素。

代码实现:

# 自定义实现
def NLmeansfilter(image, L, h_=10, templateWindowSize=5, searchWindowSize=11):global I_1image = image.astype(np.float64)f = int(templateWindowSize / 2)t = int(searchWindowSize / 2)height, width = image.shape[:2]  # 利用ndarray的索引得到长宽padLength = t + fI2 = np.pad(image, padLength, 'symmetric')  #symmetric——表示对称填充,每侧填充均为padLengthkernel = make_kernel(f)h = (h_ ** 2)I_ = I2[padLength - f:padLength + f + height, padLength - f:padLength + f + width]average = np.zeros(image.shape)sweight = np.zeros(image.shape)w_max = np.zeros(image.shape)for i in range(-t, t + 1):for j in range(-t, t + 1):if i == 0 and j == 0:continueI2_ = I2[padLength + i - f:padLength + i + f + height, padLength + j - f:padLength + j + f + width]w = np.exp(-cv2.filter2D((I2_ - I_) ** 2, -1, kernel) / h)[f:f + height, f:f + width]sweight += ww_max = np.maximum(w_max, w)average += (w * I2_[f:f + height, f:f + width])I_1 = (average + w_max * image) / (sweight + w_max)return np.clip(np.round(I_1), 0, 255).astype(L.dtype)
# 利用opencv自带的NLM去噪
R2 = cv2.fastNlMeansDenoising(image,dst=None,templateWindowSize=5, searchWindowSize=11)

3.2 BM3D算法

BM3D算法先吸取了空间域去噪算法中的计算相似块的方法,然后又融合了小波变换域去噪的方法。其主要步骤分为基础估计和最终估计,在这两大步中,分别又有三小步:相似块分组,协同滤波和聚合。
在基础估计中,第一步相似块分组的主要任务是在噪声图像中选择一些像素块作为参考,然后在这些像素块周围适当区域进行搜索,找到与选择的像素块最相似的块,并把这些相似的块叠加成一个三维矩阵。第二步协同滤波的任务是将分组的若干三维矩阵块通过小波变换转换到频域上,将小于设定阈值的系数置0,即频域滤波,然后再通过逆小波变换得到处理后的像素块。最后一步聚合,是将分组处理后的像素块通过一定加权融合到其原来的位置上,这时像素块的值是对噪声图像的估计。
最终估计的流程与基础估计大致相同,也是第一步相似块分组,不过这时的相似块分组会考虑到基础估计中相似块分和聚合后的结果,第二步协同滤波时使用了用维纳滤波(Wiener Filtering)代替了硬阈值处理,第三步将三维像素块加权融合,得到对噪声图像的最终估计,也就完成了图像去噪任务。
在这里插入图片描述


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

相关文章

图像去噪方法

图像去噪是指减少数字图像中噪声的过程。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声等的影响&#xff0c;在这种条件下得到的图像称为含噪图像或噪声图像。噪声是干扰图像的重要因素。一幅图像在实际应用中可能存在各种各样的噪声&#xff0c;这些噪声…

搞懂语音去噪

文章目录 1 概述2 传统语音去噪2.1 谱减法2.2 维纳滤波法 3 深度语音去噪参考资料 1 概述 语音去噪(noise reduction)又被称为语音增强(speech enhancement)&#xff0c;主要是针对于有人声的音频进行处理&#xff0c;目的是去除那些背景噪声&#xff0c;增强音频中人声的可懂…

几种常用信号平滑去噪的方法(附Matlab代码)

几种常用信号平滑去噪的方法&#xff08;附Matlab代码&#xff09; 1 滑动平均法 1.0 移动平均法的方法原理1.1 matlab内自带函数实现移动平均法1.2 利用卷积函数conv()实现移动平均法1.3 利用filter滤波函数实现移动平均法1.4 移动平均的幅频响应1.5 时域和频域的转换关系 2 …

图像噪声、去噪基本方法合集(Python实现)

文章目录 前言本文主要参考冈萨雷斯的数字图像处理 &#xff08;第4版&#xff09;&#xff0c;介绍图片中一些常见的噪声形式和常用的去噪方法&#xff0c;并且给出相应滤波方法的实现代码。 一、噪声分类1、高斯噪声2、泊松噪声3、椒盐噪声4、瑞利噪声5、爱尔兰&#xff08;伽…

干货 | 6款漏扫工具来了(附工具下载链接)

渗透测试收集信息完成后&#xff0c;就要根据所收集的信息&#xff0c;扫描目标站点可能存在的漏洞了&#xff0c;包括我们之前提到过的如&#xff1a;SQL注入漏洞、跨站脚本漏洞、文件上传漏洞、文件包含漏洞及命令执行漏洞等&#xff0c;通过这些已知的漏洞&#xff0c;来寻找…

webshell扫描工具

webshell扫描工具&#xff0c;这是一种内部有多个漏洞&#xff0c;可自动进行url采集&#xff0c;自采集多个引擎和友情链接url&#xff0c;轻松日出上百。 演示地址&#xff1a;https://note.youdao.com/s/Xi9S4I16 目录遍历攻击又称&#xff08;目录爬升&#xff0c;目录回溯…

网站漏洞扫描工具AWVS_v13下载和安装

Acunetix Web Vulnerability Scanner&#xff08;简称AWVS&#xff09;是一款知名的网络漏洞扫描工具&#xff0c;它能够测试你的网站安全&#xff0c;检测网站的安全漏洞&#xff0c;如sql 注入&#xff0c;交叉站点脚本等等。 AWVS_v13软件的下载 1、AWVS漏洞扫描工具是一款…

2022-渗透测试-推荐一款好用的网站漏洞扫描工具-WPscan

目录 WPscan简介 WPscan工具利用 查看帮助信息 更新漏洞库 扫描WordPress漏洞 扫描wordpress用户 扫描所使用的主题和漏洞 指定字典暴力破解密码 WPscan简介 WPScan是Kali Linux默认自带的一款漏洞扫描工具&#xff0c;它可以全面检查wp网站的漏洞&#xff0c;从而能够及时应对…

动手实现简易网站目录扫描器——WebScanner

效果展示 项目目录&#xff1a; 引言 不知是否有小伙伴在学习Web安全相关的知识&#xff0c;如果有的话&#xff0c;那应该对XSS&#xff0c;SQL注入&#xff0c;文件上传&#xff0c;一句话脚本等等基本功应该是再熟悉不过了。最初学习的时候是它&#xff0c;实战最先测试的…

网站指纹扫描工具whatweb

目录 前言whatweb简介whatweb的使用 ~~~~~~~~ 因为想要面对一个新的开始&#xff0c;一个人必须有梦想、有希望、有对未来的憧憬。如果没有这些&#xff0c;就不叫新的开始&#xff0c;而叫逃亡。 ​​​​ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

web扫描工具了解

前言&#xff1a;此文章用于发现web的漏洞查询&#xff0c;信息收集 一.whois查询&#xff08;可以查到域名&#xff0c;注册商&#xff0c;联系人&#xff0c;更新时间&#xff0c;创建时间&#xff0c;过期时间&#xff0c;域名服务器&#xff0c;DNS&#xff09; kali中带有…

目录,系统,网站漏洞扫描工具

目录扫描工具 1.yujian yujian是一款可以进行端口扫描和目录扫描的软件&#xff0c;图形化界面&#xff0c;使用也比较简单&#xff0c;例如&#xff0c;今天使用的是它的目录扫描。 yujian针对目录扫描有它自己默认的字典&#xff0c;通过字典对其网站目录进行扫描 这里要…

网站安全在线扫描工具

现在网络上有许多一些关于网站安全检测的工具软件。有收费的&#xff0c;也有免费的。在这我就列举2个免费的在线网站扫描工具。 对于站长的来说&#xff1a; 之前对与网站的的安全检测&#xff0c;我都是直接用***软件***自己网站&#xff0c;再从问题里面进行修复。不过现在已…

网站目录扫描工具

目录 御剑 dirbuster Webdirscan 网站后台扫描工具都是利用目录字典进行爆破扫描,字典越多,扫描到的结果也越多。常用的网站后台扫描工具御剑、dirbuster和Webdirscan,不管哪个工具,要想扫描到更多的东西,都必须要有一个强大的目录字典! 御剑 御剑也是一款好用的网站…

网站扫描(Wker_网站探测工具)

Wker_网站探测工具 对于网站的扫描&#xff0c;我们需要完整详细的数据&#xff0c;才能进行准确的分析。 对于网站的分析&#xff0c;我们大致需要以下一些数据。 一. 域名信息查询 whois查询&#xff08;联系人&#xff0c;联系邮箱&#xff0c;DNS&#xff09;SEO查询权重查…

常用Web安全扫描工具合集

初入门时&#xff0c;喜欢将目标站点直接丢扫描器&#xff0c;慢慢等扫描结果&#xff0c;极度依赖Web扫描器&#xff1b;而有一些漏洞高手&#xff0c;善于运用运用各种工具但并不依赖工具&#xff0c;经常可以找到扫描工具发现不了的漏洞。 一款好用的Web扫描器对于白帽子来说…

【网络安全干货分享】Web安全常用的扫描工具有哪些?

Web安全是网络安全的一部分&#xff0c;常用的扫描工具共分为两大类&#xff1a;系统扫描工具和应用扫描工具。那么Web安全常用的扫描工具有哪些?以下便是详细的内容介绍。 第一种&#xff1a;系统扫描工具  系统扫描工具主要是针对网络中系统软件的脆弱性进行信息安全评估&…

OpenCV_03 Numpy库和Mat

前言 主要学习Numpy库的相关操作和Mat的基础知识。 目录 前言一、Numpy基本操作1.创建矩阵创建数组array()创建全0/1数组zeros()/ones()创建全值数组full()单位矩阵identity()/eye() 2.检索与赋值3.获取子矩阵Region of Image(ROI) 二、Mat结构体1.Mat的实现2.Mat拷贝Mat浅拷贝…

【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”

【MATLAB Image Processing Toolbox 入门教程六】 1 gray2ind函数2 ind2gray函数3 mat2gray函数4 rgb2gray函数5 rgb2ind函数6 label2rgb函数7 imsplit函数8 grayslice函数 MATLAB Image Processing Toolbox支持的图像类型有&#xff1a;二值图像、索引图像、灰度图像、彩色图像…

黑白图转RGB(Matlab)

SamplePath1 "C:\Users\LY\Desktop\green\"; %存储图像的路径 fileExt *.bmp; %待读取图像的后缀名 %获取所有路径 files dir(fullfile(SamplePath1,fileExt)); len size(files,1); for ii1:lenfileName strcat(SamplePath1,files(ii).name);Iimread(fileNa…