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模块restful使用方法实例
Dec 10 Python
Python深入学习之装饰器
Aug 31 Python
python中的装饰器详解
Apr 13 Python
python避免死锁方法实例分析
Jun 04 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
说一说Python logging
Apr 15 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
Python如何在循环内使用list.remove()
Jun 01 Python
python3.9.1环境安装的方法(图文)
Feb 02 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
JS实现简单日历特效
2020/01/03 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
python 提取文件的小程序
2009/07/29 Python
python求质数的3种方法
2018/09/28 Python
Python @property使用方法解析
2019/09/17 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
道路交通安全实施方案
2014/03/12 职场文书
小学生安全责任书
2014/07/25 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
2015年党性分析材料
2014/12/19 职场文书