[opencv教程(八)] 图像噪声类别及添加
·
目录
定义
图片中的多余的干扰信息
简单来说就是图片中的一点点 让图片变得模糊
类别
这一篇其实应该是来自于图像处理的基本知识,根据直方图来分类噪声的类别。
这次只讲效果 不谈论公式及分布均值和方差
高斯噪声
直方图符合于高斯分布的噪声
案例
图片依旧采用之前的原图
import cv2
import numpy as np
starSky = cv2.imread('StarSky.jpg')
#设定均值和方差
mean = 0
#设定标准差 标准差越大 损坏图像就越大
sigma = 25
gauss = np.random.normal(mean,sigma,starSky.shape)
gaussImg = gauss + starSky
gaussImg = np.clip(gaussImg,a_min=0,a_max=255)
res = np.hstack((starSky, gaussImg))
cv2.imshow(('origin,gauss'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果

问题
我们发现原图区域都出现了曝光度过高的问题
原因
主要是cv2.imshow所需要的参数是uint8
纠错
我们需要将修改后的图像添加astype来更改到uint8
#设定均值和方差
mean = 0
#设定标准差 标准差越大 损坏图像就越大
sigma = 25
gauss = np.random.normal(mean,sigma,starSky.shape)
gaussImg = gauss + starSky
gaussImg = np.clip(gaussImg,a_min=0,a_max=255)
gaussImg = gaussImg.astype(np.uint8)
res = np.hstack((starSky, gaussImg))
cv2.imshow(('origin,gauss'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()

此时就恢复了正常
瑞利噪声
观察直方图是否符合瑞利分布
案例
scale = 30
rayleigh = np.random.rayleigh(scale,starSky.shape)
rayleigh_noise = rayleigh + starSky
rayleigh_noise = np.clip(rayleigh_noise,a_min=0,a_max=255)
rayleigh_noise = rayleigh_noise.astype(np.uint8)
res = np.hstack((starSky, rayleigh_noise))
cv2.imshow(('origin,rayleigh'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果
伽马噪声
案例
#设置伽马分布的形状参数和尺度参数
shape, scale = 2., 24.
gamma = np.random.gamma(shape,scale,starSky.shape)
gamma_noise = gamma + starSky
gamma_noise = np.clip(gamma_noise, a_min=0, a_max=255)
gamma_noise = gamma_noise.astype(np.uint8)
res = np.hstack((starSky, gamma_noise))
cv2.imshow(('origin,gamma'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果
指数噪声
案例
scale = 24
exponemtial = np.random.exponential(scale,starSky.shape)
exponemtial_noise = exponemtial + starSky
exponemtial_noise = np.clip(exponemtial_noise, a_min=0, a_max=255)
exponemtial_noise = exponemtial_noise.astype(np.uint8)
res = np.hstack((starSky, exponemtial_noise))
cv2.imshow(('origin,exponemtial'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果

均匀噪声
案例
uniform1 = np.random.uniform(0,56,starSky.shape)
uniform_noise = uniform1 + starSky
uniform_noise = np.clip(uniform_noise, a_min=0, a_max=255)
uniform_noise = uniform_noise.astype(np.uint8)
res = np.hstack((starSky, uniform_noise))
cv2.imshow(('origin,uniform'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果

椒盐噪声
案例
#椒盐噪声
s_vs_p = 0.4
amount = 0.004
noisy_img = np.copy(starSky)
#添加salt噪声
num_salt = np.ceil(amount * starSky.size * s_vs_p)
coords = [np.random.randint(0, i, int(num_salt)) for i in starSky.shape]
noisy_img[coords[0],coords[1],:] = 1
#添加pepper噪声
num_pepper = np.ceil(amount * starSky.size * (1. - s_vs_p))
coords = [np.random.randint(0, i, int(num_pepper)) for i in starSky.shape]
noisy_img[coords[0],coords[1],:] = 0
res = np.hstack((starSky, noisy_img))
cv2.imshow(('origin,salt and pepper'),res)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果

详细
图像处理视频可参考:Image and Video Processing: From Mars to Hollywood with a Stop at the Hospital | Coursera
噪声一类的文章可参考:
(18条消息) 图像处理(12)--图像各种噪声及消除方法_信号背景和噪声去除_ShaneHolmes的博客-CSDN博客
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)