十五天掌握OpenCV——计算摄影学—图像去噪

魏老师学生——Cecil:学习OpenCV-机器视觉之旅


Aim:使用非局部平均值去噪算法去除图像中的噪音
学习函数cv2.fastNlMeansDenoising() ,cv2.fastNlMeansDenoising()

原理

  1. 图像平滑技术(噪声小时):高斯平滑、中值平滑
  2. 选取像素周围一个小的邻域,再用高斯平均值或者中值平均值取代中心像素。所以:像素级别的噪声去除限制在局部邻域。
  3. 噪声性质:平均值唯一的随机变量。
  4. 带噪声的像素点:p=p0+n,p0像素真实值,n像素噪声。从不同图片中选取大量相同像素,计算平均值。理想情况:p=p0,噪声平均值是0.
  5. 非局部平均值去噪:对一组相似的图片,通过取平均值的方法去除噪音。对图片取5×5的小窗口,寻找其他相似窗口,再求所有窗口平均值,以平均值代替目标像素的值。
  6. 算法占内存大,但结果质量高。

OpenCV中的图像去噪

  1. cv2.fastNlMeansDenoising() 使用对象是灰度图
  2. cv2.fastNlMeansDenoisingColored() 使用对象是彩色图
  3. cv2.fastNlMeansDenoisingMulti() 适用于短时间的灰度图像序列
  4. cv2.fastNlMeansDenoisingColoredMulti() 适用于短时间的彩色图像序列

共同参数:
h:决定过滤器强度。h值高可以很好去除噪声,但也会抹去图像细节。
hForColorComponents:与h效果一样,适用于彩色图像。
templateWindowSize:奇数。推荐值7.
searchWindowsSize:奇数。推荐值21.

cv2.fastNlMeansDenoisingColored()

#coding=utf-8
import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('./image2/tuxiangxue1.jpg')
dst=cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)

plt.subplot(121),plt.imshow(img)
plt.subplot(122),plt.imshow(dst)
plt.show()

1

cv2.fastNlMeansDenoisingMulti()

参数一:噪声帧列表;
参数二:imgtoDenoiseIndex 设定需要去噪的帧,可用通过传入帧的索引。
参数三:temporaWindowSize 设置用于去噪的相邻帧的数目,为奇数。此帧用于去噪,中间帧为要去噪的帧。
举例:传入5帧图像,imgToDenoiseIndex=2和temporaWindowSize=3,第一二三帧图像用于对第二帧图像去噪。

#coding=utf-8
import cv2
import numpy as np
from matplotlib import pyplot as plt

cap=cv2.VideoCapture('./video/dali.mp4')

img=[cap.read()[1] for i in range(5)]

gray=[cv2.cvtColor(i,cv2.COLOR_BGR2GRAY) for i in img]

gray=[np.float64(i) for i in gray]

noise=np.random.randn(*gray[1].shape)*10

noisy=[i+noise for i in gray]

noisy=[np.uint8(np.clip(i,0,255)) for i in noisy]

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()

2
左:原始图 中:带噪音 右:去噪音

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值