OpenCV(二十一):椒盐噪声和高斯噪声的产生

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

目录

1.图像噪声介绍

2.椒盐噪声的产生

3.高斯噪声的产生


1.图像噪声介绍

噪声介绍

     图像噪声是指在图像中存在的不期望的、随机的像素值变化,这些变化来源于多种因素。噪声可能导致图像细节模糊、失真或难以分辨。

以下是几种常见的图像噪声类型:

      1.椒盐噪声:又被称作脉冲噪声,它会随机改变图像中的像素值,是由相机成像、图像传输、解码处理等过程产生的黑白相间的亮暗点噪声。

     2. 高斯噪声:高斯噪声是指噪声分布的概率密度函数服从高斯分布(正态分布)的一类噪声。

2.椒盐噪声的产生

椒盐噪声生成的步骤:

  • Step1:确定添加椒盐噪声的位置。
  • Step2:确定噪声的种类。
  • Step3:修改图像像素灰度值。
  • Step4:得到含有椒盐噪声的图像。

 由于椒盐噪声是随机产生的,所以我们要使用opencv中能够产生 随机数的函数,有下面两个:

1.rand_double()

double cvflann::rand_double ( double high=1.0,

double low = 0

)

2.rand_int()

int cvflann::rand_int ( int high =RAND MAX,

int low = 0

)

由于图像像素中的数据都是整数,并且产生的椒盐噪声的数据是0或者255的整数,我们主要使用rand_int()这个函数。

       在OpenCV中,可以使用cv::Mat类和随机数生成函数rand_int()来模拟生成椒盐噪声。下面是一个示例代码,展示如何在图像中添加椒盐噪声:


#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

//图像添加椒盐噪声函数
void saltAndPepper(Mat image,int n){
    for(int k=0;k<n/2;k++){
        //随机确定图像中的位置
        int i,j;
        i=cvflann::rand_int()%image.cols;//取余数运算,保证在图像的列数内
        j=cvflann::rand_int()%image.rows;//取余数运算,保证在图像的行数内
        int write_black=rand()%2;//判断为白色噪声还是黑色噪声的变量
        if(write_black==0)//添加白色噪声
        {
            if(image.type()==CV_8UC1){
                image.at<uchar>(j,i)=255;//白色噪声
            }
            else if(image.type()==CV_8UC4)//处理彩色图片
            {
                image.at<Vec4b>(j,i)[0]=255;//Vec4b为opencv定义的一个3个值的向量类型,指定通道,B:0 G:1 R:2
                image.at<Vec4b>(j,i)[1]=255;
                image.at<Vec4b>(j,i)[2]=255;
                image.at<Vec4b>(j,i)[3]=255;
            }
        }else{//添加黑色噪声
            if(image.type()==CV_8UC1){
                image.at<uchar>(j,i)=0;//白色噪声
            }
            else if(image.type()==CV_8UC4)//处理彩色图片
            {
                image.at<Vec4b>(j,i)[0]=0;//Vec4b为opencv定义的一个3个值的向量类型,指定通道,B:0 G:1 R:2
                image.at<Vec4b>(j,i)[1]=0;
                image.at<Vec4b>(j,i)[2]=0;
                image.at<Vec4b>(j,i)[3]=0;
            }

        }

    }
}
//椒盐噪声
void Saltandpepper_noise(Mat image){
    Mat gray;
    cvtColor(image,gray,COLOR_BGR2GRAY);

    imwrite("/sdcard/DCIM/image.png",image);//展示原图
    imwrite("/sdcard/DCIM/gray.png",gray);

    saltAndPepper(image,10000);//彩色图像添加椒盐噪声
    saltAndPepper(gray,10000);//灰度图像添加椒盐噪声

    imwrite("/sdcard/DCIM/image_saltAndPepper.png",image);
    imwrite("/sdcard/DCIM/gray_saltAndPepper.png",gray);

}

在上面的代码中,首先包含了OpenCV的头文件<opencv2/opencv.hpp>。然后,定义了一个名为SaltAndPepper()的函数,用于向图像中添加椒盐噪声。

该函数使用cvflann::rand_int()函数生成随机数,并根据给定的噪声比例计算添加噪声的像素数量。接着,在图像中随机选择这些像素,并将其值设置为黑色(0)或白色(255),从而模拟生成椒盐噪声。

在Saltandpepper_noise函数中,读取了原始图像,并调用SaltAndPepper()函数来添加椒盐噪声。然后,使用cv::imwrite()显示带有噪声的图像。

OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++       OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++

         灰度图像                                           灰度图像添加椒盐噪声

OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++    OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++

            彩色图像                                           彩色图像添加椒盐噪声

请注意,在示例代码中,假设待处理的图像是8位无符号整型单通道灰度图像(CV_8UC1)或4通道彩色图像(CV_8UC4)。如果处理的图像类型不同,需要相应地修改代码。

3.高斯噪声的产生

高斯噪声生成的步骤:

Step1:创建一个与图像尺寸、数据类型以及通道数相同的Mat类变量。

Step2:在Mat类变量中产生符合高斯分布的随机数。

Step3:将原图像和含有高斯分布的随机数矩阵相加。

Step4:得到添加高斯噪声的图像。

在OpenCV中,RNG::fill()是一个用于填充数组或矩阵的函数,它可以生成指定分布的随机数,并将其存储在指定的数据结构中。该函数的签名如下:

void cv::RNG::fill ( InputOutputArray mat,

int     distType,

InputArray   a,

InputArray     b,

bool     saturateRange = false

)

  • mat:用于存放随机数的矩阵,目前只支持低于5通道的矩阵。
  • distType:指定生成随机数分布的类型,可以是以下值之一:
    • RNG::UNIFORM:均匀分布
    • RNG::NORMAL:正态分布(高斯分布)
  • a:生成分布所需的参数之一。对于均匀分布,它表示随机数的下界;对于正态分布,它是均值。
  • b:生成分布所需的参数之二。对于均匀分布,它表示随机数的上界;对于正态分布,它是标准差。
  • saturateRange:一个可选的布尔值,如果为true,则将生成的随机数截断到输出数组或矩阵的数据类型的有效范围内。

在OpenCV中,可以使用随机数生成函数和高斯分布函数来模拟生成高斯噪声。下面是一个示例代码,展示如何在图像中添加高斯噪声:

//高斯噪声
void Gaussian_noise(Mat image){
    Mat gray;
    cvtColor(image,gray,COLOR_BGR2GRAY);
    Mat image_noise=Mat::zeros(image.rows,image.cols,image.type());
    Mat gray_noise=Mat::zeros(gray.rows,gray.cols,gray.type());

    imwrite("/sdcard/DCIM/image.png",image);//展示原图
    imwrite("/sdcard/DCIM/gray.png",gray);

    RNG rng;//创建一个RNG类
    rng.fill(image_noise,RNG::NORMAL,10,20);//生成三通道的高斯分布随机数
    rng.fill(gray_noise,RNG::NORMAL,15,30);

    imwrite("/sdcard/DCIM/image_noise.png",image_noise);//三通道的高斯噪声
    imwrite("/sdcard/DCIM/gray_noise.png",gray_noise);//单通道的高斯噪声

    image=image+image_noise;//在彩色图像中添加高斯噪声
    gray=gray+gray_noise;//在灰度图像中添加高斯噪声

    //显示添加高斯噪声后的图像
    imwrite("/sdcard/DCIM/image_Gaussian.png",image);
    imwrite("/sdcard/DCIM/gray_Gaussian.png",gray);
}

这段示例代码演示了如何生成高斯噪声,并将其添加到彩色图像和灰度图像中。

首先,代码使用cvtColor函数将输入的彩色图像转换为灰度图像,并创建了grayimage变量来存储结果。

接下来,代码创建了两个空白图像:image_noisegray_noise,它们与输入图像和灰度图像具有相同的尺寸和类型。这些图像将用于存储生成的高斯噪声。

然后,代码利用RNG类创建了一个随机数生成器对象rng

通过调用rng.fill()函数,代码将生成服从高斯分布的随机数填充到image_noisegray_noise中。第一个参数是要填充的图像,第二个参数RNG::NORMAL表示生成的随机数应符合正态分布。第三个和第四个参数分别表示高斯分布的均值和标准差,这里分别为10和20(对于image_noise)以及15和30(对于gray_noise)。这些值可以根据需要进行调整。

之后,代码使用imwrite函数将原始图像、灰度图像、生成的高斯噪声图像保存到指定路径,将结果可视化。

最后,代码将高斯噪声添加到输入的彩色图像和灰度图像中,通过对应的像素相加。结果图像被保存并可视化。

OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++      OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++

           灰度图像                                               灰度图像添加高斯噪声

OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++       OpenCV(二十一):椒盐噪声和高斯噪声的产生,Android之OpenCV,opencv,人工智能,计算机视觉,C++

      彩色图像                                           彩色图像添加高斯噪声文章来源地址https://www.toymoban.com/news/detail-707042.html

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

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

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

相关文章

  • 01:高斯噪声和椒盐噪声

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

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

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

    2024年02月08日
    浏览(34)
  • 图像处理:随机添加椒盐噪声和高斯噪声Python

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

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

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

    2024年02月04日
    浏览(67)
  • 【数字图像处理】灰度图像中添加高斯噪声、椒盐噪声、斑点噪声以及利用不同方法(中值、排序、维纳滤波)去除各种噪声的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)
  • OpenCV(二十二):均值滤波、方框滤波和高斯滤波

    目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波        OpenCV中的均值滤波(Mean Filter)是一种简单的滤波技术,用于平滑图像并减少噪声。它的原理非常简单:对于每个像素,将其与其周围邻域内像素的平均值作为新的像素值。 具体的均值滤波原理如下: 定义滤波器大小

    2024年02月09日
    浏览(38)
  • opencv_c++学习(二十一)

    轮廓检测函数: image:输入图像,数据类型为CV_8U的单通道灰度图像或者二值化图像。contours:检测到的轮廓,每个轮廓中存放着像素的坐标。 mode:轮廓检测模式标志。 method:轮廓逼近方法标志。 offset:每个轮廓点移动的可选偏移量。这个函数主要用在从ROI图像中找出的轮廓并基于

    2024年02月06日
    浏览(43)
  • 《opencv实用探索·二十一》人脸识别

    Haar级联分类器 在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Haar特征和LBP特征。用的最多的是Haar特征人脸检测。 Haar级联分类器是一种用于目标检测的机器学习方法,它是一种基于机器学习的特征选择方法,能够快速而有效地检测出图像中的对象或特定的模式

    2024年02月03日
    浏览(38)
  • Android OpenCV(三十一):图像形态学

    参数一:src,输入的待形态学操作图像,图像的通道数可以是任意的,但是图像的数据类型必须是 CV_8U , CV_16U , CV_16S , CV_32F 或 CV_64F 参数二:dst,形态学操作后的输出图像,与输入图像src具有相同的尺寸和数据类型 参数三:op,形态学操作类型的标志 标志位 值 作用 MO

    2024年04月10日
    浏览(49)
  • Android OpenCV(四十一):图像分割(漫水填充法),看完豁然开朗

    漫水填充算法是根据像素灰度值之间的差值寻找相同区域实现分割。我们可以将图像的灰度值理解成像素点的高度,这样一张图像可以看成崎岖不平的地面或者山区,向地面上某一个低洼的地方倾倒一定量的水,水将会掩盖低于某个高度的区域。漫水填充法利用的就是这样的

    2024年04月10日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包