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 相关文章推荐
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
python实现类之间的方法互相调用
Apr 29 Python
python实现傅里叶级数展开的实现
Jul 21 Python
python输入错误后删除的方法
Oct 12 Python
通过实例解析python描述符原理作用
Jan 22 Python
Python class的继承方法代码实例
Feb 14 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Python一行代码实现自动发邮件功能
May 30 Python
Python使用pyecharts控件绘制图表
Jun 05 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中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python实现逻辑回归的方法示例
2017/05/02 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python和c语言哪个更适合初学者
2020/06/22 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
求职信格式范本
2013/11/15 职场文书
初一生物教学反思
2014/01/18 职场文书
奠基仪式策划方案
2014/05/15 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Python Pandas 删除列操作
2022/03/16 Python
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android