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 测试实现方法
Dec 24 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
python实现多线程的两种方式
May 22 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
python matplotlib包图像配色方案分享
Mar 14 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
Python实现给PDF添加水印的方法
Jan 25 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 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 常用类汇总 推荐收藏
2010/05/13 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
python判断自身是否正在运行的方法
2019/08/08 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
Python如何执行系统命令
2020/09/23 Python
如何解决python多种版本冲突问题
2020/10/13 Python
python 实现的车牌识别项目
2021/01/25 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
C语言编程练习
2012/04/02 面试题
数据库测试通常都包括哪些方面
2015/11/30 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
电子商务个人自荐信
2013/12/12 职场文书
毕业生自荐信
2013/12/14 职场文书
业务员简历自我评价
2014/03/06 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
JavaScript 对象创建的3种方法
2021/11/17 Javascript