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 ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
详解Python中expandtabs()方法的使用
May 18 Python
python3序列化与反序列化用法实例
May 26 Python
Python实现批量转换文件编码的方法
Jul 28 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
python实现自动登录
Sep 17 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
手写一个python迭代器过程详解
Aug 27 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP实现的json类实例
2015/07/28 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python的launcher用法知识点总结
2020/08/07 Python
领班岗位职责范文
2014/02/06 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
乳制品整治工作方案
2014/05/29 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
MySQL系列之四 SQL语法
2021/07/02 MySQL
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis