非局部均值滤波实践
平滑滤波方法研究

平滑滤波方法研究平滑滤波是低频增强的空间域滤波技术。
它的目的有两类:一类是模糊;另一类是消除噪音。
并且具有一定的处理要求,一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。
平滑滤波的方法有邻域平滑滤波,就是求邻近像元点的平均亮度值,双边滤波,中值滤波,以及非局部均值滤波等。
1、双边滤波法双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。
双边滤波的边缘保持特性主要是通过在卷积的过程中组合空域函数和值域核函数来实现的,典型的核函数为高斯分布函数,如下所示:其中:为归一化作用。
σs为空域高斯函数的标准差,σr为值域高斯函数的标准差,Ω表示卷积的定义域。
编写代码测试,当添加的噪声为0.05时,结果如下滤波后图像添加噪声为0.3时,结果如下滤波后图像由此可知,双边滤波具有去除噪音的作用2、邻域平均法邻域平滑滤波原理:邻域平均法就是对含噪声的原始图像f(x,y)的每一个像素点取一个邻域,计算S中所有像素灰度级的平均值,作为邻域平均处理后的图像g(x, y)的像素值。
即式中:x,y=0,1,…,N-1;S是以(x,y)为中心的邻域的集合,M是S 内的点数。
邻域平均法的思想是通过一点和邻域内像素点求平均来去除突变的像素点,从而滤掉一定噪声,其优点是算法简单,计算速度快,其代价会造成图像在一定程度上的模糊。
3、中值滤波法中值滤波就是用一个奇数点的移动窗口,将窗口的中心点的值用窗口内的各点中值代替。
假设窗口内有五点,其值为80、90、200、110和120,那么此窗口内各点的中值及为110。
设有一个一维序列f1,f2,…,fn,取窗口长度(点数)为m(m为奇数),对其进行中值滤波,就是从输入序列中相继抽出m个数fi-v,…,fi-1,fi,fi+1,…,fi+v(其中fi为窗口中心值,v=(m-1)/2),再将这m个点按其数值大小顺序排序,取其序号的中心点的那个数作为滤波输出。
数学公式表示为:Yi=Med{fi-v,…,fi-1,fi,fi+1,…,fi+v} i∈N v=(m-1)/2 (式1-2)Yi称为序列fi-v,…,fi-1,fi,fi+1,…,fi+v的中值例如,有一序列{0,3,4,0,7},重新排序后为{0,0,3,4,7}则Med{0,0,3,4,7}=3。
NLM的一些理解

非局部均值处理的基本思想和优点1.非局部均值的基本思想基本思想是:当前像素点的灰度值与图像中所有与其结构相似的像素点加权平均得到。
非局部均值滤波的思想主要基于一个事实:对图像中任意一块小窗口图像块,会有许多与之相似的图像块。
与空间域滤波方法相比,这个方法的不同之处在于不需要局部约束。
非局部均值去噪算法主要利用数字图像中存在大量的自相似块这些冗余信息,通过建立待去噪像素点邻域与搜索区域的像素点邻域的相似性测度,计算搜索区域各像素点与待去噪像素点的相似度权重,然后对搜索区域内的像素点进行加权平均,从而计算得到待去噪像素点新的灰度值。
非局部算法的思想简单却十分可行,但是逐个像素点处理必然导致计算复杂度太大,因此还有很多改进的余地。
非局部均值的核心思想有点类似于小波基等一类的基构造思想。
在对图像进行处理时,利用图像局部的相似性。
对于每个像素的权值, 采用以它为中心图像子块(一般取7*7)与以当前像素为中心子块之间的高斯加权欧氏距离来计算, 权值设为此距离的负指数函数值。
这样做的好处是在估计当前像素值时, 局部结构上与它相似的像素权重较大, 而结构相似像素上叠加的噪声是随机的, 因而通过加权均值可有效去除噪声。
设v(i)和“u(i)分别表示含噪图片和原始图片,其中f表示像素位置。
非局部均值算法可由下面的公式描述:其中,NL(v)(i)表示在i像素位置处进行滤波得到的新像素灰度值。
加权系数的大小由两个像素点的邻域的相似性决定:其中,表示高斯加权距离,是归一化系数。
2.非局部均值处理的优缺点由于NL-Means算法在对每个像素的加权平滑过程中考虑了局部结构的相似性, 取得了很高的滤噪效果。
虽然NLM有优异的去噪性能,但是过高的计算复杂度极大的限制了它的发展和应用。
计算图像块之间相似性的匹配过程是NLM算法中的关键技术,NLM 中所用的加权平均系数即由此得到。
然而,图像的块是一个高维的向量,直接对其进行匹配运算比较图像块问相似性会造成算法复杂度急剧增大;另外NLM对图中所有的点的邻域块都直接进行相似性比较,在含噪情况下,这样得出的相似性权值准确性下降,容易对去噪结果造成一定的影响。
均值滤波代码

均值滤波代码一、什么是均值滤波?均值滤波是一种常用的图像处理方法,其基本思想是用一个固定大小的窗口在图像上滑动,将窗口内的像素值取平均值作为中心像素的新值。
这样做可以减少噪声对图像的影响,使得图像更加平滑。
二、均值滤波的应用场景均值滤波可以用于以下场景:1. 去除图像噪声:在数字图像处理中,由于各种原因(如传感器噪声、传输噪声等),图像中会出现各种噪声。
这些噪声会影响到图像质量和后续处理效果。
使用均值滤波可以有效地去除这些噪声。
2. 图像压缩:在某些情况下,为了减小存储空间或传输带宽,需要对图像进行压缩。
使用均值滤波可以减少冗余信息,从而实现更好的压缩效果。
3. 边缘检测:在某些边缘检测算法中,需要对原始图像进行平滑处理以消除干扰。
使用均值滤波可以实现这一目的。
三、均值滤波的代码实现以下是一份Python实现的均值滤波代码:```pythonimport cv2import numpy as npdef mean_filter(img, kernel_size):# 获取图像长宽height, width = img.shape[:2]# 创建一个空白图像用于存储滤波结果filtered_img = np.zeros((height, width), dtype=np.uint8)# 计算卷积核尺寸的一半,用于边缘填充half_kernel_size = kernel_size // 2# 边缘填充,使用复制法(也可以使用其他方法)padded_img = cv2.copyMakeBorder(img, half_kernel_size, half_kernel_size, half_kernel_size, half_kernel_size,cv2.BORDER_REPLICATE)# 对每个像素进行均值滤波for i in range(height):for j in range(width):filtered_img[i][j] = np.mean(padded_img[i:i+kernel_size, j:j+kernel_size])return filtered_img```四、代码解析1. 导入必要的库:导入OpenCV和NumPy库。
均值滤波实验的问题及解决方案

均值滤波实验的问题及解决方案介绍均值滤波是一种常用的图像处理技术,用于平滑图像并降低噪声。
然而,在实际应用中,均值滤波也存在一些问题,例如可能导致图像细节模糊、边缘模糊等。
本文将深入探讨均值滤波实验中的问题,并提供一些解决方案。
问题一:图像细节模糊均值滤波的原理是将图像中每个像素的值替换为其邻域像素值的均值。
然而,这种操作可能导致图像细节模糊,特别是在处理包含边缘、纹理等细节的图像时。
例如,对于一张包含文字的图像,均值滤波会导致文字变得模糊不清,影响图像的可读性。
解决方案1.调整滤波器的大小:增大滤波器的大小可以减轻细节模糊的问题。
大的滤波器可以更好地保留图像中的边缘信息,但也可能导致过多的平滑,因此需要权衡。
2.使用加权平均:在均值滤波中,所有像素被视为同等重要。
考虑使用加权平均,给予边缘像素更高的权重,以保留图像的细节。
问题二:边缘模糊均值滤波会平滑图像中的像素值,这也包括图片中的边缘。
因此,均值滤波可能导致边缘变得模糊不清,丧失图像中物体和边缘的形状信息。
解决方案1.使用边缘保护滤波器:边缘保护滤波器可以在滤波过程中保护边缘信息。
例如,常用的边缘保护滤波器有高斯滤波器、双边滤波器等,它们在平滑图像的同时保护边缘的锐利度。
2.多尺度滤波:通过使用多个不同尺度的滤波器,可以在不同程度上平滑图像并保留边缘信息。
例如,使用高斯金字塔或拉普拉斯金字塔进行多尺度滤波操作,可以减少边缘模糊的问题。
问题三:运算速度较慢均值滤波在计算过程中需要对所有像素进行遍历,并计算其邻域像素值的均值。
对于较大的图像,这可能会导致运算速度较慢,尤其是在实时应用中需处理大量图像流的情况下。
解决方案1.使用快速均值滤波算法:常见的快速均值滤波算法有积分图像、盒子滤波器等。
这些算法通过预先计算累积和或利用图像特性,在一定程度上提高了运算速度。
2.并行计算:利用现代图像处理硬件的并行计算能力,可以将均值滤波操作分配给多个处理单元同时计算,从而提高整体的运算速度。
均值滤波计算方法

均值滤波计算方法均值滤波的计算方法:首先将图像像素点灰度记录在数组中,然后设置方框半径的值,然后将方框中的所有点的像素求和取平均,得到的结果就是均值滤波后对应像素点的灰度值。
均值滤波优点:计算很快而且简单从算法可以看出,只是求了平均,并没有很复杂的计算缺点:得到的图像很模糊当方框的半径越大,得到的图像中那些变化较大的地方(边缘)计算后变化就越小,即边缘不明显,即模糊非局部均值滤波非局部均值滤波的基本原理与均值滤波类似,都是要取平均值,但是非局部均值滤波在计算中加入了每一个点的权重值,所以能够保证在相邻且相差很大的点在方框中求平均值时相互之间的影响减小,也就对图像边缘细节部分保留很多,这样图像看起来会更清晰。
1. 首先在一个点A周围取一个大的框(搜索框),设边长为s,A在方框的中心,然后再在方框中取小的方框,即相似框,设边长为d2. 那么在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点的灰度值。
贺兰山岩画的多尺度非局部滤波算法

将 图像 从变 换域 转换 到原 始 空 间 域 , 达 到 去 除 图像
噪声 的 目的. 小 波变 换 因具 有 时频 聚焦 、 多 分 辨率 、
第3 4 卷 第4 期
V0 1 . 3 4 No . 4
宁夏 大 学 学报 ( 自然科 学版 )
J o u r n a l o f Ni n g x i a Un i v e r s i t y ( Na t u r a l S c i e n c e E d i t i o n )
之后, B u a d e s等 人 l _ 1 进 一 步 提 出 了 基 于块 相 似度 量 的非 局部 均值 滤 波算 法 ( NL M) . 这一 算法 打
2 0 1 3 年1 2 月
De c .2 O1 3
文章编号 : 0 2 5 3 — 2 3 2 8 ( 2 0 1 3 ) 0 4 — 0 3 0 6 — 0 7
贺兰 山岩画的 多尺度非局部滤 波算 法
刘 国 军 , 张 选 德 , 马 月梅
( 1 . 宁夏 大 学 数 学 计 算机 学 院 , 宁夏 t l t ) l l 7 5 0 0 2 1 ; 2 . 宁夏 大 学 民 族预 科 教 育 学 院 , 宁夏 银 川 7 5 0 0 0 2 )
( B L二
声、 散粒 噪声 、 热 噪声 等 . 这些 噪声 的 存 在 影 响 了 图 像 的质 量 , 尤 其是 破坏 了像 素之 间 固有 的相关性 . 因 此, 图像 去噪 是边 缘检 测 、 分割、 目标 识 别 等 问题 的
数字图像处理之均值滤波

数字图像处理之均值滤波图像噪声,通常指图像中除了成像物体之外的其它信息,⽐如斑点和颗粒,这些额外的错误信息⼲扰了成像物体的显⽰,影响成像质量,所以往往需要通过图像滤波(也称为图像去噪)来消除这些噪点。
常见的图像滤波算法有均值滤波、⾼斯滤波、中值滤波、双边滤波、⾮局部均值滤波,以及近⼏年⽕热的基于深度学习的图像滤波等。
本章节将详细讲解均值滤波算法的原理,以及C++实现和优化。
⾸先膜拜⼀下那些写Opencv代码的⼤佬们,他们写的代码不仅稳定性良好,运⾏效率也超级⾼,很多时候我们费尽⼼思写了⼀个相同的算法,发现性能与Opencv的接⼝函数相⽐还是差了许多,所以会有⼀丢丢的⼼理落差,但是抱着学习的态度,追赶⼤佬的脚步,精益求精,相信我们⾃⼰也是可以的!均值滤波,也就是计算每⼀个像素点周围像素点(包括该点)的平均值,作为该像素点滤波之后的值,通常取以该像素点为中⼼的矩形窗⼝内的所有像素点来计算平均值,矩形窗⼝的⼤⼩⼀般为3*3,5*5,9*9,...,(2n+1)*(2n+1)。
窗⼝越⼤,滤波效果越好,但是图像也变得更加模糊,所以需要根据实际情况设置矩形窗⼝的⼤⼩。
⽐如3*3窗⼝的均值滤波如下图所⽰,点(x,y)的滤波值由其周围9个点(包括其⾃⾝)计算平均值得到。
上图中点(x,y)的滤波值⽤公式表⽰为:对于(2n+1)*(2n+1)窗⼝,点(x,y)的平均滤波值可根据如下公式计算:为了解决图像边缘像素点取不到完整矩形窗⼝的问题,通常先把图像的上、下边界扩充n⾏,左右边界扩充n列,实际计算时,只计算图像原有像素点的窗⼝平均值。
⽐如当矩形窗⼝为3*3,则n的值为1,这种情况下扩充边界的⽰意图如下图所⽰:根据以上原理,基于Opencv和C++的均值滤波实现代码如下:void blur_mean(Mat src, Mat &dst, int winsize){if(winsize&1) //如果窗⼝的边不是奇数,则加1使其为奇数,因为只有窗⼝的边为奇数的时候当前像素点才是窗⼝的中⼼点{winsize += 1;}const int winsize_2 = winsize/2; //winsize_2 就是上述公式中的nconst float winsize_num = winsize*winsize; //(2n+1)*(2n+1)Mat src_board;//调⽤Opencv的copyMakeBorder函数扩充边界copyMakeBorder(src, src_board, winsize_2, winsize_2, winsize_2, winsize_2, BORDER_REFLECT);const int row = src_board.rows; //⾏const int col = src_board.cols;Mat dst_tmp(src.size(), CV_8UC1); //列for(int i = winsize_2; i < row-winsize_2; i++) //⾏循环,只计算图像的原有⾏{for(int j = winsize_2; j < col-winsize_2; j++) //列循环,只计算图像的原有列{float sum = 0.0;//计算每⼀个像素点周围矩形区域内所有像素点的累加和for(int y = 0; y < winsize; y++){for(int x = 0; x < winsize; x++){sum += src_board.ptr<uchar>(i-winsize_2+y)[j-winsize_2+x];}}//求得累加和之后再求窗⼝像素的平均值。
基于分块处理的三维非局部均值降噪算法

V L3 o 6
・
计
算
机
工
程
21 0 0年 4月
Apr l20 0 i 1
N o7 .
Com put rEng n e i e i e rng
图形 图街 处理 ・ I
文章编号: o0 48 00 7_2o_4 文献 码: 10 2( 1 0—02_o —3 2 ) _ 标识 A
LI Ji U ng, LU - ho Liz ng, YA N n, H EN an Bi C Ji
( s tt o If r t nE gn eig P A I fr t nE gn eigUnv ri , h n z o 5 0 2 I t ue f n omai n ie r , L omai n ie r ies y Z e g h u4 0 0 ) n i o n n o n t
l 概述
工 业 C ( d s yC mp t ie o gah,C ) TI ut o ue zdT mo r y l T 系统 作 n r r p
为 最 佳 的 无损 检 测 技 术 之一 ,能 清 晰 、 准确 地 显 示 被检 物 内 部 清 晰 的 断层 图像 ,发现 缺 陷部 位 ,实现 无 接 触 的 无损 探 伤 检 测 J 。 锥 形 束 C ( oeB a o ue o gah, B T 系 TC n em C mp t T mo r y C C ) d p
p o e sn E p r n a e u t h r c s i g. x e i me t l s l s ow a i l o i m a u t r e tan n s , n t a g e o u a i a f c e c . r s t t h s g rt c n f r sr i oie a d i h shi h rc mp t t h t a h he r on l i in y e
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非局部均值滤波
实践
非局部均值滤波实践
非局部均值滤波是一种图像处理技术,用于降低图像中的噪声。
该算法通过计算图像中每个像素的邻域中像素的平均值来实现。
与传统的局部均值滤波不同,非局部均值滤波还考虑了整个图像中的像素,因此能够更好地保留图像的细节。
下面是非局部均值滤波的步骤:
1. 导入图像:首先,我们需要导入要处理的图像。
可以使用Python中的OpenCV库来完成这一步骤。
使用`cv
2.imread()`函数可以将图像加载到内存中,并使用`cv2.cvtColor()`函数将图像从BGR格式转换为灰度格式。
2. 添加噪声:为了测试非局部均值滤波的效果,我们需要在图像中添加一些噪声。
可以使用Python
中的NumPy库来生成随机的高斯噪声。
使用
`np.random.normal()`函数可以生成服从高斯分布的随机数,并使用`cv2.add()`函数将噪声添加到图像中。
3. 计算均值:对于每个像素,非局部均值滤波算法将计算其邻域内像素的均值。
邻域的大小是一个重要的参数,可以根据需要进行调整。
可以使用
`cv2.boxFilter()`函数来计算邻域内像素的均值。
4. 计算相似度:在非局部均值滤波中,还需要计算每个像素的相似度。
相似度可以通过计算像素的局部均方误差(MSE)来衡量。
使用`cv2.absdiff()`函数计算两个像素之间的差异,然后使用
`cv2.pow()`和`cv2.mean()`函数计算MSE。
5. 选择最佳像素:对于每个像素,找到与其相似度最高的像素,并将其作为非局部均值滤波后的像素值。
可以使用两个嵌套的循环来遍历整个图像,并使用条件语句来比较相似度。
6. 输出结果:将非局部均值滤波后的图像保存到本地。
可以使用`cv2.imwrite()`函数将图像保存为文件。
非局部均值滤波是一种强大的图像降噪算法,可以有效地去除图像中的噪声,并保留图像的细节。
然而,该算法的计算复杂度较高,因此在处理大型图像
时可能会变得很慢。
在实际应用中,可以根据需要进行参数调整,以获得最佳的滤波效果。
以上是非局部均值滤波的步骤,希望对你有所帮助!。