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 Sleep休眠函数使用简单实例
Feb 02 Python
在Linux下调试Python代码的各种方法
Apr 17 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
python制作小说爬虫实录
Aug 14 Python
Python SQLite3简介
Feb 22 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
python使用threading.Condition交替打印两个字符
May 07 Python
Python如何将将模块分割成多个文件
Aug 04 Python
编写python代码实现简单抽奖器
Oct 20 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 Python
Python基础之元编程知识总结
May 23 Python
python中opencv实现图片文本倾斜校正
Jun 11 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
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
javascript date格式化示例
2013/09/25 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
理解Python中的With语句
2016/03/18 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python ssh 执行shell命令的示例
2020/09/29 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
2014年社区庆元旦活动方案
2014/03/08 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
购房协议书
2014/04/11 职场文书
10的分与合教学反思
2014/04/30 职场文书
测控技术自荐信
2014/06/05 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
公司开会通知
2015/04/20 职场文书
现货白银电话营销话术
2015/05/29 职场文书