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

这篇具有很好参考价值的文章主要介绍了OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


图像在获取和传输过程种会受到随机信号的干扰从而产生噪声,例如电阻引起的热噪声、光子噪声、暗电流噪声以及光响应非均匀性噪声等,由于噪声会影响对图像的理解以及后续的处理工作,因此去除噪声的影响在图像中具有十分重要的意义。图像中常见的噪声有:椒盐噪声、高斯噪声、泊松噪声和乘性噪声。本文将介绍椒盐噪声和高斯噪声产生的原因和如何在图像中添加噪声。生成的含有噪声的图像可以应用于后续的滤波处理中。

1 椒盐噪声

椒盐噪声又称作脉冲噪声,会随机改变图像中的像索值,是相机、传输通道、解码处理等过程中产生的黑白相间的亮暗点噪声。它就像在图像上随机撒上的一些盐粒 和黑胡椒粒,因此而得名。OpenCV4 中没有提供专门为图像添加椒盐噪声的函数,需要使用者根据自己需求编写生成椒盐噪声的程序。

考虑到椒盐噪声会随机产生在图像中的任何一个位置,因此要生成椒盐噪声,我们需要用到随机数生成函数。由于NumPy在数据处理中的优异表现,对于随机数的生成,我们可以使用np.random.randint()函数。

#np.random.randint()函数原型
output = np.random.randint(low
						   [, high
						   [, size
						   [, dtype]]])

其中各返回值和参数的含义分别为:
low:生成的随机数的最小值
high:生成的随机数的最大值
size:生成的随机数的维度
dtype:生成的随机数的格式

该函数可以用于随机数的生成,并将生成的随机数通过值返回。生成的随机数范围是[low,high),包括low但不包括high 。

向图像中添加椒盐噪声的步骤如下:
(1)确定添加椒盐噪声的位置。根据椒盐噪声会随机出现在图像中的任何一个位置的特性, 我们可以利用np.random.randint()函数生成两个随机数,分别用于确定椒盐噪声产生的行和列。

(2)确定噪声的种类。不仅椒盐噪声的位置是随机的,噪声是黑色的还是白色同样是随机的,因此可以再次生成随机数,通过判断随机数是0还是1来确定该像素是白色噪声还是黑色噪声。

(3)修改图像像素的灰度值。判断图像通道数,对于通道数不同的图像,表示像素白色的方式也不相同。若图像为多通道的,则每个通道中的值都将改变;否则,只需要改变单通道中的一个值。

(4)得到含有椒盐噪声的图像。

示例代码

#  -*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
import sys


def add_noisy(image, n=10000):
    result = image.copy()
    w, h = image.shape[:2]
    for i in range(n):
        # 分别在宽和高的范围内生成一个随机值,模拟代表x, y坐标
        x = np.random.randint(1, w)
        y = np.random.randint(1, h)
        if np.random.randint(0, 2) == 0:
            # 生成白色噪声(盐噪声)
            result[x, y] = 0
        else:
            # 生成黑色噪声(椒噪声)
            result[x, y] = 255
    return result


if __name__ == '__main__':
    # 读取图像并判断是否读取成功
    img = cv.imread('../images/cat.jpg')
    if img is None:
        print('Failed to read cat.jpg.')
        sys.exit()
    # 灰度图像添加椒盐噪声
    gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    gray_image_noisy = add_noisy(gray_image, 10000)
    # 彩色图像添加椒盐噪声
    color_image_noisy = add_noisy(img, 10000)

    # 展示结果
    cv.imshow("Gray Image", gray_image)
    cv.imshow("Gray Image Noisy", gray_image_noisy)
    cv.imshow("Color Image", img)
    cv.imshow("Color Image Noisy", color_image_noisy)
    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果如下图所示。
OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)

2 高斯噪声

高斯噪声是指噪声分布的概率密度函数服从高斯分布(正态分布)的一类噪声,其产生的主要原因是在拍摄时视场较暗且亮度不均匀,这会产生高斯噪声。除此之外,电子元器件自身的噪声和它们互相影响也是造成高斯噪声的重要原因。高斯噪声的概率密度函数如下式所示。
p ( z ) = 1 2 π σ e − ( z − μ ) 2 2 σ 2 p(z)=\frac{1}{\sqrt{2 \pi} \sigma} \mathrm{e}^{\frac{-(z-\mu)^{2}}{2 \sigma^{2}}} p(z)=2π σ1e2σ2(zμ)2
其中, z z z 表示图像像素的灰度值; μ \mu μ 表示像素值的平均值或期望值;
σ \sigma σ 表示像素的标准差,标准差的平方 ( σ 2 ) (\sigma^2) (σ2)。椒盐噪声随机出现在图像中的任意位置,高斯噪声出现在图像中所有位置。

OpenCV4中没有专门提供为图像添加高斯噪声的函数,对照在图像中添加椒盐噪声的过程,我们可以利用产生随机数的函数来对图像添加高斯噪声。NumPy中提供了可以产生符合高斯分布(正态分布)的随机数的 np.random.normal()函数。

#np.random.normal()函数原型
output = np.random.normal(loc,
						  scale
						  [, size])

其中各返回值和参数的含义分别为:
loc:高斯分布的平均值
scale:高斯分布的标准差
size:输出的随机数据维度

该函数用于生成一个指定形状的符合高斯分布的随机数,并将生成的结果通过值返回。第1个参数对应整个高斯分布的中心。第2个参数对应高斯分布的宽度。scale 值越大,分布越扁平;反之,分布越高耸。第3个参数为可选参数,可根据需求进行输出尺寸的设置,若未指定,则仅输出单个值。当参数loc设置为0,scale 设置为1时,即代表标准正态分布。

在图像中添加高斯噪声的过程大致分为以下3个步骤。

(1) 根据图像尺寸,使用np.random.normal()函数生成符合高斯分布的随机数矩阵。

(2)将原图像和生成的随机数矩阵相加。

(3)得到添加高斯噪声之后的图像。

依照上述思想,示例程序用于对灰度图像和彩色图像添加高斯噪声。由于高斯噪声是随机生成的,因此每次运行结果会有差异。

示例代码

#  -*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
import sys


def add_noise(image, mean=0, val=0.01):
    size = image.shape
    image = image / 255
    gauss = np.random.normal(mean, val ** 0.5, size)
    noise = image + gauss
    return gauss, noise


if __name__ == '__main__':
    # 读取图像并判断是否读取成功
    img = cv.imread('../images/cat.jpg')
    if img is None:
        print('Failed to read cat.jpg.')
        sys.exit()
    # 灰度图像添加高斯噪声
    gray_image = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    gray_gauss, gray_noisy_image = add_noise(gray_image)
    # 彩色图像添加高斯噪声
    color_gauss, color_noisy_image = add_noise(img)

    # 展示结果
    cv.imshow("Gray Image", gray_image)
    cv.imshow("Gray Noisy Image", gray_noisy_image)
    cv.imshow("Color Image", img)
    cv.imshow("Color Noisy Image", color_noisy_image)
    cv.waitKey(0)
    cv.destroyAllWindows()

运行结果如下图所示,结果中展示了向灰度图象和RGB图像中添加高斯噪声的结果。
OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)文章来源地址https://www.toymoban.com/news/detail-442026.html

到了这里,关于OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    目录 图像处理:随机添加椒盐噪声和高斯噪声Python 1.常见的图像噪声 (1)高斯噪声 (2) 椒盐噪声 2.生成图像噪声 (1)高斯噪声 (2) 椒盐噪声(速度慢) (3) 椒盐噪声(快速版) 3. Demo测试         图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。在噪

    2024年02月02日
    浏览(45)
  • 【数字图像处理】灰度图像中添加高斯噪声、椒盐噪声、斑点噪声以及利用不同方法(中值、排序、维纳滤波)去除各种噪声的matlab程序

    图像处理问题描述: 1、图像中分别加入不同方差的高斯噪声、不同噪声密度椒盐噪声和不同方差的斑点噪声(Gaussian noise, salt  pepper noise and speckle noise) 2、分别通过函数medfilt2、ordfilt2和 Wiener 2 去除图像中添加的一些噪声(Gaussian noise, salt  pepper noise and speckle noise)。 各部

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

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

    2024年02月05日
    浏览(46)
  • 【OpenCV • c++】图像噪音 | 椒盐噪音 | 高斯噪音

      图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述, 也就是用它的概率分布函数和概率密度分布函数。图像噪声的产生来自图像获

    2024年02月08日
    浏览(34)
  • Opencv-图像噪声(均值滤波、高斯滤波、中值滤波)

    图像噪声是图像处理中常见的问题,它是由于各种原因引入的不希望的随机变化或干扰,导致图像质量下降。噪声可以出现在图像的亮度、颜色和纹理等方面,对图像分析、计算机视觉和图像处理任务造成困难。为了减少或消除图像中的噪声,常常使用不同类型的滤波技术。

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

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

    2024年02月11日
    浏览(45)
  • python3图像加高斯噪声

    高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。常见的高斯噪声包括起伏噪声、宇宙噪声、热噪声和散粒噪声等等。 除常用抑制噪声的方法外,对高斯噪声的抑制方法常常采用数理统计方法。 高斯白噪声:如果一个噪声,它的幅度分布服从高斯分

    2024年02月08日
    浏览(44)
  • 基于FPGA的高斯白噪声的生成(中心极限定理)

    大家可以在网上查询中心极限定理的定理和解释。中心极限定理意思就是说在一组服从均匀分布的数据中,随机抽取选取m个数,然后求这个m个数的平均值,这个平均数作为x1。继续随机抽取m个数,求这m个数的平均值,作为x2,就这样一直抽取n组数,也就是获得n个的数,每一

    2024年02月10日
    浏览(49)
  • Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

    头文件 quick_opencv.h:声明类与公共函数 主函数调用 src:输入图像 。 dst:输出图像 。 ksize:内核大小 ,一般用 Size(w,h),w 为宽度,h 为深度。 anchor:被平滑的点,表示取 内核中心 ,默认值 Point(-1,-1)。 boderType:推断图像外部像素的某种边界模式。默认值 BORDER_DEFAULT 目的:

    2024年02月16日
    浏览(153)
  • 计算机视觉学习笔记(图像的灰度与灰度级 图像的深度 图像噪声 图像处理)

    如果把白色和黑色之间按对数关系分为若干等级,称为灰度,灰度分为256阶,0为黑色,灰度就是没有色彩,RGB色彩分量全部相等(150,150,150)就代表灰度为150. 一幅图像中不同位置的亮度是不一样的,可用f(x,y)来表示(x,y)上的亮度。由于光是一种能量形式,因此亮度是非负

    2024年02月01日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包