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自动化测试实例解析
Sep 28 Python
python根据文件大小打log日志
Oct 09 Python
用Python编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
Python中的变量和作用域详解
Jul 13 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
基于python的字节编译详解
Sep 20 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
python实现梯度下降和逻辑回归
Mar 24 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python 三元运算符使用解析
2019/09/16 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
新品发布会主持词
2014/04/02 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
财务人员岗位职责
2015/02/03 职场文书
三方合作意向书范本
2015/05/09 职场文书
2015年妇女工作总结
2015/05/14 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
python实现简单聊天功能
2021/07/07 Python
Python实现老照片修复之上色小技巧
2021/10/16 Python
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Mysql中常用的join连接方式
2022/05/11 MySQL