Python图像增强之椒盐噪声、高斯噪声

椒盐噪声(包含椒噪声和盐噪声)

import random
import numpy as np

def sp_noise(img, prob, sp):
    '''
    添加椒盐噪声
    :param img: 原始图片
    :param prob: 噪声比例
    :param sp: 0: 椒噪声, 1: 盐噪声, 2: 椒盐噪声
    :return: resultImg
    '''
    resultImg = np.zeros(img.shape, np.uint8)
    thres = 1 - prob
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            rdn = random.random()  # 随机生成0-1之间的数字
            if sp == 0:
                if rdn < prob:  # 如果生成的随机数小于噪声比例则将该像素点添加黑点,即椒噪声
                    resultImg[i][j] = 0
                else:
                    resultImg[i][j] = img[i][j]  # 其他情况像素点不变
            if sp == 1:
                if rdn > thres:  # 如果生成的随机数大于(1-噪声比例)则将该像素点添加白点,即盐噪声
                    resultImg[i][j] = 255
                else:
                    resultImg[i][j] = img[i][j]  # 其他情况像素点不变
            if sp == 2:
                if rdn < prob:  # 如果生成的随机数小于噪声比例则将该像素点添加黑点,即椒噪声
                    resultImg[i][j] = 0
                elif rdn > thres:  # 如果生成的随机数大于(1-噪声比例)则将该像素点添加白点,即盐噪声
                    resultImg[i][j] = 255
                else:
                    resultImg[i][j] = img[i][j]  # 其他情况像素点不变
    return resultImg

if __name__ == '__main__':
    img = cv2.imread('D:/test/test.jpg')
    resultImg = sp_noise(img, 0.05, 0)

    cv2.imshow('origin', img)
    cv2.imshow('result', resultImg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

原始图片

Python图像增强之椒盐噪声、高斯噪声_第1张图片

添加椒噪声的图片

Python图像增强之椒盐噪声、高斯噪声_第2张图片

添加盐噪声的图片

Python图像增强之椒盐噪声、高斯噪声_第3张图片

添加椒盐噪声的图片

Python图像增强之椒盐噪声、高斯噪声_第4张图片

 

高斯噪声

import numpy as np

def gauss_noise(img, mean, var):
    '''
    添加高斯噪声
    :param img: 原始图像
    :param mean: 均值
    :param var: 方差,越大,噪声越大
    :return: resultImg
    '''
    image = np.array(img / 255, dtype=float)  # 将原始图像的像素值进行归一化,除以255使得像素值在0-1之间
    noise = np.random.normal(mean, var ** 0.5, image.shape)  # 创建一个均值为mean,方差为var呈高斯分布的图像矩阵
    out = image + noise  # 将噪声和原始图像进行相加得到加噪后的图像
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    resultImg = np.clip(out, low_clip, 1.0)  # clip函数将元素的大小限制在了low_clip和1之间了,小于的用low_clip代替,大于1的用1代替
    resultImg = np.uint8(resultImg * 255)  # 解除归一化,乘以255将加噪后的图像的像素值恢复
    return resultImg

if __name__ == '__main__':
    img = cv2.imread('D:/test/test.jpg')
    resultImg = gauss_noise(img, 0, 0.05)

    cv2.imshow('origin', img)
    cv2.imshow('result', resultImg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

添加高斯噪声的图片

Python图像增强之椒盐噪声、高斯噪声_第5张图片

 

你可能感兴趣的:(Python,python)