当前位置: 首页 > article >正文

OpenCV:在图像中添加高斯噪声、胡椒噪声

目录

在图像中添加高斯噪声

高斯噪声的特性

添加高斯噪声的实现

给图像添加胡椒噪声

实现胡椒噪声的步骤


相关阅读

OpenCV:图像处理中的低通滤波-CSDN博客

OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯-CSDN博客

OpenCV:图像滤波、卷积与卷积核-CSDN博客


在图像中添加高斯噪声

高斯噪声是一种常见的噪声类型,其特性是噪声值服从正态分布(Gaussian distribution)。在图像处理中,添加高斯噪声可以用于测试算法的抗噪性能或生成合成数据。

高斯噪声的特性

高斯噪声的数学公式如下:

f(x) = \frac{1}{\sqrt{2\Pi \sigma^{2}}} e ^ -\frac{(x - \mu ) ^ 2}{ 2 \sigma ^2}

其中:μ 为均值,决定噪声的中心值,σ 为标准差,决定噪声的强度。

在图像中,添加高斯噪声通常需要在每个像素值上叠加服从高斯分布的随机值。


添加高斯噪声的实现

以下是使用 Python 和 OpenCV 给图像添加高斯噪声的步骤。

示例代码

import cv2
import numpy as np

# 读取图像
image = cv2.imread("D:\\resource\\huaji.jpg")
image = cv2.resize(image, (400, 400))  # 调整大小方便显示

# 将图像转换为浮点型
image_float = image.astype(np.float32) / 255.0

# 定义高斯噪声参数
mean = 0          # 噪声的均值
stddev = 0.1      # 噪声的标准差

# 生成高斯噪声
gaussian_noise = np.random.normal(mean, stddev, image_float.shape)

# 将噪声添加到图像
noisy_image = image_float + gaussian_noise

# 将结果裁剪到 [0, 1] 范围
noisy_image = np.clip(noisy_image, 0, 1)

# 转换回 0-255 范围并转换为 uint8 类型
noisy_image = (noisy_image * 255).astype(np.uint8)

# 显示结果
cv2.imshow("image", image)
cv2.imshow("noisy", noisy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数说明

  • mean: 高斯噪声的均值,通常设为 0。
  • stddev: 高斯噪声的标准差,值越大,噪声越明显。
  • np.random.normal: 用于生成服从正态分布的随机噪声。
  • np.clip: 确保像素值仍然在 [0, 1] 或 [0, 255] 的合法范围内。

运行效果


给图像添加胡椒噪声

胡椒噪声 是一种常见的二值噪声类型,与 盐噪声 搭配使用通常称为 椒盐噪声。它会在图像中随机生成黑点,模拟传感器故障或数据传输中的错误。

胡椒噪声的特性

  • 胡椒噪声:像素值变为 黑色(0)。
  • 与 盐噪声(白色点,像素值为 255) 不同,胡椒噪声专注于图像中的随机黑点。

实现胡椒噪声的步骤

以下是添加胡椒噪声的 Python 代码,基于 OpenCV 和 NumPy 实现。

示例代码

import cv2
import numpy as np

# 读取图像
image = cv2.imread("D:\\resource\\huaji.jpg")
image = cv2.resize(image, (400, 400))  # 调整大小方便显示

# 定义胡椒噪声的比例
pepper_prob = 0.02  # 噪声比例(例如 2%)

# 创建随机矩阵
random_matrix = np.random.rand(*image.shape)

# 在随机矩阵中将小于噪声比例的点设置为 0(胡椒噪声)
pepper_noise = image.copy()
pepper_noise[random_matrix < pepper_prob] = 0

# 显示结果
cv2.imshow("Image", image)
cv2.imshow("Noise", pepper_noise)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数说明

  • pepper_prob: 控制胡椒噪声的密度(比例),值越大,黑点越多。
  • np.random.rand(*gray_image.shape): 生成与图像相同大小的随机矩阵。
  • pepper_noise[random_matrix < pepper_prob] = 0: 将随机矩阵中小于阈值的位置设置为黑色(0)。

运行效果

胡椒噪声通过在图像中引入黑点,模拟了现实中的噪声情况。结合降噪算法(如中值滤波)可以有效去除此类噪声,提高图像质量。通过调整噪声比例,可以测试算法在不同噪声强度下的表现。


http://www.kler.cn/a/517699.html

相关文章:

  • PSD是什么图像格式?如何把PSD转为JPG格式?
  • 计算机的错误计算(二百二十二)
  • Unity3D仿星露谷物语开发25之创建时钟界面
  • 如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)
  • 单值二叉树(C语言详解版)
  • Effective C++ 规则46: 需要类型转换时,请为模板定义非成员函数
  • freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】
  • 使用 C++ 在深度学习中的应用:如何通过 C++20 构建高效神经网络
  • vue3 中如何监听 props 中的值的变化
  • 自定义脚手架
  • Rust使用tokio(一)
  • 蓝桥杯3520 翻转 | 贪心+分类讨论
  • 《Effective Java》学习笔记——第7部分并发
  • 一文讲清JVM中的内存泄漏问题
  • Go语言中的值类型和引用类型特点
  • STM32项目分享:智能宠物喂食系统(升级版)
  • 软件过程模型
  • python动态全局缓存配置
  • 【论文+源码】 SeqDiffuSeq带有序列到序列生成的编码器变压器的文本扩散模型
  • OpenCV相机标定与3D重建(65)对图像点进行去畸变处理函数undistortPoints()的使用
  • 洛谷P1469 找筷子
  • Scala语言的移动应用开发
  • 使用select函数创建多线程TCP服务端
  • Skia使用Dawn后端在Windows窗口中绘图
  • 反向代理模块1
  • 第五天 Labview数据记录(5.1 INI配置文件读写)