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实现数通设备端口监控示例
Apr 02 Python
用Python编写web API的教程
Apr 30 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
python自动化调用百度api解决验证码
Apr 13 Python
python中filter,map,reduce的作用
Jun 10 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
2019十大人气国漫
2020/03/13 国漫
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
2016/08/02 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python实现二叉查找树实例代码
2018/02/08 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
wxPython色环电阻计算器
2019/11/18 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
焊接专业毕业生求职信
2013/10/01 职场文书
高一地理教学反思
2014/01/18 职场文书
村委会贫困证明范本
2014/09/17 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers