雾看OpenCV(6)——椒盐噪声与高斯噪声

在这里插入图片描述

前言

这篇文章是为了后面那篇模糊处理做准备的,我们自己弄一些噪声加在图片上,然后用模糊来观测去除的效果。

正文

介绍

(1) 椒盐噪声
椒盐噪声也称脉冲噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。
图像模拟添加椒盐噪声是通过:随机获取像素点,并设置为高亮度点和低亮度点来实现的。

(2) 高斯噪声
高斯噪声是指概率密度函数服从高斯分布的一类噪声。
特别的,如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度服从均匀分布,则称这个噪声为高斯白噪声。
高斯白噪声 功率谱密度频谱图 和 噪声幅值分布图的图片如下:
在这里插入图片描述
在这里插入图片描述

代码

效果图
在这里插入图片描述
code

import cv2 as cv
import numpy as np

# 将rgb颜色通道的图像转为灰色
def rgb2gray(img):
    h=img.shape[0]
    w=img.shape[1]
    img1=np.zeros((h,w),np.uint8)
    for i in range(h):
        for j in range(w):
            # 变成灰色的公式
            img1[i,j]=0.144*img[i,j,0]+0.587*img[i,j,1]+0.299*img[i,j,2]
    return img1

# 添加噪声
def sp_noise(img,snr):
    h=img.shape[0]
    w=img.shape[1]
    img1=img.copy()
    sp=h*w   # 计算图像像素点个数
    NP=int(sp*(1-snr))   # 计算图像椒盐噪声点个数
    for i in range (NP):
        randx=np.random.randint(1,h-1)   # 生成一个 1 至 h-1 之间的随机整数
        randy=np.random.randint(1,w-1)   # 生成一个 1 至 w-1 之间的随机整数
        if np.random.random()<=0.5:   # np.random.random()生成一个 01 之间的浮点数
            img1[randx,randy]=0
        else:
            img1[randx,randy]=255
    return img1

# 添加高斯噪声
def gasuss_noise(image, mean=0, var=0.001):
    '''
        添加高斯噪声
        mean : 均值
        var : 方差
    '''
    image = np.array(image/255, dtype=float)
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out*255)
    #cv.imshow("gasuss", out)
    return out

image=cv.imread("../../images/lena.jpg")
grayimage=rgb2gray(image)
sp_noiseimage=sp_noise(grayimage,0.98)   # 将信噪比设定为0.98
# cv2.GaussianBlur(grayimage, ksize=(9, 9), sigmaX=0, sigmaY=0) 这段代码也是可以添加高斯噪声的,更方便,但是不符合实验的初衷
gasuss_noiseimage=gasuss_noise(grayimage,0,0.02)   # 将信噪比设定为0.98,就是将噪声的比例设置为0.02
cv.imshow("image",image)
cv.imshow("grayimage",grayimage)
cv.imshow("sp_noiseimage",sp_noiseimage)
cv.imshow("gasuss_noiseimage",gasuss_noiseimage)
cv.imwrite('grayimage.jpg',grayimage)
cv.imwrite('sp_noiseimage.jpg',sp_noiseimage)
cv.imwrite('gasuss_noiseimage.jpg',gasuss_noiseimage)
cv.waitKey(0)
cv.destroyAllWindows()

在这里面,我也用imwrite写入文件夹之中了。让图片后续可用。

参考

  1. 给图像添加各种噪声
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值