01:高斯噪声和椒盐噪声

文章目录

  • 前言
  • 一、高斯噪声和椒盐噪声是什么?
  • 二、编写程序
    • 1.分析两者的特点
    • 2.调用两个函数,实现添加噪声
  • 总结


前言

记录一下手写椒盐噪声和高斯噪声的python程序。
效果图如下:
01:高斯噪声和椒盐噪声_第1张图片


一、高斯噪声和椒盐噪声是什么?

椒盐噪声和高斯噪声都是数字图像处理中常见的噪声类型。
1.椒盐噪声是随机的黑色和白色像素点混杂在图像中,使得图像中的一些像素点变得十分明显且不规则。椒盐噪声可能由于传感器损坏、传输错误、压缩算法等原因而产生。
2.高斯噪声则是由于图像传感器发生随机噪声而导致的,具有随机性且遵循高斯分布。它会使得图像的亮度和颜色发生微弱的随机变化,以及出现模糊和失真的情况。这两种噪声都会影响图像的质量和准确性,需要在数字图像处理中进行去噪处理。

二、编写程序

1.分析两者的特点

1.椒盐噪声是图像中出现明,暗的噪声,也就是1,0的像素值(在0-1的范围内)
那么思路就是:在一个与原图像大小一致的空矩阵里,填充一部分0,1并将这些覆盖在原图像上。
代码如下(示例):

def salt_and_pepper_noise(image, prob):
    """
        噪声函数
       :param image: 原图像,是灰度图
       :param prob: 控制椒盐噪声的数量,这里是0-1的一个概率值
       :return: 处理后的图像
    """
    h , w = image.shape[:2]
    noise = np.zeros((h, w), dtype=np.uint8)
    #将noise随机填充0-255的值
    cv2.randu(noise, 0, 255)
    #将image传给image_copy
    image_copy = image.copy()
    #prob*255就是我们选的那个阈值
    image_copy[np.where(noise < prob*255)] = 0
    image_copy[np.where(noise > (1-prob)*255)] = 255
    return image_copy

2.高斯噪声的最明显的特点就是服从高斯分布,这部分原理不再赘述。

def gaussian_noise(image, mean=0, var=0.1):
    """
    给输入的图像添加高斯噪声
    :param image: 输入图像,0-255的灰度图
    :param mean: 高斯噪声的均值,默认为0
    :param var: 高斯噪声的标准差,默认为0.1
    :return: 添加高斯噪声后的图像
    """
    #先把图像转化为0-1,并将类型转化为float32,这样有利于保存数据,
    image = np.asarray(image / 255, dtype=np.float32)
    #为了后面加方便,noise也要转化为float32
    noise = np.random.normal(mean, var,image.shape).astype(np.float32)
    noisy_image = image + noise
    #将noise_image限制在0-255,因为+运算可能有部分会超过255,再转化为整型
    noisy_image = np.clip(noisy_image*255, 0, 255).astype(np.uint8)
    return noisy_image

2.调用两个函数,实现添加噪声

import numpy as np
import cv2
#椒盐噪声
def salt_and_pepper_noise(image, prob):
    """
        噪声函数
       :param image: 原图像,是灰度图
       :param prob: 控制椒盐噪声的数量,这里是0-1的一个概率值
       :return: 处理后的图像
    """
    h , w = image.shape[:2]
    noise = np.zeros((h, w), dtype=np.uint8)
    #将noise随机填充0-255的值
    cv2.randu(noise, 0, 255)
    #将image传给image_copy
    image_copy = image.copy()
    image_copy[np.where(noise < prob*255)] = 0
    image_copy[np.where(noise > (1-prob)*255)] = 255
    return image_copy
#高斯噪声
def gaussian_noise(image, mean=0, var=0.1):
    """
    给输入的图像添加高斯噪声
    :param image: 输入图像
    :param mean: 高斯噪声的均值,默认为0
    :param var: 高斯噪声的标准差,默认为0.1
    :return: 添加高斯噪声后的图像
    """
    image = np.asarray(image / 255, dtype=np.float32)
    noise = np.random.normal(mean, var,image.shape).astype(np.float32)
    noisy_image = image + noise
    noisy_image = np.clip(noisy_image*255, 0, 255).astype(np.uint8)
    return noisy_image

01:高斯噪声和椒盐噪声_第2张图片

总结

这就是本文的全部内容了,看似简单的两个函数,其实动手写还是会出现很多问题的,基本功还是不扎实,希望大家也要专注于编程的基本功。

你可能感兴趣的:(图像处理,python,计算机视觉,机器学习)