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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python3.6正式版新特性预览
Dec 15 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python单元测试简单示例
Jul 03 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
Python序列对象与String类型内置方法详解
Oct 22 Python
pytorch的batch normalize使用详解
Jan 15 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
python实现快递价格查询系统
Mar 03 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Selenium浏览器自动化如何上传文件
Apr 06 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相对当前文件include其它文件的方法
2015/03/13 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
php生成与读取excel文件
2016/10/14 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
javascript Excel操作知识点
2009/04/24 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python距离测量的方法
2018/03/06 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
数据管理员的自我评价分享
2013/11/15 职场文书
学校安全检查制度
2014/01/27 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
银行转正自我鉴定
2014/09/29 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python