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+pygame简单画板实现代码实例
Dec 13 Python
python实现log日志的示例代码
Apr 28 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python3+selenium自动化测试框架详解
Mar 17 Python
Django 外键的使用方法详解
Jul 19 Python
在Python中获取操作系统的进程信息
Aug 27 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python各种扩展名区别点整理
Feb 27 Python
Python如何使用input函数获取输入
Aug 06 Python
python boto和boto3操作bucket的示例
Oct 30 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
js 字符串操作函数
2009/07/25 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
python快速排序代码实例
2013/11/21 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
学生请假条
2014/04/11 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
小学英语课教学反思
2016/02/15 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL