数字图像处理(十六)非局部均值去噪

news2024/7/31 0:50:43

文章目录

  • 一、前言
  • 二、NL-means
    • 1.两个邻域块的相似度
    • 2.NL-means原理
    • 3.数学理论推导
    • 4.代码链接
  • 参考链接

一、前言

在之前我们已经介绍过许多图像去噪的方法,比如均值滤波、中值滤波、高斯滤波等。今天我们要介绍一种新的去噪方法——非局部均值去噪(the non local means, NL-means)。那么NL-means相较于之前的方法有什么不同的地方呢?
我们先思考之前的图像去噪方法,用均值滤波进行举例。均值滤波在对噪声图像中的某个位置的像素进行处理时,需要以该像素为中心,选取3x3或者5x5邻域大小的像素求和后取平均值作为该像素的像素值。可以看到,使用均值滤波进行去噪时,我们只使用了该像素的邻域区域(也就是局部区域),中值滤波类似。
NL-means来自于这篇论文“A non-local algorithm for image denoising”(发表于2005年)。该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度得保持图像的细节特征。

二、NL-means

先观察下面的这张图像:
在这里插入图片描述
可以看到 p 、 q 1 、 q 2 p、q_1、q_2 pq1q2三个区域比较相似,那么 q 1 、 q 2 q_1、q_2 q1q2相较于 p p p可以说是重复区域,也就是说图像中存在着冗余信息。那么在对 p p p区域进行去噪时,能否利用 q 1 、 q 2 q_1、q_2 q1q2这两个区域呢?NL-means就是基于这样的想法提出来的。

1.两个邻域块的相似度

如何衡量 A A A B B B两个邻域块的相似度呢?一种常见的衡量方法是MSE(均方误差),当然还有其他的方法,例如PSNR,余弦相似度等等。
在这里插入图片描述

MSE的计算公式如下:
M S E ( A , B ) = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ A ( i , j ) − B ( i , j ) ] 2 MSE(A,B)=\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\left[A(i,j)-B(i,j)\right]^2 MSE(A,B)=mn1i=0m1j=0n1[A(i,j)B(i,j)]2
其中 m m m n n n分别为两个邻域块的宽和高。

2.NL-means原理

使用NL-means对图像进行去噪,假设A点为当前待滤波点,我们需要为A设置两个窗口:搜索窗口和邻域窗口。搜索窗口的大小为 D × D , D = 2 × D s + 1 D\times D, D=2\times D_s+1 D×D,D=2×Ds+1,邻域窗口的大小为 d × d , d = 2 × d s + 1 d\times d,d=2\times d_s+1 d×d,d=2×ds+1。如下所示:

在这里插入图片描述

那么对A点进行NL-means滤波后的像素值为:
NL-means = ∑ B w ( A , B ) × I ( B ) \text{NL-means}=\sum_{B}w(A,B)\times I(B) NL-means=Bw(A,B)×I(B)
其中 I ( B ) I(B) I(B)为B点的像素值; w ( A , B ) w(A,B) w(A,B) A 、 B A、B AB两个邻域块的相似度,其计算公式如下:
w ( A , B ) = 1 s u m e − M S E ( A , B ) h 2 s u m = ∑ B e − M S E ( A , B ) h 2 w(A,B)=\frac{1}{sum}e^{-\frac{MSE(A,B)}{h^2}}\\ sum=\sum_{B}e^{-{\frac{MSE(A,B)}{h^2}}} w(A,B)=sum1eh2MSE(A,B)sum=Beh2MSE(A,B)
可以看到, w ( A , B ) w(A,B) w(A,B)的计算公式与 A , B A,B A,B两点所在邻域窗口的相似度有关。其中h也是一个重要的参数,h越大去噪效果越好,但是图像越模糊,反之h越小去噪效果越差,但是去噪后的失真度越小。

3.数学理论推导

假设无噪声像素块的值为 f ( x , y ) f(x,y) f(x,y),噪声为 n ( x , y ) n(x,y) n(x,y),这里我们认为噪声是不相关的。那么带噪的像素块的值为 g ( x , y ) = f ( x , y ) + n ( x , y ) g(x,y)=f(x,y)+n(x,y) g(x,y)=f(x,y)+n(x,y)。将 k k k个相似的带噪像素块进行叠加后取均值得到
g ˉ ( x , y ) = 1 k ∑ i = 1 k g i ( x , y ) = 1 k ∑ i = 1 k f i ( x , y ) + n i ( x , y ) \bar{g}(x,y)=\frac{1}{k}\sum_{i=1}^{k}g_i(x,y)=\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y) gˉ(x,y)=k1i=1kgi(x,y)=k1i=1kfi(x,y)+ni(x,y)

g ˉ ( x , y ) \bar{g}(x,y) gˉ(x,y)取期望如下:
E [ g ˉ ( x , y ) ] = E [ 1 k ∑ i = 1 k f i ( x , y ) + n i ( x , y ) ] = 1 k ∑ i = 1 k E [ f i ( x , y ) ] + E [ n i ( x , y ) ] E\left[\bar{g}(x,y)\right]=E\left[\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y)\right]=\frac{1}{k}\sum_{i=1}^{k}E\left[f_i(x,y)\right]+E\left[n_i(x,y)\right] E[gˉ(x,y)]=E[k1i=1kfi(x,y)+ni(x,y)]=k1i=1kE[fi(x,y)]+E[ni(x,y)]
其中假设噪声的期望为0, f i ( x , y ) f_i(x,y) fi(x,y)为相似块,认为其期望相等,所以
E [ g ˉ ( x , y ) ] = f ( x , y ) E\left[\bar{g}(x,y)\right]=f(x,y) E[gˉ(x,y)]=f(x,y)
g ˉ ( x , y ) \bar{g}(x,y) gˉ(x,y)取方差如下:
D [ g ˉ ( x , y ) ] = D [ 1 k ∑ i = 1 k f i ( x , y ) + n i ( x , y ) ] = 1 k 2 D [ ∑ i = 1 k f i ( x , y ) + ∑ i = 1 k n i ( x , y ) ] = 1 k 2 D [ ∑ i = 1 k f i ( x , y ) ] + 1 k 2 D [ ∑ i = 1 k n i ( x , y ) ] D\left[\bar{g}(x,y)\right]=D\left[\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y)\right]=\frac{1} {k^2}D\left[\sum_{i=1}^{k}f_i(x,y)+\sum_{i=1}^{k}n_i(x,y)\right]=\frac{1}{k^2}D\left[\sum_{i=1}^{k}f_i(x,y)\right]+\frac{1}{k^2}D\left[\sum_{i=1}^{k}n_i(x,y)\right] D[gˉ(x,y)]=D[k1i=1kfi(x,y)+ni(x,y)]=k21D[i=1kfi(x,y)+i=1kni(x,y)]=k21D[i=1kfi(x,y)]+k21D[i=1kni(x,y)]
因为 D [ ∑ i = 1 k f i ( x , y ) ] D\left[\sum_{i=1}^{k}f_i(x,y)\right] D[i=1kfi(x,y)]= D [ k f ( x , y ) ] = k 2 D [ f ( x , y ) ] = k 2 σ f 2 D\left[kf(x,y)\right]=k^2D\left[f(x,y)\right]=k^2\sigma_f^2 D[kf(x,y)]=k2D[f(x,y)]=k2σf2 D [ ∑ i = 1 k n i ( x , y ) ] = σ η 1 2 + σ η 2 2 + ⋯ + σ η k 2 D\left[\sum_{i=1}^{k}n_i(x,y)\right]=\sigma_{\eta 1}^2+\sigma_{\eta 2}^2+\cdots + \sigma_{\eta k}^2 D[i=1kni(x,y)]=ση12+ση22++σηk2,所以
D [ g ˉ ( x , y ) ] = σ f 2 + 1 k 2 ( σ η 1 2 + σ η 2 2 + ⋯ + σ η k 2 ) D\left[\bar{g}(x,y)\right]=\sigma_f^2+\frac{1}{k^2}(\sigma_{\eta 1}^2+\sigma_{\eta 2}^2+\cdots + \sigma_{\eta k}^2) D[gˉ(x,y)]=σf2+k21(ση12+ση22++σηk2)
又因为相似无噪声像素块的方差为0,所以最后的推导出的方差公式为:
σ g ˉ 2 = k k 2 σ η 2 = 1 k σ η 2 \sigma_{\bar{g}}^2=\frac{k}{k^2}\sigma_{\eta}^2=\frac{1}{k}\sigma_{\eta}^2 σgˉ2=k2kση2=k1ση2
可以看到 g ˉ ( x , y ) \bar{g}(x,y) gˉ(x,y)的期望为 f ( x , y ) f(x,y) f(x,y),方差为 1 k σ η 2 \frac{1}{k}\sigma_{\eta}^2 k1ση2。所以说,通过非局部均值滤波的方法可以进行图像去噪。

4.代码链接

github

参考链接

非均质滤波的原理
https://www.cnblogs.com/luo-peng/p/4785922.html
https://zhuanlan.zhihu.com/p/355267754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何构建一个外卖微信小程序

随着外卖行业的不断发展,越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势,成为了商家们的首选。 那么,如何快速开发一个外卖微信小程序呢?下面就让我们来看看吧! 首…

二、W5100S/W5500+RP2040树莓派Pico<DHCP>

文章目录 1 前言2 简介2 .1 什么是DHCP?2.2 为什么要使用DHCP?2.3 DHCP工作原理2.4 DHCP应用场景 3 WIZnet以太网芯片4 DHCP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 …

模型保存和加载

1、sklearn模型的保存和加载API from sklearn.externals import joblib 保存:joblib.dump(rf, ‘test.pkl’)加载:estimator joblib.load(‘test.pkl’) 2、决策树的模型保存加载案例 保存: import joblib from sklearn.model_selectio…

程序员想要网上接单却不知道如何是好?那这篇文章你可得收藏好了!

作为一名程序员,想要网上接单赚赚零花钱,提高生活水平,这当然是无可厚非的,甚至有许多人已经将网上接单作为主业。 可是面对网上五花八门的接单平台,看着网上真真假假的信息,你真的清楚如何选择吗&#xf…

CAP定理下:Zookeeper、Eureka、Nacos简单分析

CAP定理下:Zookeeper、Eureka、Nacos简单分析 CAP定理 C: 一致性(Consistency):写操作之后的读操作也需要读到之前的 A: 可用性(Availability):收到用户请求,服务器就必须给出响应 P…

整个自动驾驶小车001:概述

材料: 1,树梅派4b,作为主控,这个东西有linux系统,方便 2,HC-S104超声波模块,我有多个,不少于4个,我可以前后左右四个方向都搞一个 3,l298n模块,…

指定顺序输出

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

SpringCloud复习:(5) feign的底层原理

首先需要在启动类加注解EnableFeignClients,它的代码如下: 可以看到,EnableFeignClients导入了FeignClientRegistra类,它实现了ImportBeanDefinitionRegistrar,其中定义了注册bean的逻辑 其中registerFeignClients用于注册我们通…

YOLO目标检测——行人数据集【含对应voc、coco和yolo三种格式标签+划分脚本】

实际项目应用:智能监控、人机交互、行为分析、安全防护数据集说明:行人检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(j…

gcc和makfile

gcc和makfile gcc预处理(进行宏替换)编译(生成汇编)汇编(生成机器可以识别的代码)连接(生成可以执行的文件或者库文件) makemakefile文件的编写 gcc 没安装的话,按照终端提示的安装命令安装就行 运行的格式: gcc [选项] [要编译的文件] [选项] [目标文件…

✔ ★【备战实习(面经+项目+算法)】 10.25学习(算法刷题:5道)

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

html2pdf

页面布局时将需要保存在同一页pdf的dom元素用div包裹,并为该div添加class类名,例如.convertPDF,如果有多页创建多个.convertPDF这个div,再循环保存pdf即可 用到了html2canvas和JsPdf这两个插件,自行站内搜索安装

使用 jdbc 技术升级水果库存系统

抽取执行更新方法抽取查询方法 —— ResultSetMetaData ResultSetMetaData rsmd rs.getMetaData();//元数据,结果集的结构数据 抽取查询方法 —— 解析结果集封装成实体对象提取 获取连接 和 释放资源 的方法将数据库配置信息转移到配置文件 <dependencies><depend…

【Win11】系统重装教程(最新最详细)

目录 一.简介 二.用U盘制作PE系统 三、安装系统 软件&#xff1a;Windows 11版本&#xff1a;21H2语言&#xff1a;简体中文大小&#xff1a;5.14G安装环境&#xff1a;PE系统&#xff0c;至少7代处理器硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨…

10 款超强大性能测试工具,你用过哪几款呢?

这篇关于“性能测试工具”的文章将按以下顺序让您了解不同的软件测试工具&#xff1a; 什么是性能测试&#xff1f; 为什么我们需要性能测试&#xff1f; 性能测试的优势 性能测试的类型 十大性能测试工具 什么是性能测试&#xff1f; 性能测试是一种软件测试&#xff0c;可确…

【Netty专题】用Netty手写一个远程长连接通信框架

目录 前言阅读对象阅读导航前置知识课程内容一、使用Netty实现一个通信框架需要考虑什么问题二、通信框架功能设计2.1 功能描述2.2 通信模型2.3 消息体定义2.4 心跳机制2.5 重连机制*2.6 Handler的组织顺序2.7 交互式调试 三、代码实现&#xff1a;非必要。感兴趣的自行查看3.1…

matlab中narginchk函数用法及其举例

matlab中narginchk函数用法及其举例 narginchk在编写子函数程序时候&#xff0c;在验证输入参数数目方面具有重要作用&#xff0c;本博文讲一讲该函数的用法。 一、narginchk功能 narginchk的作用是验证输入参数数目。 二、语法 narginchk(minArgs,maxArgs)narginchk(minA…

DP读书:《openEuler操作系统》(五)进程与线程

进程与线程 进程的概念程序&#xff1a;从源码到执行1. 编译阶段:2. 加载阶段:3. 执行阶段: 程序的并发执行与进程抽象 进程的描述进程控制块1. 描述信息2. 控制信息3. CPU上下文4. 资源管理信息 进程状态1.就绪状态2.运行状态3.阻塞状态4.终止状态 进程的控制进程控制源语1.创…

第四章 C++的数据类型

系列文章目录 第一章 C的输入第二章 C的输出第三章 C的循环结构 文章目录 系列文章目录前言一、个人名片二、int三、char四、double总结 前言 今天来学数据类型&#xff01; 一、个人名片 个人主页&#xff1a;睡觉觉觉得 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &…