opencv python 图像去噪的实现方法


Posted in Python onAugust 31, 2018

在早先的章节里,我们看到很多图像平滑技术如高斯模糊,Median模糊等,它们在移除数量小的噪音时在某种程度上比较好用。在这些技术里,我们取像素周围的一小部分邻居,做一些类似于高斯平均权重,中值等替换掉中间的元素。简单说,移除一个像素的噪音是基于本地邻居的。

噪音有一个属性,噪音一般被认为是具有零平均值的随机变量。假设一个像素噪音,p = p0 + n, 其中p0是像素的真实值,n是那个像素的噪音。你可以从不同图像取大量的同一个像素(N)并计算他们的平均值,理想情况下,你应该得到p=p0,因为均值是0.

你可以自己通过一个简单例子验证一下。保持一个静止的摄像机对准一个位置多呆几秒,这会给你很多帧,或者是对一个场景的很多图像。然后写一些代码来找到视频里所有帧的平均值。比较最终的结果和第一帧。你可以看到噪点被去掉了。不幸的是这个简单的方法对于摄像机和场景的运动来说就不健壮了。而且经常你也只有一个噪音图像可用。

Image Denoising

OpenCV提供了这种技术的四种变体。

  • cv2.fastNlMeansDenoising() - 使用单个灰度图像
  • cv2.fastNlMeansDenoisingColored() - 使用彩色图像。
  • cv2.fastNlMeansDenoisingMulti() - 用于在短时间内捕获的图像序列(灰度图像)
  • cv2.fastNlMeansDenoisingColoredMulti() - 与上面相同,但用于彩色图像。

Common arguments:

  1. h:参数决定滤波器强度。较高的h值可以更好地消除噪声,但也会删除图像的细节 (10 is ok)
  2. hForColorComponents:与h相同,但仅适用于彩色图像。 (通常与h相同)
  3. templateWindowSize:应该是奇数。 (recommended 7)
  4. searchWindowSize:应该是奇数。 (recommended 21)

cv2.fastNlMeansDenoisingColored()

如上所述,它用于从彩色图像中去除噪声。 (噪音预计是高斯噪音)

import numpy as np
import cv2
import matplotlib.pyplot as plt


img = cv2.imread('img.jpg')

dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)

plt.subplot(121),plt.imshow(img)
plt.subplot(122),plt.imshow(dst)
plt.show()

opencv python 图像去噪的实现方法

cv2.fastNlMeansDenoisingMulti()

现在我们将相同的方法应用于视频。 第一个参数是嘈杂帧的列表。 第二个参数imgToDenoiseIndex指定我们需要去噪的帧,因为我们在输入列表中传递了frame的索引。 第三个是temporalWindowSize,它指定了用于去噪的附近帧的数量。 在这种情况下,使用总共temporalWindowSize帧,其中中心帧是要去噪的帧。 例如,传递了5个帧的列表作为输入。 设imgToDenoiseIndex = 2和temporalWindowSize = 3.然后使用frame-1,frame-2和frame-3对帧-2进行去噪

import numpy as np
import cv2
import matplotlib.pyplot as plt


cap = cv2.VideoCapture('test.mp4')

# create a list of first 5 frames
img = [cap.read()[1] for i in range(5)]

# convert all to grayscale
gray = [cv2.cvtColor(i, cv2.COLOR_BGR2GRAY) for i in img]

# convert all to float64
gray = [np.float64(i) for i in gray]

# create a noise of variance 25
noise = np.random.randn(*gray[1].shape)*10

# Add this noise to images
noisy = [i+noise for i in gray]

# Convert back to uint8
noisy = [np.uint8(np.clip(i,0,255)) for i in noisy]

# 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.subplot(132),plt.imshow(noisy[2],'gray')
plt.subplot(133),plt.imshow(dst,'gray')
plt.show()

opencv python 图像去噪的实现方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
python构建自定义回调函数详解
Jun 20 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
python实现flappy bird小游戏
Dec 24 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
python 字符串追加实例
Jul 20 Python
Python的垃圾回收机制详解
Aug 28 Python
Java文件与类动手动脑实例详解
Nov 10 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 #Python
python实现随机梯度下降法
Mar 24 #Python
python实现决策树分类(2)
Aug 30 #Python
python实现决策树分类
Aug 30 #Python
python实现多人聊天室
Mar 31 #Python
Python实现将数据写入netCDF4中的方法示例
Aug 30 #Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 #Python
You might like
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
vue构建动态表单的方法示例
2018/09/22 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
JS定义函数的几种常用方法小结
2019/05/23 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python能做什么
2020/06/02 Python
使用K.function()调试keras操作
2020/06/17 Python
Python 忽略文件名编码的方法
2020/08/01 Python
python如何构建mock接口服务
2021/01/28 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
初中生评语大全
2014/04/24 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
离婚协议书的范本
2015/01/27 职场文书
大学生受助感言
2015/08/01 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript