图像处理:随机添加椒盐噪声和高斯噪声Python

这篇具有很好参考价值的文章主要介绍了图像处理:随机添加椒盐噪声和高斯噪声Python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像处理:随机添加椒盐噪声和高斯噪声Python

目录

图像处理:随机添加椒盐噪声和高斯噪声Python

1.常见的图像噪声

(1)高斯噪声

(2) 椒盐噪声

2.生成图像噪声

(1)高斯噪声

(2) 椒盐噪声(速度慢)

(3) 椒盐噪声(快速版)

3. Demo测试


        图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大。

【尊重原则,转载请注明出处】https://panjinquan.blog.csdn.net/article/details/126542210


1.常见的图像噪声

(1)高斯噪声

        高斯噪声Gaussian noise,是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声,通常是因为不良照明和高温引起的传感器噪声。

图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声

(2) 椒盐噪声

        椒盐噪声salt-and-pepper noise,又称为脉冲噪声,它是一种随机出现的白点(盐噪声)或者黑点(椒噪声),通常是由图像传感器,传输信道,解压处理等产生的黑白相间的亮暗点噪声(椒-黑,盐-白)。常用的去除这种噪声的有效手段是使用中值滤波器。

图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声


2.生成图像噪声

在原始图像基础上加上噪声分量,即可生成图像噪声

(1)高斯噪声

def gaussian_noise(image, mean=0.1, sigma=0.1):
    """
    添加高斯噪声
    :param image:原图
    :param mean:均值
    :param sigma:标准差 值越大,噪声越多
    :return:噪声处理后的图片
    """
    image = np.asarray(image / 255, dtype=np.float32)  # 图片灰度标准化
    noise = np.random.normal(mean, sigma, image.shape).astype(dtype=np.float32)  # 产生高斯噪声
    output = image + noise  # 将噪声和图片叠加
    output = np.clip(output, 0, 1)
    output = np.uint8(output * 255)
    return output

(2) 椒盐噪声(速度慢)

常规的方法,需要遍历每个像素,添加椒盐噪声,该方法十分缓慢。Python语言十分不建议进行图像像素遍历操作,毕竟性能太差,速度太慢了(除非写成C/C++版本)。我们可以借助numpy的矩阵处理,实现快速的添加椒盐噪声。

def salt_pepper_noise(image: np.ndarray, prob=0.01):
    """
    添加椒盐噪声,该方法需要遍历每个像素,十分缓慢
    :param image:
    :param prob: 噪声比例
    :return:
    """
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            if random.random() < prob:
                image[i][j] = 0 if random.random() < 0.5 else 255
            else:
                image[i][j] = image[i][j]
    return image

(3) 椒盐噪声(快速版)

我们可以借助numpy的矩阵处理,实现快速的添加椒盐噪声。基本思路:利用np.random.uniform生成0~1的均匀噪声( uniform distribution noise),然后将noise > prob的像素设置0或者255,这样通过矩阵的处理,可以快速添加椒盐噪声。

def fast_salt_pepper_noise(image: np.ndarray, prob=0.02):
    """
    随机生成一个0~1的mask,作为椒盐噪声
    :param image:图像
    :param prob: 椒盐噪声噪声比例
    :return:
    """
    image = add_uniform_noise(image, prob * 0.51, vaule=255)
    image = add_uniform_noise(image, prob * 0.5, vaule=0)
    return image


def add_uniform_noise(image: np.ndarray, prob=0.05, vaule=255):
    """
    随机生成一个0~1的mask,作为椒盐噪声
    :param image:图像
    :param prob: 噪声比例
    :param vaule: 噪声值
    :return:
    """
    h, w = image.shape[:2]
    noise = np.random.uniform(low=0.0, high=1.0, size=(h, w)).astype(dtype=np.float32)  # 产生高斯噪声
    mask = np.zeros(shape=(h, w), dtype=np.uint8) + vaule
    index = noise > prob
    mask = mask * (~index)
    output = image * index[:, :, np.newaxis] + mask[:, :, np.newaxis]
    output = np.clip(output, 0, 255)
    output = np.uint8(output)
    return output

3. Demo性能测试

需要用到pybaseutils工具,pip安装即可

# -*-coding: utf-8 -*-
"""
    @Author : panjq
    @E-mail : pan_jinquan@163.com
    @Date   : 2022-07-27 15:23:24
    @Brief  :
"""
import cv2
import random
import numpy as np
from pybaseutils import time_utils


@time_utils.performance("gaussian_noise")
def gaussian_noise(image, mean=0.1, sigma=0.1):
    """
    添加高斯噪声
    :param image:原图
    :param mean:均值
    :param sigma:标准差 值越大,噪声越多
    :return:噪声处理后的图片
    """
    image = np.asarray(image / 255, dtype=np.float32)  # 图片灰度标准化
    noise = np.random.normal(mean, sigma, image.shape).astype(dtype=np.float32)  # 产生高斯噪声
    output = image + noise  # 将噪声和图片叠加
    output = np.clip(output, 0, 1)
    output = np.uint8(output * 255)
    return output


@time_utils.performance("salt_pepper_noise")
def salt_pepper_noise(image: np.ndarray, prob=0.01):
    """
    添加椒盐噪声,该方法需要遍历每个像素,十分缓慢
    :param image:
    :param prob: 噪声比例
    :return:
    """
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            if random.random() < prob:
                image[i][j] = 0 if random.random() < 0.5 else 255
            else:
                image[i][j] = image[i][j]
    return image


@time_utils.performance("fast_salt_pepper_noise")
def fast_salt_pepper_noise(image: np.ndarray, prob=0.02):
    """
    随机生成一个0~1的mask,作为椒盐噪声
    :param image:图像
    :param prob: 椒盐噪声噪声比例
    :return:
    """
    image = add_uniform_noise(image, prob * 0.51, vaule=255)
    image = add_uniform_noise(image, prob * 0.5, vaule=0)
    return image


def add_uniform_noise(image: np.ndarray, prob=0.05, vaule=255):
    """
    随机生成一个0~1的mask,作为椒盐噪声
    :param image:图像
    :param prob: 噪声比例
    :param vaule: 噪声值
    :return:
    """
    h, w = image.shape[:2]
    noise = np.random.uniform(low=0.0, high=1.0, size=(h, w)).astype(dtype=np.float32)  # 产生高斯噪声
    mask = np.zeros(shape=(h, w), dtype=np.uint8) + vaule
    index = noise > prob
    mask = mask * (~index)
    output = image * index[:, :, np.newaxis] + mask[:, :, np.newaxis]
    output = np.clip(output, 0, 255)
    output = np.uint8(output)
    return output


def cv_show_image(title, image, use_rgb=True, delay=0):
    """
    调用OpenCV显示RGB图片
    :param title: 图像标题
    :param image: 输入是否是RGB图像
    :param use_rgb: True:输入image是RGB的图像, False:返输入image是BGR格式的图像
    :return:
    """
    img = image.copy()
    if img.shape[-1] == 3 and use_rgb:
        img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)  # 将BGR转为RGB
    # cv2.namedWindow(title, flags=cv2.WINDOW_AUTOSIZE)
    cv2.namedWindow(title, flags=cv2.WINDOW_NORMAL)
    cv2.imshow(title, img)
    cv2.waitKey(delay)
    return img


if __name__ == "__main__":
    test_file = "test.png"
    image = cv2.imread(test_file)
    prob = 0.02
    for i in range(10):
        out1 = gaussian_noise(image.copy())
        out2 = salt_pepper_noise(image.copy(), prob=prob)
        out3 = fast_salt_pepper_noise(image.copy(), prob=prob)
        print("----" * 10)
    cv_show_image("image", image, use_rgb=False, delay=1)
    cv_show_image("gaussian_noise", out1, use_rgb=False, delay=1)
    cv_show_image("salt_pepper_noise", out2, use_rgb=False, delay=1)
    cv_show_image("fast_salt_pepper_noise", out3, use_rgb=False, delay=0)

循环机10次,salt_pepper_noise平均耗时125.49021ms,而fast_salt_pepper_noise平均耗时6.12011ms ,性能提高60倍左右,其生成的效果是基本一致的

call gaussian_noise elapsed: avg:19.42925ms     total:194.29255ms     count:10
call salt_pepper_noise elapsed: avg:125.49021ms     total:1254.90212ms     count:10
call fast_salt_pepper_noise elapsed: avg:6.12011ms     total:61.20110ms     count:10 

原图 高斯噪声

图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声

图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声

salt_pepper_noise

fast_salt_pepper_noise文章来源地址https://www.toymoban.com/news/detail-786725.html

图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声 图像加高斯噪声,图像处理,高斯噪声,椒盐噪声,快速生成椒盐噪声,图像添加噪声,图像噪声

到了这里,关于图像处理:随机添加椒盐噪声和高斯噪声Python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv笔记:高斯滤波和中值滤波对椒盐噪声的处理

      目录 1. 椒盐噪声简介 2. 高斯滤波的原理和实现  2.1. 高斯滤波的原理    2.2. 高斯滤波的API  3. 中值滤波的原理和实现   3.1. 中值滤波的原理   3.2. 中值滤波的API 4. 高斯滤波和中值滤波对椒盐噪声的处理结果 数字图像处理中,噪声会导致图像质量下降和信息的丢失,因此

    2024年02月07日
    浏览(36)
  • 【图像处理】python | 给图像添加噪声 | random_noise

    首先,我们看一下random_noise的构造: floating-point image是浮点图的意思。**kwargs是参数的意思,对这部分我也作一定的学习(之前不懂),改天写一个博客记录一下。它的作用:把多个参数打包。 1.image: 输入的图像是n维数组,会转换为浮点型 2.mode: 除了高斯型,还

    2024年02月01日
    浏览(33)
  • Matlab实现图像添加椒盐噪声及中值滤波/均值滤波去除

    椒盐噪声(peppersalt noise)由胡椒噪声(pepper noise)和盐噪声(salt noise)组成。一般因图像传感器,传输信道等处产生,由黑白相间的亮暗点噪声组成。 黑点可以看出胡椒,白点可以看成盐。 下面为使用matlab自带的函数对图像添加椒盐噪声的代码和添加后的结果。 均值滤波

    2024年02月11日
    浏览(30)
  • 01:高斯噪声和椒盐噪声

    记录一下手写椒盐噪声和高斯噪声的python程序。 效果图如下: 椒盐噪声和高斯噪声都是数字图像处理中常见的噪声类型。 1.椒盐噪声是 随机的黑色和白色像素点 混杂在图像中,使得图像中的一些像素点变得十分明显且不规则。椒盐噪声可能由于传感器损坏、传输错误、压缩

    2024年02月05日
    浏览(30)
  • OpenCV(二十一):椒盐噪声和高斯噪声的产生

    目录 1.图像噪声介绍 2.椒盐噪声的产生 3.高斯噪声的产生 1.图像噪声介绍 噪声介绍      图像噪声是指在图像中存在的不期望的、随机的像素值变化,这些变化来源于多种因素。噪声可能导致图像细节模糊、失真或难以分辨。 以下是几种常见的图像噪声类型:       1.椒盐

    2024年02月09日
    浏览(25)
  • 常见图像噪声和常见图像噪声处理算法

    图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概率密度函数又可以分为:高斯噪声、泊松噪声、脉冲噪声、瑞利噪声。 1.2基于统计后的概率密度函数

    2024年02月16日
    浏览(30)
  • 图像处理之图像噪声和各种噪声的matlab实现

    一、图像噪声的基本定义 噪声在图像上常表现为引起较强视觉效果的孤立像素点或像素块。一般噪声信号与要研究的对象不相关,其以无用的信息形式出现,扰乱图像的可观测信息 。通俗的说即噪声让图像不清楚。 图像噪声按照噪声和信号之间的关系可以分为 加性噪声和乘

    2024年02月07日
    浏览(32)
  • 不同图像的噪声,选用什么滤波器去噪,图像处理的噪声和处理方法

    提示:据说是科大讯飞的算法面试题 知道哪些噪声,分别用什么滤波器处理? 噪声来源灰常多,但主要可以分为三类: 1.来自捕捉源的(acquisition/digitization) ,比如一个摄像机的镜头、A/D或者sensor; 2.来自图像传输过程(image transmission), 传输图像的信道包括无线电、微波

    2024年02月05日
    浏览(35)
  • Matlab图像的噪声处理

    %%-------------------------Matlab图像的噪声处理------------------------- %-------------------头文件----------------------------- clc ; %清屏幕 clear ; %删除所有的变量 close all ; %将所有打开的图片关掉 %-----------------------添加噪声 imnoise()--------------------------- A = imread(\\\'1.jpg\\\') ; A1 = rgb2gray( A ) ; %彩图转灰度

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包