NL-meals、BM3D

news2024/12/24 3:38:09

常用的高斯滤波或者均值滤波相对都比较简单,即每个窗口的滤波核都是一样的。稍微复杂一些保边滤波如,双边滤波和导向图滤波等。这里介绍几种ffmpeg里面包含的相对比较复杂的滤波算法。计算量不可谓不小。可以通过ffmpeg查看源码实现过程,这里部分使用MATLAB,主要是为了代码的易读性和简易。

NL-meals(非局部均值滤波算法)

该算法主要用于去除高斯白噪声之类的噪点噪声

非局部均值滤波的基本原理与均值滤波类似,都是要取平均值,但是非局部均值滤波在计算中加入了每一个点的权重值,所以能够保证在相邻且相差很大的点在方框中求平均值时相互之间的影响减小,也就对图像边缘细节部分保留很多,这样图像看起来会更清晰。非局部均值滤波的算法我认为可以大致分为以下几个步骤:

  1. 首先在一个点A周围取一个大的框(搜索框),设边长为s,A在方框的中心,然后再在方框中取小的方框,即相似框,设边长为d
  2. 那么在A周围也有一个边长为d的方框,然后在大方框中找到所有边长为d的小方框的组合(就是一个小正方形在一个大正方形中到处移动,记录小正方形中心点的坐标就行了),设小方框的中心点为B,分别于A周围的相似框求减法,并且加入高斯核计算得到的加权值,这样可以计算出一个二维数组,里面存放着各个点的差值乘以权重后的值,加入高斯核主要是因为距离中心点距离不同对中心点的影响大小也不同,而且高斯核的权重和是1,所以就不用再归一化了。
  3. 然后将这个二维数组求和并平均,得到的值就是这个相似框的中心点B对于A的权重值。计算出A周围所有点的权重值,其实这个时候这个值和权重是成反比的,以A本身为例(以A为中心点的相似框),计算出来A对于A的所谓权重值是零。然后根据计算出来的值用一个指数减函数就得到了成正比的权重关系,具体的函数见下面的代码,w=exp(-d/h),就是这个,其中d就是计算出来的值啦,代入后w就是成正比的权重关系啦,h是一个滤波百分比值。可以先固定为一个常数。 而且这个计算出来w就是一个(0,1)的值哦,自动归一化啦
  4. 然后就是根据得到的权重值以及各个点本身的灰度值计算出非局部均值滤波后A点的灰度值。
  5. 以此类推,可以计算出图中所有点经过非局部均值滤波后的值
function  [output]=NLmeansfilter(input,t,f,h)                
[m n]=size(input); 
%t:搜索框半径;f:相似框半径;h:滤波频率百分比
Output=zeros(m,n);
input2 = padarray(input,[f f],'symmetric');              
 %将边缘对称折叠上去  
 % f :加宽的宽度值
 kernel = make_kernel(f);                              %计算得到一个高斯核,用于后续的计算
 kernel = kernel / sum(sum(kernel));             %sum:对矩阵k的每一列求和,k表示矩阵k的总和
 h=h*h;
 for i=1:m
 for j=1:n
         i1 = i+ f;
         j1 = j+ f;      
         W1= input2(i1-f:i1+f , j1-f:j1+f);		
         wmax=0; 
         average=0;
         sweight=0;
         rmin = max(i1-t,f+1);      %确定相似框的边长,其实可以在代入数据的时候就设置搜索框和边界框边长的大小关系,就不用求最大最小值了
         rmax = min(i1+t,m+f);      %这段主要是控制不超出索引值
         smin = max(j1-t,f+1);
         smax = min(j1+t,n+f);
         for r=rmin:1:rmax
         for s=smin:1:smax                 
                if(r==i1 && s==j1) continue; end;      
                W2= input2(r-f:r+f , s-f:s+f);   % 取出正方块的所有像素值             
                d = sum(sum(kernel.*(W1-W2).*(W1-W2)));
                w=exp(-d/h);                 
                if w>wmax      
                   wmax=w;                   
                end
                sweight = sweight + w;            % w为(r,s)点的权重值,进行权重求和,为了归一化
                average = average + w*input2(r,s); % 将权重和该点的像素值求的加权值。                                  
         end 
         end
        average = average + wmax*input2(i1,j1);
        sweight = sweight + wmax;       
        if sweight > 0
            output(i,j) = average / sweight;   %归一化
        else
            output(i,j) = input(i,j);
        end                
 end
 end	  

MATLAB代码比较清晰易读,但这篇介绍的更加详细一些,包括了一些加速的策略。

BM3D

BM3D号称是传统方法中效果最好的去噪算法,这里的噪声类型是指高斯类型的白噪声。

主要流程如下图:

高深的理论推理可以参考这里,专业术语表述太多,可以匆匆过一遍,不太建议深入了解。

从上图上看,该过程可以分为两步,而且两步的流程几乎一致。我们从不一样的地方看主要是如下两个地方:

hard thresholding:硬阈值滤波

wiener filtering:维纳滤波

第二阶段的输入是基于第一阶段的结果。主要是维纳滤波需要。

这里的块匹配以及权重比的理解,可以参考上一节的非局部均值滤波方法。

硬阈值滤波原理

硬阈值滤波是小波域对白噪声进行去噪的方法,它的基本假设是白噪声在小波的各个尺度中均匀分布,但是相对于主要信号的系数来说很小,于是可以通过一个硬阈值来将其区分开来,小于阈值的系数,将其置零,大于阈值的系数保持不变,通过这样的方法可以达到对信号进行去噪的目的

其具体过程描述如下:

(1)将信号从时间域或者空间域通过正交变换变换到变换域

(2)对变换域系数进行硬阈值滤波

(3)将硬阈值滤波后的变换域系数通过正交反变换还原到原来的时间域或者空间域得到去噪后的信号

这里的硬阈值滤波就是对变换域系数做一个简单的判断,如果其系数绝对值大于给定的阈值,那么保持系数不变,如果系数绝对值小于给点阈值,那么将系数置零。

正交变换可以是任意针对信号处理设计的正交变换,常用的傅立叶变换,离散余弦变换,小波变换,多尺度几何分析(超小波)等均在正交变换的范围内。

总体上可以理解在使用频域的一些方法进行去噪。因此,一些高频细节会随着噪声的去除而被抹去。因此引入了维纳滤波。

维纳滤波

维纳滤波器是采用统计的方法对平稳信号进行滤波的一种方法,其基本思想是设计一个滤波器使得信号经过滤波器后的输出信号和原始信号误差在统计意义上最小,其流程如下图所示

在信号的采集或者传输的过程中,信道里存在噪声,比如拍照过程,传感器中本身存在热噪声,同时在光子计数过程中也存在着泊松噪声,这样我们的ISP处理器得到的信号就是一个含噪信号,ISP去噪的过程就是为了从含有噪声的CMOS RAW数据中恢复出原始不好早的照片。维纳滤波器想要达到的目的是经过滤波其得到的信号y和原始信号在统计意义上误差最小,即均方误差最小

在工程中想要找到区分信号和噪声的合适阈值很困难,很容易“误伤”小系数的真实信号。从而导致细节的损失。

首先对含噪信号进行硬阈值滤波,得到的信号当作原始信号带入到维纳滤波系统函数中,然后对未经过任何操作的含噪信号进行维纳滤波,这样得到的结果更好。

这是因为,维纳滤波里通过系统函数H可以分成以下三种情况:(1)在信号功率很小的时候噪声为主,那么H几乎等于零,H与含噪信号系数相乘,含噪信号的系数几乎等于零,很好抑制噪声信号;(2)在信号功率很大的时候信号为主,那么H几乎等于一,H与含噪信号系数相乘,信号几乎不变,信号得到了很好的保留;(3)在噪声功率和信号功率差不多的时候,这时候信号与噪声各占一半,H的数值约等于二分之一,H与含噪信号系数相乘,含噪系数近似恢复到原始信号系数;基于上面三种情况的分析,维纳滤波器可以减少信号的“误伤”,比直接进行硬阈值滤波会有更好的结果,另外维纳滤波是一种统计意义上误差最小的滤波方式。

BM3D滤波流程

第一阶段:

  • 块匹配估计:i)块匹配分组 ii)3D协同硬阈值滤波
  • 聚合加权滤波

1. 这里的块匹配按照划窗的方式在图像中搜索与给定图像块的相似图像块,如果和图像的相似度高,那么将其加入到该分组中,如果相似度不高,舍弃,继续寻找下一个相似的图像块,需要特殊说明的是,图像的相似度与图像的差异成反相关关系,在相似度比较之前先对图像块做一个硬阈值收缩,去掉因为高频噪声带来的影响;一个块经过匹配后形成块组,2D变3D

这里的3D正交变换充分利用了图像块内部的相关性和图像块之间的相关性,在上图中第一二维空间组成的图像块内部,一个2D的正交变换揭示了图像内部的相关性,所有图像块经过第一个2D正交变换后,对应位置的像素点沿着第三维串起来,在第三维方向进行1D的正交变换,这个正交变换揭示了图像块之间的相关性,充分利用了同一组图像块相似来进行系数表示,通过这样的先2D正交变换再1D正交变换构成的3D正交变换硬阈值滤波,可以很好的抑制图像的噪声,同时保留了该组图像块中各个图像块自身的独特的细节。

2. 通过3D协同滤波后,将图像块放回到其原始的位置,但是由于搜索相似图像块的时候,存在图像块重叠的情况,如上图中红色区域中的几个图像块,彼此之间有重叠区域,那么重叠区域里像素点会有不止一个去噪后的结果,到底取哪一个呢,处理这个问题的方法就叫做聚合加权滤波,即对于同一个像素点的不同估计值赋予它们一个权值,取加权平均结果作为最终的结果

第二阶段:

  • 块匹配估计:i)块匹配分组 ii)3D协同维纳滤波
  • 聚合加权滤波

1. 经过第一阶段的基本估计滤波后得到一幅基本估计滤波后的图像,再对其进行块匹配估计,得到新的分组,然后在未经去噪的原始含噪图像的相同位置按照基本滤波后的分组,将原始含噪图像也进行相同的分组,具体的块匹配过程与第一阶段块匹配过程相似,这里便不再赘述,需要说明的是,这里得到两个块匹配分组,一个分组的图像块来自第一阶段基本估计滤波后的图像,我们称之为a组,另一个分组来自没有经过任何处理的含噪图像,我们称之为b组。在得到第二阶段块匹配的两个分组后,我们将a组作为指导图像块,当作为经过噪声污染的原始图像,b组图像当作要去噪的图像,对两组分别进行3D正交变换,然后按照文本第三部分介绍的那样,进行维纳滤波,维纳滤波后,对b组进行3D反正交变换到空间域图像块,并将图像块的图像块放回其原始位置。

2. 同第一阶段聚合加权滤波一样,这里对b组的图像数据进行聚合加权滤波,得到BM3D的最终结果。

代码
python代码、matlab等

ffmpeg滤镜介绍:nlmeans、BM3D

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

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

相关文章

RHCE(防火墙)

文章目录一、什么是防火墙二、iptables三、firewalld四、作业一、什么是防火墙 防火墙:防火墙是位于内部网络和外部网络之间的屏障,它按照系统管理员预先定义的规则来控制数据包的进出 防火墙可以分为硬件防火墙和软件防火墙。硬件防火墙是由厂商设计好的…

LongAdder/LongAccumulator类分析

一、LongAdder简介 1.下图是JDK-API文档的的截图信息 我们可以得知这两个类都是1.8开始提供的,并且都具有顶级的并发性。这两类的区别点主要在于LongAdder初始值为0,只能做累加操作,而LongAccumulator可以完成一些复杂的计算,本…

软件设计师考试整理-0-前言

1. 整理初衷 2022年下半年的软考成绩出来了,查了一下,上午58分,下午61分,虽然不高,但是也过了,还是值得开心的,毕竟在最初报考的时候,会的知识点寥寥无几。 先解释下为什么我会报考…

富勒烯C60,131159-39-2,水溶性富勒烯,CARBON C60

产品描述:富勒烯C60与金刚石、石墨是碳的三种同素异形体,富勒烯分子是一种由60个碳原子结合形成的稳定分子,它具有60个顶点和32个面,其中12个为正五边形,20个为正六边形,它形似足球,所以又称为富…

OpenMMLab AI实战营Day2 图像分类

目录 一、图像分类 二、卷积神经网络 三、超越ResNet的图像分类模型 1、神经结构搜索 2、Transformer 3、ConvNext 四、轻量化神经网络 五、Vision Transformer 六、模型学习 七、学习率与优化器调整策略 八、数据增强 一、图像分类 图像分类:识别图像中…

网络骗局丨典型案例分析,大家一起来避雷!

作者:黑蛋因为疫情的困扰,总体经济都不是很好,春节前后,网络诈骗高发期,以下是几种典型案例,一起来看看。比较常见的有以下几种:1、网络购物骗局小红在某平台网购一件产品,几天后&am…

Nacos+Springcloud+mybatis-plus+oracle的整合

NacosSpringcloudmybatis-plusoracle的整合 1、项目结构 2、父类的依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…

shell脚本基本使用

目录 1.是什么&#xff1f; 2.写法 3.shell脚本语法 3.1第一个shell脚本 3.2交互式shell脚本 3.3shell脚本的数值计算 3.4test命令 3.5中括号【】判断符 3.6默认变量 4.shell脚本条件判断 4.1 if fi 4.2 if then else 4.3 if elif else 4.4 case 5.shell脚本函数…

Linux 学习笔记 正则、管道、进程与任务定时

一、筛选与搜索 1.1 grep 命令 筛选数据 grep 是 Globally search a regular expression and print 的缩写。意思是全局搜索一个正则表达式&#xff0c;并且打印。 考虑这样的一个名为 a.txt 的文件&#xff1a; 执行 grep apple ./a.txt 即可匹配所有含有 apple 的字符 默认…

IDEA搭建Finchley.SR2版本的SpringCloud父子基础项目-------zuul和SpringConfig

1.Zuul是什么 Zuul包含了对请求的路由和过滤两个最主要的功能&#xff1a; 其中路由功能负责将外部请求转发到具体的微服务实例上&#xff0c;是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预&#xff0c;是实现请求校验、服务聚合等功能的基础. Zu…

4款实用的办公软件,每一款都让你效率翻倍,相见不易

称心的电脑使用体验&#xff0c;总离不开实用的工具&#xff0c;一款高效的工具&#xff0c;能让你的办公体验翻倍。 1、Mem Reduct 这是一款强大到离谱的电脑清理工具&#xff0c;比某安全卫士实用多&#xff0c;没有任何弹屏广告&#xff0c;完全免费使用&#xff0c;内存清理…

搜索算法基础

一 DFS 深度优先搜索算法&#xff08;Depth First Search&#xff0c;简称DFS&#xff09;&#xff1a;一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件&#xff0c;搜…

uboot的烧写及使用

目录 一、uboot概述 Bootloader Bootloader基本功能 常见的Bootloader 二、SD卡启动盘制作 三、uboot的使用 3.1uboot模式 3.2uboot帮助命令 3.3uboot环境变量命令 3.4常用环境变量 3.5网络传输命令 3.6u-boot访问存储器命令 3.7 u-boot自启动环境变量&#xff08…

人工智能趋势——2023 年综述

随着DALLE 2 于 2022 年 4 月的宣布&#xff0c;关于2022 年初第三个 AI 冬天——或 AI 撞墙——的预言过时得很快而且效果不佳&#xff0c;随后出现了更多主要由扩散模型驱动的文本到图像应用程序&#xff0c;这是一个非常多产的领域用于计算机视觉研究及其他领域。AI 的 2022…

SpringCloud五大核心组件

Consul 等&#xff0c;提供了搭建分布式系统及微服务常用的工具&#xff0c;如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等&#xff0c;满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka …

六百亿流量、25万出场费,袁树雄身价是《汉川》杨语莲125倍

在文章开始之前&#xff0c;咱们不妨先看两组数据&#xff0c;第一组数据是六百个亿&#xff0c;第二组数据则是二十五万。乍一看并没有什么特别&#xff0c;但是要把这两组数据&#xff0c;和一名音乐人联系起来的话&#xff0c;就会产生非常神奇的效果。 《早安隆回》的创作者…

[oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果

字体样式 回忆上次内容 m 可以改变字体样式 0-10 之间设置的都是字体效果 0 复原1 变亮2 变暗 从3到10 又是什么效果 呢&#xff1f;&#xff1f;真的可以blink闪烁吗&#xff1f;&#x1f441; 3m 3m 实现斜体字的效果 4m 4m 对应着下划线 控制范围 通过控制字符串的位置…

DNS服务解析与原理笔记

引言DNS介绍DNS原理与解析DNS查询DNS服务搭建DNS劫持和污染计算机面试 or 真题DNS应用扩展参考与推荐引言 我想很多人遇到过这样一种情况&#xff0c;电脑突然上不了网了&#xff0c;或者说可以登陆QQ&#xff0c;但是进不了网页&#xff0c;任何网页都会出现如下的类似截图&a…

Android.mk文件编写

来源&#xff1a;https://www.jianshu.com/p/9aab51f4cd6f 1. Android.mk 介绍 Android.mk 是Android 提供的一种makefile 文件&#xff0c;注意用来编译生成 exe(二进制可执行文件)、so(动态库文件)、a(静态库文件)、jar(jar包) 和 apk 等文件。Android.mk和一个或多个.c的源…

PWN入门程序装载与虚拟内存 小白笔记

1.源代码到执行源代码test.c从磁盘中&#xff0c;通过gcc编译成a.out&#xff08;可执行文件&#xff09;。执行的时候&#xff0c;是将磁盘中的可执行文件&#xff08;a.out&#xff09;映像到内存中。2.节视图和段视图节视图&#xff08;磁盘中的可执行文件&#xff09;不同的…