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中threading超线程用法实例分析
May 16 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
python类的继承实例详解
Mar 30 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Python微信库:itchat的用法详解
Aug 14 Python
python实现读Excel写入.txt的方法
Apr 29 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python tornado微信开发入门代码
Aug 24 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
基于Python实现的购物商城管理系统
Apr 27 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
python开发之thread实现布朗运动的方法
2015/11/11 Python
python读取中文txt文本的方法
2018/04/12 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Puppeteer使用示例详解
2019/06/20 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
鸿星尔克广告词
2014/03/21 职场文书
小班幼儿评语大全
2014/04/30 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
研究生求职自荐书
2014/06/23 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
教师见习总结范文
2015/06/23 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL