Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)

  • 1. 效果图
  • 2. 原理
  • 3. 源码
    • 2.1 单彩色图去噪
    • 2.2 多连续彩色帧去噪
  • 参考

这篇博客将介绍不同的计算摄影技术——非局部均值去噪(Non-Local Means Denoising),以去除图像中的噪声。OpenCV提供了4个方法实现该算法;

  • cv2.FastNLMeansDeoising() 适用于单个灰度图像
  • cv2.FastNLMeansDeoisingColor() 适用于彩色图像。
  • cv2.fastNlMeansDenoisingMulti() 适用于短时间内捕获的图像序列(灰度图像)
  • cv2.fastNlMeansDenoisingColoredMulti() 适用于短时间内捕获的图像序列(彩色图像)

1. 效果图

原图 VS 彩色图像去噪效果图1如下:

原图 VS 彩色图像去噪效果图2如下:
可以看到去噪的效果图右看起来更加磨皮美白了,颖宝更加动人了。

对彩色图像序列帧进行去噪,原图灰度图 VS 噪音图 VS 去噪效果图1如下:
可能因为图像的原因,看着不是很明显~

对彩色图像序列帧进行去噪,原图灰度图 VS 噪音图 VS 去噪效果图2如下:
用自己的数据集,效果看起来也基本差不多~

2. 原理

  • 前边学习几种图像平滑方法:如高斯模糊,均值模糊,中值模糊,它们在一定程度上很好地去除了少量的噪声。 这些技术在一个像素周围选取一个小邻域,并进行一些操作,如高斯加权平均、值的均值、中值等,以替换中心元素。简言之,像素处的噪声消除是其邻近区域的局部问题。

  • 与之前看到的模糊技术相比,非局部均值去噪需要更多的时间,但效果非常好。

  • 非局部均值去噪需要一组相似的图像来平均噪声。考虑图像中的一个小窗口(比如说5x5窗口)。同一补丁可能在图像中的其他地方的可能性很大。

  • 对于彩色图像,非局部均值去噪将图像转换为CIELAB颜色空间,然后分别对L和AB分量进行去噪。

  • h:决定过滤器强度的参数。较高的h值可以更好地去除噪声,但也可以去除图像的细节(建议10)
  • hForColorComponents:与h相同,但仅适用于彩色图像(通常与h相同)
  • TemplateWindowsSize: 应该是奇数(建议7)
  • SearchWindowsSize: 应该是奇数(建议21)

3. 源码

2.1 单彩色图去噪

# 图像去噪:非局部均值去噪(Non-Local MeansDenoising)# 前面已经学习了许多图像平滑技术,如高斯模糊、均值模糊、中值模糊等,它们在一定程度上很好地去除了少量的噪声。
# 这些技术在一个像素周围选取一个小邻域,并进行一些操作,如高斯加权平均、值的中值等,以替换中心元素。简言之,像素处的噪声消除是其邻近区域的局部问题。
# 需要一组相似的图像来平均噪声。考虑图像中的一个小窗口(比如说5x5窗口)。同一补丁可能在图像中的其他地方的可能性很大。# 与之前看到的模糊技术相比,它需要更多的时间,但效果非常好。
# 对于彩色图像,将图像转换为CIELAB颜色空间,然后分别对L和AB分量进行去噪。# 对单个彩色图像进行去噪
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('images/ml.jpg')dst = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([]), plt.yticks([]), plt.title("origin")
plt.subplot(122), plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.xticks([]), plt.yticks([]), plt.title("dst")
plt.show()

2.2 多连续彩色帧去噪

# 对彩色图像序列帧进行去噪
import cv2
import numpy as np
from matplotlib import pyplot as pltcap = cv2.VideoCapture('images/Megamind.avi')# 对前5帧创建一个lsit
img = [cap.read()[1] for i in range(5)]# 均转换为灰度图
gray = [cv2.cvtColor(i, cv2.COLOR_BGR2GRAY) for i in img]# 转换为float64
gray = [np.float64(i) for i in gray]# 填充一些噪声点 create a noise of variance 25
noise = np.random.randn(*gray[1].shape) * 10# 添加噪声到图像中
noisy = [i + noise for i in gray]# 转换为图像uint8
noisy = [np.uint8(np.clip(i, 0, 255)) for i in noisy]# 考虑5帧图像,对第2帧进行去噪,Denoise 3rd frame considering all the 5 frames
dst = cv2.fastNlMeansDenoisingMulti(noisy, 2, 5, None, 4, 7, 35)plt.subplot(131), plt.imshow(gray[2], 'gray')
plt.xticks([]), plt.yticks([]), plt.title("origin")plt.subplot(132), plt.imshow(noisy[2], 'gray')
plt.xticks([]), plt.yticks([]), plt.title("noise")plt.subplot(133), plt.imshow(dst, 'gray')
plt.xticks([]), plt.yticks([]), plt.title("dst")
plt.show()

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_photo/py_table_of_contents_photo/py_table_of_contents_photo.html#py-table-of-content-photo

Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)相关推荐

  1. python opencv 彩色图非局部平均去噪

    python opencv 彩色图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,N,h,templ ...

  2. python opencv 灰度图非局部平均去噪

    python opencv 灰度图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,h,templat ...

  3. 传统图像去噪方法(三)之非局部均值去噪(NLM)

    前面基于邻域像素的滤波方法,基本上只考虑了有限窗口范围内的像素灰度值信息,没有考虑该窗口范围内像素的统计信息如方差,也没有考虑整个图像的像素分布特性,和噪声的先验知识. NLM算法使用自然图像中普遍存 ...

  4. 全极化雷达遥感图像的迭代优化非局部均值去噪法

    文章提出了一种迭代优化的PolSAR的非局部均值去噪方法.该方法在每次迭代去噪过程中,通过同时考虑原始图像全极化噪声统计特性和前一次迭代所得影像的全极化信息来完善像素间极化相似性的度量,从而实现对影像 ...

  5. 非局部均值去噪(NL-means)

    非局部均值(NL-means)是近年来提出的一项新型的去噪技术.该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征.基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的 ...

  6. 非局部均值(Nonlocal-Mean)

    转载自网站:http://www.cnblogs.com/luo-peng/p/4785922.html 非局部均值去噪(NL-means) 非局部均值(NL-means)是近年来提出的一项新型的去噪 ...

  7. 经典非局部均值滤波(NLM)算法python实现(1)

    经典非局部均值滤波(NLM)算法python实现(单通道图像版本) 概述:非局部均值(NL-means)是近年来提出的一项新型的去噪技术.该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持 ...

  8. 学习使用非局部平均值去噪算法去除图像中的噪音-图像去噪

    图像去噪 目标 • 学习使用非局部平均值去噪算法去除图像中的噪音 • 学习函数 cv2.fastNlMeansDenoising(),cv2.fastNlMeansDenoisingColored() ...

  9. 非线性邻域滤波(NNFs)在MR-FBP图像重建算法中的应用(基于astra-toolbox开发, 实现双边滤波,非局部均值滤波(NLM)的惩戒项的改进,并进行MAE,MAR分析)

    本科荒废了两年,大三终于开始好好学习了,,,,但是跟无头苍蝇,只知道上课,大四即将找工作,心理慌得一批,由于自己太辣鸡,,,只能找到3,4000的,,,终于还是决定步入研究生大抗,,,上了后发现他娘的 ...

最新文章

  1. ALV报表中处理双击行项目事件
  2. 阿里与腾讯人的区别,就是明教与武当的反差
  3. 高考python必考题目_假如高考考python编程,这些题目你会几个呢?
  4. 机器学习基础:评价指标(Machine Learning Fundamentals: Evaluation Metrics)
  5. Ubuntu上的论文翻译软件 --- 兰译
  6. 骑士人才系统后台用户名密码重设工具源码
  7. 【环境部署】基于FreeSSL生成免费SSL证书
  8. wireshark保存文件集-解决pcap文件过大,打开极慢的问题
  9. react路由动画切换
  10. eclipse项目名前出现红色感叹号的原因及解决的方法
  11. QTextEdit的使用
  12. android bmob上传图片,Bmob+Android+ECharts 实现移动端数据上传与图表展示
  13. 幸福婚庆策划网管理系统
  14. npm run build 打包报错primordials is not defined的解决方法
  15. Kubernetes 中 Evicted pod 是如何产生的
  16. Ubuntu 安装 libvirt
  17. Jabber介绍(补充)
  18. Opencascade可视化--视图渲染流程分析
  19. Facebook最新Libra币开发指南---接口服务器开发
  20. 5G消息(RCS),到底是什么?

热门文章

  1. C/C++语言编程的隐患!
  2. 为什么要使用Retrofit封装OkHttp,而不单独使用OkHttp?
  3. 2021年大数据Spark(四十一):SparkStreaming实战案例六 自定义输出 foreachRDD
  4. DCN-cs6200 ipv6 6to4隧道
  5. Ubuntu系统执行shell 脚本的方法
  6. 常用样式积累-scss
  7. Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)
  8. 鸡啄米vc++2010系列32(标签控件Tab Control 下)
  9. 链接全局变量再说BSS段的清理
  10. Taglib原理和实现:再论El和JST