恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

非局部均值降噪算法:原理、实现与参数调优实战

  • 首页
  • 资讯中心
  • /
  • 非局部均值降噪算法:原理、实现与参数调优实战

相关资讯

.NET Core WebAPI GET请求参数收不到?模型绑定原理与排查实战 2026/10/12 18:50:09
Spring依赖注入原理与实战:从IoC容器到三级缓存与踩坑指南 2026/10/12 18:50:09
微信小程序养老服务平台:从架构设计到部署实战解析 2026/10/12 18:50:09

最新资讯

基于FEKO的二维ISAR成像仿真与距离-多普勒处理
红楼梦人物关系图谱与问答系统:Python知识图谱构建实战
用 Microsoft Agent Framework 构建 SubAgent(Multi-Agent):把 Codex auth.json 改到 TaoToken 的实操大纲
深度强化学习实现动态避障路径规划:PPO与双目标奖励设计实战
基于Python的PDF知识图谱构建与检索源码实战
java.lang.foreign受限方法报错排查:--enable-native-access模块授权指南

今日推荐

Debian新手入门:从部署到日常操作的完整指南
MongoDB复制集扩缩容实战:从rs.add到选主事故复盘
条形码目标检测数据集实战:从YOLOv8训练到部署

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

非局部均值降噪算法:原理、实现与参数调优实战

发布时间:2026/10/12 18:50:09
非局部均值降噪算法:原理、实现与参数调优实战 1. 图像降噪算法——非局部均值降噪算法1.1 为什么传统降噪总是“糊”掉细节做过图像处理的人都有一个共同体会降噪和保边是一对天生的冤家。你拿一个高斯滤波去处理一张带噪点的照片噪点是没了但头发丝、纹理、边缘全部糊成一团。换成中值滤波对椒盐噪声效果不错但遇到高斯噪声就力不从心而且窗口一大细小的角点就被抹平了。双边滤波算是往前迈了一大步它引入了像素值差异作为权重能在一定程度上保住边缘但双边滤波本质上还是在一个局部窗口里做文章——窗口就那么大它能看到的“上下文”非常有限。问题的根源在于局部滤波算法只利用了像素周围一个小邻域的信息。当噪声强度较高时这个小邻域里的信息本身就被噪声污染了你拿被污染的信息去估计中心像素的真实值结果自然好不到哪里去。这就好比你想知道一个人说话是否靠谱但你只问了他身边的一个人而这个人本身就在传谣那你得到的结论大概率也是错的。非局部均值降噪算法Non-Local Means简称NLM的思路完全不同。它的核心洞察是图像中充满了自相似性。一片树叶的纹理在图像的其他位置大概率还能找到相似的纹理块一堵砖墙的图案隔几块砖之后又会重复出现。既然相似的图像块在整幅图中反复出现那我为什么不把所有相似块的像素值加权平均起来用这个平均值来估计当前像素的真实值呢这个“所有相似块”的范围不是一个小窗口而是整幅图像。这就是“非局部”三个字的含义——搜索范围不再局限于局部邻域而是扩展到全局。这个思路的转变带来的效果是显著的。因为参与平均的像素数量大幅增加而且这些像素来自图像中真正相似的区域所以噪声被平均掉的同时真实的纹理和边缘信息得以保留。当然代价也很明显计算量急剧上升。一幅512×512的图像如果对每个像素都在全图范围内搜索相似块计算复杂度是O(N²×patch_size)N是像素总数这个量级在早期硬件上几乎是不可接受的。但好在后来有一系列加速策略让NLM从论文走向了实用。1.2 非局部均值到底“非”在哪里要理解NLM最关键的是理解它的权重计算方式。传统局部滤波的权重只取决于空间距离——离中心像素越近权重越大。NLM的权重取决于图像块之间的相似度——两个图像块长得越像权重越大。具体来说对于图像中的每一个像素iNLM算法会以i为中心取一个小的图像块比如7×7然后在整个图像或一个较大的搜索窗口中滑动另一个同样大小的图像块计算这两个块之间的欧氏距离。距离越小说明两个块越相似对应的权重就越大。最终像素i的估计值就是所有搜索到的像素值的加权平均。这里有一个非常重要的细节计算块之间距离时不是简单地比较单个像素而是比较整个块。这意味着即使两个块的中心像素值差异较大只要它们周围的纹理模式相似仍然会被赋予较高的权重。这就使得NLM对噪声的鲁棒性远强于逐像素比较的方法。权重的计算公式通常采用高斯核形式w(i,j) exp(-||v(i) - v(j)||² / h²)其中v(i)和v(j)分别是以i和j为中心的图像块||·||²是块之间的欧氏距离平方h是滤波参数控制权重的衰减速度。h越大权重分布越平缓降噪越强但细节损失也越多h越小权重越集中在最相似的块上保边越好但降噪力度减弱。还有一个归一化步骤所有搜索到的权重之和作为分母确保加权平均的结果不会因为权重总和不为1而产生亮度偏移。这个细节看似简单但在实际实现中如果漏掉输出图像会出现整体偏亮或偏暗的问题。1.3 搜索窗口与图像块大小的权衡在实际实现NLM时有两个参数直接决定了算法的效果和速度搜索窗口大小和图像块大小。搜索窗口决定了“去哪里找相似块”。理论上搜索范围越大越好因为找到真正相似块的概率更高。但计算量随搜索窗口面积线性增长。常见的折中方案是搜索窗口取21×21或31×31也就是在每个像素周围±10到±15的范围内搜索。对于纹理重复周期较长的图像可能需要更大的搜索窗口但大多数自然图像在21×21的范围内已经能找到足够多的相似块。图像块大小决定了“用什么标准判断相似”。块太小比如3×3对噪声敏感两个块可能因为噪声的随机性而看起来不相似块太大比如15×15计算量增加而且对于非平稳纹理区域大块反而会引入不相关的信息。7×7是一个经验上比较平衡的选择既能捕捉局部纹理结构又不会因为块太大而失去对细节的敏感性。对于纹理非常细密的图像可以降到5×5对于平滑区域较多的图像可以升到9×9。这两个参数的选择没有绝对的最优解需要根据图像内容和噪声水平来调整。我的经验是先固定块大小为7×7然后调整搜索窗口。如果发现降噪后仍有明显残留噪声说明搜索窗口可能太小相似块数量不够如果发现细节被过度平滑说明搜索窗口太大引入了太多不相似的块。2. 从数学公式到代码实现2.1 权重计算的数学推导与直觉解释NLM的数学表达看起来简洁但每一步都有明确的物理意义。设含噪图像为v {v(i) | i ∈ Ω}Ω是图像像素集合。对于每个像素i估计值NLM v 定义为NLM v Σ_{j∈S_i} w(i,j) · v(j) / Σ_{j∈S_i} w(i,j)其中S_i是以i为中心的搜索窗口内的像素集合w(i,j)是权重定义为w(i,j) exp(-max(d²(i,j) - 2σ², 0) / h²)这里d²(i,j)是图像块v(N_i)和v(N_j)之间的欧氏距离平方N_i表示以i为中心的图像块邻域。注意公式中有一个max(d² - 2σ², 0)的操作这是为了补偿噪声方差的影响。因为两个块之间的距离包含了噪声的贡献如果两个块实际上完全一样但由于噪声的存在它们的距离不会为零而是大约为2σ²每个块贡献σ²。减去2σ²之后真正相似的块之间的距离就接近零权重接近1。这个细节非常关键。如果不做这个补偿在噪声强度较高时所有块之间的距离都会被噪声“抬高”导致权重分布变得平坦降噪效果退化为简单的平均滤波。我见过不少实现版本漏掉了这个补偿项结果在高噪声图像上表现很差排查了半天才发现问题出在这里。h参数控制权重的衰减速度。h越大exp函数的衰减越慢更多块获得可观的权重降噪更强但细节模糊h越小权重集中在少数最相似的块上保边更好但可能残留噪声。h的典型取值与噪声标准差σ相关常见经验是h k·σk在0.8到1.2之间。如果噪声估计准确这个经验公式能给出不错的起点。2.2 纯Python实现理解算法本质为了真正理解NLM我建议先用纯Python配合NumPy实现一个基础版本。虽然速度慢但能让你看清每一步在做什么。下面是一个可直接运行的实现import numpy as np from numpy.lib.stride_tricks import sliding_window_view def nlm_denoise(image, patch_size7, search_window21, h10.0, sigma10.0): 基础非局部均值降噪实现 image: 输入灰度图像float类型范围0-255 patch_size: 图像块大小奇数 search_window: 搜索窗口大小奇数 h: 滤波参数 sigma: 噪声标准差估计 pad patch_size // 2 search_pad search_window // 2 # 边界填充避免索引越界 padded np.pad(image, pad search_pad, modereflect) output np.zeros_like(image) height, width image.shape patch_half patch_size // 2 # 预计算所有图像块利用sliding_window_view加速 patches sliding_window_view(padded, (patch_size, patch_size)) for i in range(height): for j in range(width): # 当前像素在padded中的坐标 ci i search_pad cj j search_pad # 当前块 current_patch patches[ci, cj] # 搜索窗口范围 i_min max(0, ci - search_pad) i_max min(patches.shape[0], ci search_pad 1) j_min max(0, cj - search_pad) j_max min(patches.shape[1], cj search_pad 1) # 提取搜索窗口内的所有块 search_patches patches[i_min:i_max, j_min:j_max] # 计算块之间的距离平方 diff search_patches - current_patch distances np.sum(diff ** 2, axis(2, 3)) # 噪声补偿 distances np.maximum(distances - 2 * sigma ** 2, 0) # 计算权重 weights np.exp(-distances / (h ** 2)) # 归一化并加权平均 weights_sum np.sum(weights) if weights_sum 0: # 搜索窗口内对应的像素值 pixel_values padded[i_min patch_half : i_max patch_half, j_min patch_half : j_max patch_half] output[i, j] np.sum(weights * pixel_values) / weights_sum else: output[i, j] image[i, j] return output这段代码虽然效率不高双重循环遍历每个像素但逻辑非常清晰。你可以用它来验证理解也可以在小图上做实验。几个关键点sliding_window_view是NumPy提供的滑动窗口视图避免了显式的块提取循环distances的计算利用了广播机制一次性算出搜索窗口内所有块与当前块的距离噪声补偿项2 * sigma ** 2必须加上否则高噪声下效果会明显变差。2.3 加速策略从分钟级到秒级上面的纯Python实现在512×512图像上可能要跑好几分钟完全无法实用。实际项目中必须做加速。常见的加速策略有三类第一类搜索窗口限制。这是最简单的加速把全图搜索改为局部搜索窗口。虽然理论上损失了一些找到相似块的机会但自然图像中真正相似的块通常不会离得太远除非是周期性纹理所以21×21或31×31的搜索窗口已经能覆盖绝大多数有用信息。这一招能把计算量降低一到两个数量级。第二类块预筛选。在计算精确的块距离之前先用一个廉价的指标筛掉明显不相似的块。比如先计算块均值和方差如果两个块的均值和方差差异很大直接跳过不计算逐像素距离。这个策略能减少30%到50%的计算量而且几乎不影响最终效果。第三类快速算法。这是学术界研究的热点比如基于FFT的块距离计算、基于PCA的块降维、基于积分图的均值方差快速计算等。其中比较实用的是利用积分图快速计算块均值和方差以及利用FFT将块距离计算转化为频域乘法。这些方法能把复杂度从O(N²·P²)降到O(N²·logP)甚至更低。在实际工程中我通常采用“搜索窗口限制 块预筛选 积分图”的组合方案。这个组合在保持效果基本不变的前提下能把512×512图像的降噪时间从几分钟降到几秒钟。如果还需要更快可以考虑用C重写核心循环或者用OpenCV的fastNlMeansDenoising函数它内部已经做了高度优化。2.4 OpenCV实战一行代码的降噪如果你不想自己造轮子OpenCV提供了现成的NLM实现。对于灰度图import cv2 # 读取图像 img cv2.imread(noisy_image.png, cv2.IMREAD_GRAYSCALE) # 非局部均值降噪 denoised cv2.fastNlMeansDenoising( img, None, # 输出图像None表示自动创建 h10, # 滤波参数越大降噪越强 templateWindowSize7, # 图像块大小 searchWindowSize21 # 搜索窗口大小 ) cv2.imwrite(denoised.png, denoised)对于彩色图像用cv2.fastNlMeansDenoisingColored它会自动转换到LAB空间对亮度通道做NLM降噪对色度通道做更强的平滑。这个细节很重要人眼对亮度噪声更敏感对色度噪声相对不敏感所以分开处理能在降噪和保色之间取得更好的平衡。OpenCV的h参数和前面公式里的h含义一致但OpenCV内部做了一些归一化处理所以实际取值和纯Python实现可能略有不同。对于σ10左右的噪声h10是个不错的起点σ20时h可以取15到20σ30时h取25左右。如果发现降噪后图像偏暗或偏亮检查一下输入图像的数据类型和范围OpenCV的NLM对输入范围比较敏感。3. 参数调优与效果评估3.1 h参数降噪力度与细节保留的平衡杆h参数是NLM中最重要的调节旋钮。它的物理含义是权重衰减的特征尺度h越大exp(-d²/h²)衰减越慢更多块获得可观的权重降噪更强但细节模糊h越小权重集中在少数最相似的块上保边更好但可能残留噪声。调h的经验法则先估计噪声标准差σ然后从h σ开始试。如果降噪不够逐步增大h每次增加20%左右直到噪声可接受或细节开始明显损失。如果细节损失太快说明h偏大或者搜索窗口/块大小设置不合理。有一个容易被忽视的点h的最优值不仅取决于噪声强度还取决于图像本身的纹理丰富程度。纹理丰富的图像比如草地、毛发需要较小的h来保住细节平滑区域较多的图像比如天空、皮肤可以用较大的h来获得更干净的降噪效果。如果图像中既有丰富纹理又有大片平滑区域可以考虑分区处理或者用自适应h——在纹理区域用小h在平滑区域用大h。3.2 噪声估计没有准确的σ就没有准确的h前面提到h的起点是噪声标准差σ但实际中我们往往不知道σ是多少。这时候需要从含噪图像中估计噪声水平。最简单的方法是用一个高通滤波器比如拉普拉斯算子提取图像的高频成分然后计算这些高频成分的标准差。因为噪声主要集中在高频而自然图像的高频成分相对较少所以这个标准差可以近似作为噪声水平的估计。更精确的方法是利用图像的小波变换。在小波域中噪声主要分布在细节子带而图像结构分布在近似子带和部分细节子带。通过对细节子带的鲁棒中位数估计可以得到比较准确的σ估计。这个方法在学术论文中很常见实现也不复杂OpenCV和scikit-image都有现成的函数。如果噪声估计偏差较大NLM的效果会明显下降。σ估计偏小会导致h偏小降噪不足σ估计偏大会导致h偏大细节被过度平滑。我的建议是如果对噪声水平没有把握宁可稍微高估一点因为NLM对h偏大的容忍度高于h偏小。h偏小会留下明显噪声视觉上很刺眼h偏大虽然会损失一些细节但整体观感通常更干净。3.3 客观指标与主观感受的取舍评估降噪效果时PSNR和SSIM是最常用的客观指标。PSNR衡量像素级误差SSIM衡量结构相似性。一般来说NLM在PSNR和SSIM上都能显著优于高斯滤波和双边滤波尤其是在高噪声场景下。但客观指标高不代表视觉效果好。我遇到过不少情况PSNR最高的参数组合视觉上反而觉得细节被抹得有点过。这是因为PSNR对平滑区域的误差更敏感而人眼对纹理区域的细节损失更敏感。所以在实际项目中我通常把PSNR/SSIM作为粗筛工具最终参数还是靠肉眼在关键区域比如人脸、文字、纹理上对比确定。一个实用的技巧是把降噪前后的图像并排显示然后放大到100%甚至200%重点观察边缘和纹理区域。如果边缘出现“水彩化”效果颜色块状化、边缘模糊说明h偏大或搜索窗口太大如果纹理区域出现“塑料感”细节被抹平但噪声残留说明块大小可能不合适试试减小块大小或增大搜索窗口。4. 常见问题与排查技巧实录4.1 降噪后图像整体偏亮或偏暗这是NLM实现中最常见的问题之一几乎每个自己写NLM的人都会遇到。根本原因是权重归一化没做对。NLM的输出是加权平均权重之和必须为1否则输出值会整体偏移。检查你的代码output[i,j] sum(weights * pixel_values) / sum(weights)分母的sum(weights)不能漏。如果漏了输出值会变成sum(weights * pixel_values)而权重之和通常远大于1所以图像会严重偏亮。还有一种情况是权重计算时用了未补偿的块距离导致所有块的权重都接近零因为距离被噪声抬高了归一化时分母接近零数值不稳定。加上max(d² - 2σ², 0)补偿后这个问题就解决了。4.2 边缘出现“鬼影”或“重影”NLM的一个潜在问题是如果图像中存在多个相似的块但它们的中心像素值差异较大比如周期性纹理的亮暗交替加权平均后可能在边缘附近产生不自然的过渡看起来像“鬼影”。这种情况在搜索窗口较大、h较大时更容易出现。解决方法有两个一是减小搜索窗口避免引入太远的相似块二是减小h让权重更集中在最相似的块上。如果图像本身有强烈的周期性纹理可以考虑在权重计算时加入空间距离惩罚项让距离较远的块权重适当降低。这个惩罚项不是NLM的标准组成部分但在处理周期性纹理时很有效。4.3 计算速度太慢无法实用这是NLM最大的痛点。纯Python实现慢是必然的即使NumPy向量化后全图搜索的复杂度仍然很高。实用的加速方案按优先级排列限制搜索窗口到21×21或31×31这是最有效的加速手段通常能提速10倍以上。用积分图预计算块均值和方差快速筛掉不相似的块再提速2到3倍。用C重写核心循环或者直接用OpenCV的fastNlMeansDenoising它内部用了多种优化速度比纯Python快几百倍。如果对实时性要求极高可以考虑用GPU加速。NLM的并行性很好每个像素的处理相互独立非常适合CUDA或OpenCL实现。4.4 彩色图像降噪后颜色失真彩色图像直接对RGB三个通道分别做NLM容易出现颜色失真。因为RGB通道之间存在相关性分别处理会破坏这种相关性导致颜色偏移。正确的做法是转换到LAB或YUV空间对亮度通道做NLM降噪对色度通道做更强的平滑因为人眼对色度噪声不敏感。OpenCV的fastNlMeansDenoisingColored就是这么做的效果比直接处理RGB好很多。如果不想用OpenCV自己转换到LAB空间也不复杂。用cv2.cvtColor(img, cv2.COLOR_BGR2LAB)转换对L通道做NLM对A和B通道做高斯模糊或中值滤波然后再转回BGR。这个流程在大多数彩色图像上都能取得不错的效果。4.5 常见问题速查表问题现象可能原因排查方法解决方案输出整体偏亮/偏暗权重未归一化检查分母是否漏掉加上/ sum(weights)高噪声下效果差缺少噪声补偿检查距离计算加上max(d²-2σ², 0)边缘鬼影搜索窗口或h太大减小参数对比减小搜索窗口或h速度太慢全图搜索计时各步骤限制搜索窗口预筛选彩色失真RGB分别处理检查处理空间转LAB空间处理细节过度平滑h太大或块太大减小h对比减小h或块大小噪声残留明显h太小或搜索窗口太小增大h对比增大h或搜索窗口5. 非局部均值在真实项目中的落地经验5.1 医学影像低剂量CT的降噪利器在医学影像领域低剂量CT可以在减少辐射剂量的同时获得诊断图像但代价是噪声显著增加。NLM在低剂量CT降噪中表现突出因为医学图像中存在大量重复结构比如骨骼的周期性纹理、器官的对称性NLM能充分利用这些自相似性。实际落地时需要注意医学图像的噪声模型通常不是简单的高斯噪声而是泊松噪声或混合噪声。直接套用高斯噪声假设的NLM效果会打折扣。解决方案是先做方差稳定变换比如Anscombe变换把泊松噪声转化为近似高斯噪声再用NLM降噪最后做逆变换。这个流程在低剂量CT处理中已经是标准做法。另一个经验是医学图像对细节保真度要求极高h参数通常取得比较保守宁可残留少量噪声也不能抹掉病灶特征。我参与过的一个项目中h取到了σ的0.6倍虽然PSNR不是最高但临床医生反馈病灶边缘的清晰度最好。5.2 手机摄影夜景模式的幕后功臣手机夜景模式的核心挑战是在极低光照下拍出干净的照片。由于传感器尺寸限制手机在暗光下必须提高ISO导致噪声急剧增加。NLM是夜景降噪流水线中的重要一环通常和多帧对齐、多帧融合配合使用。手机端的NLM实现必须考虑功耗和延迟。全图搜索的NLM在手机上跑不动所以实际产品中通常用限制搜索窗口的版本配合降采样策略——先在低分辨率上做NLM降噪再上采样回原分辨率最后用双边滤波做后处理。这个策略能在保证效果的同时把计算量降低到可接受范围。还有一个细节手机图像的噪声在不同亮度区域强度不同暗部噪声大亮部噪声小。所以实际产品中通常用噪声曲线noise profile来指导h参数的选择暗部用大h亮部用小h。这个自适应策略比固定h的效果好很多。5.3 视频降噪时域信息的引入视频降噪比单帧图像降噪多了一个维度时间。相邻帧之间的内容高度相似这为降噪提供了额外的信息。把NLM从空间域扩展到时空域就是所谓的“非局部时空降噪”。具体做法是在搜索相似块时不仅搜索当前帧的空间邻域还搜索前后几帧的对应区域。时空NLM的效果通常优于纯空间NLM因为时间维度提供了更多的相似块平均后噪声更低。但挑战也很明显运动物体导致帧间对应关系不准确直接搜索会引入运动模糊。解决方案是先做运动估计然后在运动补偿后的帧上做时空搜索。这个流程计算量很大通常需要硬件加速。在实际视频项目中我通常用时空NLM处理关键帧用纯空间NLM处理非关键帧在质量和速度之间取得平衡。如果对实时性要求极高可以只用空间NLM但把搜索窗口适当增大效果也能接受。5.4 参数调优的实战心得经过多个项目的积累我总结了一套NLM参数调优的流程分享出来供参考第一步估计噪声标准差σ。用拉普拉斯算子或小波方法得到σ的粗略估计。第二步设置初始参数块大小7×7搜索窗口21×21h σ。第三步在测试图像上跑一遍观察降噪效果。如果噪声残留明显增大h到1.2σ如果细节损失明显减小h到0.8σ。第四步如果调整h后效果仍不理想调整搜索窗口。噪声残留多就增大搜索窗口到31×31细节损失多就减小到15×15。第五步如果图像纹理特别细密把块大小降到5×5如果图像比较平滑把块大小升到9×9。第六步用PSNR/SSIM做粗筛然后肉眼在关键区域做最终确认。这套流程在大多数图像上都能在半小时内找到不错的参数组合。当然如果图像内容特别复杂可能需要更细致的分区调参。5.5 一个容易被忽视的细节边界处理NLM在图像边界处需要特别注意。因为搜索窗口可能超出图像范围如果不做边界填充边界像素的搜索范围会缩小导致降噪效果不一致。常见的做法是镜像填充reflect padding把边界外的像素用镜像值填充。这样边界像素也能获得完整的搜索窗口降噪效果和内部像素一致。但镜像填充也有副作用如果图像边界处有强边缘镜像填充会复制这个边缘导致边界附近的相似块搜索出现偏差。对于这种情况可以考虑用常数填充比如填0或者重复填充replicate padding。具体用哪种取决于图像内容和应用场景。我的经验是自然图像用镜像填充通常没问题如果是拼接图像或边界有明显结构的图像用重复填充更稳妥。6. 从NLM到现代降噪思路的延续与演变NLM的核心思想——利用图像的自相似性进行非局部平均——深刻影响了后续的降噪算法。BM3DBlock-Matching and 3D filtering可以看作是NLM的进化版它先把相似的块堆叠成3D数组然后在3D变换域做滤波效果比NLM更好但计算量也更大。深度学习时代的DnCNN、FFDNet等网络本质上也是在大量数据上学习“如何找到相似模式并加权平均”只是用卷积网络替代了手工设计的相似度度量。理解NLM的价值不仅在于它会用更在于它提供了一个思考框架降噪的本质是利用图像中的冗余信息。空间冗余邻域相似、结构冗余纹理重复、时间冗余帧间相似、变换域冗余频域稀疏各种降噪算法无非是在不同维度上挖掘这些冗余。NLM挖掘的是结构冗余这是它区别于局部滤波的根本所在。在实际项目中NLM通常不是孤立的降噪步骤而是流水线中的一环。比如在图像超分辨率中NLM用于预处理降噪在图像压缩中NLM用于后处理去除压缩伪影在计算摄影中NLM用于多帧融合前的单帧降噪。理解NLM的优缺点知道它在什么场景下最有效比单纯会调参更重要。我个人在实际操作中的体会是NLM在中等噪声水平σ在10到30之间下性价比最高降噪效果明显优于局部滤波计算量虽然大但通过限制搜索窗口可以接受。在极低噪声σ5下NLM的优势不明显用双边滤波或导向滤波更快在极高噪声σ50下NLM虽然有效但参数很难调往往需要配合其他方法。最后再分享一个小技巧如果图像中有大面积平滑区域可以先对平滑区域做快速降噪只对纹理区域做NLM这样能在几乎不损失效果的前提下大幅提速。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号