图像处理:随机添加椒盐噪声和高斯噪声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 255else: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 imagedef 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) + vauleindex = noise > probmask = 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 255else: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 imagedef 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) + vauleindex = noise > probmask = mask * (~index)output = image * index[:, :, np.newaxis] + mask[:, :, np.newaxis]output = np.clip(output, 0, 255)output = np.uint8(output)return outputdef 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 imgif __name__ == "__main__":test_file = "test.png"image = cv2.imread(test_file)prob = 0.02for 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

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

  1. [转载] opencv-python:13_图像噪声(噪声的概念、椒盐噪声、高斯噪声、使用python给图像添加噪声)

    参考链接: Python OpenCV 基础 0: imshow 显示图像 图像噪声 学习两种图像噪声,即椒盐噪声和高斯噪声.使用python实现给图像添加椒盐噪声和高斯噪声 一.噪声的概念 在噪声的 ...

  2. 给图像添加噪声,高斯噪声、椒盐噪声

    常见的噪声种类有:椒盐噪声.高斯噪声 常见的去噪声方法有:均值滤波,中值滤波.高斯滤波 import cv2 as cv import numpy as np import random as r a ...

  3. 图像椒盐噪声和高斯噪声

    一. 椒盐噪声 在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声.通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大. 在信号系统中,计量单位为dB ...

  4. python+OpenCv笔记(八):图像噪声(椒盐噪声、高斯噪声)

    由于图像采集.处理.传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理.常见的图像噪声有高斯噪声.椒盐噪声等. 一.椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一 ...

  5. OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)

    目录 1 椒盐噪声 2 高斯噪声 图像在获取和传输过程种会受到随机信号的干扰从而产生噪声,例如电阻引起的热噪声.光子噪声.暗电流噪声以及光响应非均匀性噪声等,由于噪声会影响对图像的理解以及后续的处理工 ...

  6. 椒盐噪声及高斯噪声图片加噪python实现(附代码)

    椒盐噪声及高斯噪声图片加噪python实现(附代码) 写在前面 这个博客会记录我最近学习的笔记,算是成长记录啦,如果有错误的地方还请指出,这也是学习的过程呀! 椒盐噪声 椒盐噪声又称为脉冲噪声,它是一 ...

  7. python添加高斯噪声_使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)

    在matlab中,存在执行直接得函数来添加高斯噪声和椒盐噪声.Python-OpenCV中虽然不存在直接得函数,但是很容易使用相关的函数来实现. 代码: import numpy as np impo ...

  8. 【图像处理】——Python实现图像加噪(随机噪声、椒盐噪声、高斯噪声等)

    目录 1.随机噪声 2.椒盐噪声 3.高斯噪声 补充:numpy.clip函数 4.其他噪声 1.随机噪声 随机噪声就是通过随机函数在图像上随机地添加噪声点 随机函数random模块参考:https: ...

  9. 给图像添加噪声(椒盐噪声,高斯噪声)

    1.椒盐噪声是比较常见的噪声(salt and pepper noise),为什么叫椒盐噪声?因为图像的像素点由于噪声影响随机变成了黑点(dark spot)或白点(white spot).这里的&q ...

最新文章

  1. 马斯克如何颠覆航天? 1/5385成本,c++和python编程!
  2. 【v2.x OGE-example 第二章(第二节) 修改器的使用】
  3. CactiEZ V10.1 中文版 Cacti中文解决方案+使用教程(1)
  4. Android小项目源码汇总
  5. 使用C# lock同时访问共享数据
  6. SAP CRM WebClient UI Search against extension field
  7. spring-boot两小时入门笔记
  8. 开源cms 和 开源博客_宝马自动驾驶汽车开发人员,用于IT的开源CMS和更多新闻
  9. 添加鼠标悬浮在控件上的提示信息 很齐全各种方法 MFC ToolTipCtl
  10. 微信小程序获取数据并展示
  11. 三菱PLC与威伦触摸屏通过OPC通信连接在线模拟仿真
  12. python用函数判断一个数是否为素数,python分享是否为素数 python输入并判断一个数是否为素数...
  13. 苹果笔记本能玩英雄联盟吗_等了5年的英雄联盟手机版,今天终于能玩了
  14. python爬取链家二手房信息并存储到数据库
  15. Java——SOF 与 OOM
  16. Mac安装redis并设置开机自启动
  17. react-native-beacons-manager在Android上的使用 --工作笔记
  18. LiveNVR传统视频监控互联网无插件-按需直播最大利用有效上行
  19. Android 注解与注解处理器简述
  20. 这哥们儿的日志让我的心情好得一塌糊涂(ZZ)

热门文章

  1. EN 14782建筑金属结构产品—CE认证
  2. 5分钟实现漂亮的CSS加载动画,纯CSS实现加载动画
  3. 99999999999999999999
  4. IP归属地API分享
  5. RTMP直播黑屏问题分析与解决
  6. 揭开邮票界《一轮生肖猴》的神秘面纱
  7. 单链表实例(1)实现水浒传排行增删改查和练习
  8. 最常见的linux命令(centOS 7.6)
  9. arduino教程——PIND寄存器使用
  10. 前端人必备的Vue小技巧|建议收藏