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通过线程实现定时器timer的方法
Mar 16 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
详解flask表单提交的两种方式
Jul 21 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Pytorch释放显存占用方式
Jan 13 Python
python对一个数向上取整的实例方法
Jun 18 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
python获取淘宝服务器时间的代码示例
Apr 22 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
桌面中心(二)数据库写入
2006/10/09 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
Python下线程之间的共享和释放示例
2015/05/04 Python
快速了解python leveldb
2018/01/18 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python redis存入字典序列化存储教程
2020/07/16 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
触摸春天教学反思
2014/02/03 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2014年车间工作总结
2014/11/21 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
银行催款通知书
2015/04/17 职场文书
硕士学位申请报告
2015/05/15 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
文明上网主题班会
2015/08/14 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python