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实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python fabric实现远程部署
Jan 05 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python Event事件、进程池与线程池、协程解析
Oct 25 Python
python字符串拼接+和join的区别详解
Dec 03 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
基于python制作简易版学生信息管理系统
Apr 20 Python
Elasticsearch 批量操作
Apr 19 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
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
jQuery操作之效果详解
2017/05/19 jQuery
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
vue登录注册实例详解
2019/09/14 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
对python Tkinter Text的用法详解
2018/10/11 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
求职简历自荐信
2014/06/18 职场文书
酒店端午节活动方案
2014/08/26 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
企业法人授权委托书
2014/09/25 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
Python实现抖音热搜定时爬取功能
2022/03/16 Python