图像处理 如何加椒盐噪声_图像处理什么情况下加椒盐噪声 - CSDN
  • 椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后...


    OpenCV—图像椒盐噪声生成器


    椒盐噪声

    椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0,加入椒盐噪声的图像如下图所示:


    原图


    图像加入黑白椒盐噪声后


    图像分通道加入椒盐噪声

    添加椒盐噪声的函数

    函数:

    void salt(cv::Mat image, int n)
    void pepper(cv::Mat image, int n)

    参数:

    • image — 输入图像(输出图像)灰度或彩色模式
    • n — 噪点个数

    //盐噪声
    void salt(cv::Mat image, int n) {
    
    	int i,j;
    	for (int k=0; k<n/2; k++) {
    
    		// rand() is the random number generator
    		i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22
    		j = std::rand()%image.rows; 
    
    		if (image.type() == CV_8UC1) { // gray-level image
    
    			image.at<uchar>(j,i)= 255; //at方法需要指定Mat变量返回值类型,如uchar等
    
    		} else if (image.type() == CV_8UC3) { // color image
    
    			image.at<cv::Vec3b>(j,i)[0]= 255; //cv::Vec3b为opencv定义的一个3个值的向量类型
    			image.at<cv::Vec3b>(j,i)[1]= 255; //[]指定通道,B:0,G:1,R:2
    			image.at<cv::Vec3b>(j,i)[2]= 255; 
    		}
    	}
    }
    
    //椒噪声
    void pepper(cv::Mat image, int n) {
    
    	int i,j;
    	for (int k=0; k<n; k++) {
    
    		// rand() is the random number generator
    		i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22
    		j = std::rand()%image.rows; 
    
    		if (image.type() == CV_8UC1) { // gray-level image
    
    			image.at<uchar>(j,i)= 0; //at方法需要指定Mat变量返回值类型,如uchar等
    
    		} else if (image.type() == CV_8UC3) { // color image
    
    			image.at<cv::Vec3b>(j,i)[0]= 0; //cv::Vec3b为opencv定义的一个3个值的向量类型
    			image.at<cv::Vec3b>(j,i)[1]= 0; //[]指定通道,B:0,G:1,R:2
    			image.at<cv::Vec3b>(j,i)[2]= 0; 
    		}
    	}
    }
    想要分通道加入椒盐噪声,只需要在image.at<cv::Vec3b>(j,i)[0]或[1]、[2]三个通道随机加入255或0即可。

    转载请注明:iracer的CSDN博客 http://blog.csdn.net/iracer/article/details/49383491
    展开全文
  •  椒盐噪声(salt-and-pepper noise)是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。  所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号...

    0、所有的代码基于python3 + opecv3.3
    1、椒盐噪声和中值滤波
      椒盐噪声(salt-and-pepper noise)是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。
      所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单。
      椒盐噪声往往由图像切割引起,去除脉冲干扰及椒盐噪声最常用的算法是中值滤波。大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。因此,实时采集的图像需进行滤波处理。消除图像中的噪声成份叫做图像的平滑化或滤波操作。滤波的目的有两个:一是抽出对象的特征作为图像识别的特征模式;二是为适应计算机处理的要求,消除图像数字化时所混入的噪声。对滤波处理的要求有两条:一是不能损坏图像轮廓及边缘等重要信息;二是使图像清晰,视觉效果好。
      我们使用信噪比(Signal NoiseRate)衡量图像噪声,图象的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图象信噪比,即信号与噪声的方差之比(其实在均值为零的情况下,功率就是方差)。首先计算图象所有像素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。
      如果是灰度图像的话,SNR=(洁净图片中的像素点的灰度值之和)/abs(噪声图片的灰度值之和-洁净图片中的灰度值之和)为该图像的信噪比。
      给一副数字图像加上椒盐噪声的步骤如下:

    1. 指定信噪比 SNR (其取值范围在[0, 1]之间)
    2. 计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)
    3. 随机获取要加噪的每个像素位置P(i, j)
    4. 指定像素值为255或者0。
    5. 重复3,4两个步骤完成所有像素的NP个像素
    6. 输出加噪以后的图像
    import cv2
    import numpy as np
    
    filename = "d:/1.jpg"
    winname = "figure"
    img = cv2.imread(filename)
    
    def addSaltNoise():
        # 指定信噪比
        SNR = 0.9
        # 获取总共像素个数
        size = img.size
        # 因为信噪比是 SNR ,所以噪声占据百分之10,所以需要对这百分之10加噪声
        noiseSize = int(size * (1 - SNR))
        # 对这些点加噪声
        for k in range(0, noiseSize):
            # 随机获取 某个点
            xi = int(np.random.uniform(0, img.shape[1]))
            xj = int(np.random.uniform(0, img.shape[0]))
            # 增加噪声
            if img.ndim == 2:
                img[xj, xi] = 255
            elif img.ndim == 3:
                img[xj, xi] = 0
        cv2.imshow(winname, img)
        cv2.waitKey(0)
    
    def main():
        addSaltNoise()
    
    if __name__ == '__main__':
        main()

    执行效果如下
    原始图像:
    这里写图片描述
    信噪比为0.9的时候:
    这里写图片描述
    信噪比为0.7的时候:
    这里写图片描述
    信噪比为0.5的时候:
    这里写图片描述
    信噪比为0.1的时候:
    这里写图片描述

    通过对已经被椒盐噪声污染的图片进行中值滤波

    import cv2
    import numpy as np
    
    def addSaltNoise(img,snr):
        # 指定信噪比
        SNR = snr
        # 获取总共像素个数
        size = img.size
        # 因为信噪比是 SNR ,所以噪声占据百分之10,所以需要对这百分之10加噪声
        noiseSize = int(size * (1 - SNR))
        # 对这些点加噪声
        for k in range(0, noiseSize):
            # 随机获取 某个点
            xi = int(np.random.uniform(0, img.shape[1]))
            xj = int(np.random.uniform(0, img.shape[0]))
            # 增加噪声
            if img.ndim == 2:
                img[xj, xi] = 255
            elif img.ndim == 3:
                img[xj, xi] = 0
        return img
    
    def removeSaltNoise():
        filename = "d:/1.jpg"
        # 得到加噪声之后的图像
        img = addSaltNoise(cv2.imread(filename),0.9)
        # 进行中值滤波
        lbimg = cv2.medianBlur(img, 3)
        cv2.imshow('src', img)
        cv2.imshow('dst', lbimg)
        cv2.waitKey(0)
    
    def main():
        removeSaltNoise()
    
    if __name__ == '__main__':
        main()

    效果如下:
    被污染之后的图像(信噪比0.9的椒盐噪声):
    这里写图片描述
    经过中值滤波之后的图像:
    这里写图片描述
    真实的图像:
    这里写图片描述
    显然仅仅通过中值滤波还不够。因此调整中值滤波器,也就是cv2.medianBlur(img, 3)这个函数的参数,首先说一下中值滤波。
      中值滤波(Median filter)是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节,中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点,对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值。中值滤波器在处理连续图像窗函数时与线性滤波器的工作方式类似,但滤波过程却不再是加权运算。
      中值滤波在一定的条件下可以克服常见线性滤波器如最小均方滤波、方框滤波器、均值滤波等带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息, 保存边缘的特性使它在不希望出现边缘模糊的场合也很有用,是非常经典的平滑噪声处理方法。这个函数的定义是

    def medianBlur(src,ksize,dst=None)  
    其中src代表原图像,dst代表输出文件,缺省值为None,ksize代表孔径的线性尺寸,是int类型的大于一的奇数

    以上程序ksize的值比较小,效果不太好,现在进行调整效果如下
    ksize = 5的时候(貌似更清晰了):
    这里写图片描述
    ksize = 7的时候(更清晰了,是不是ksize的值越大越好呢):
    这里写图片描述
    ksize = 9的时候:
    这里写图片描述
    ksize = 21的时候(虽然椒盐噪声没了,但是图像也变的模糊了,因为ksize太大了,把有用的信息也用中值代替了,误差就逐渐显现出来了):
    这里写图片描述
    来个极端的,ksize = 101的时候(已经模糊不清了。。。):
    这里写图片描述
    虽然ksize(模板大小为ksize * ksize)越大可以有效的消除噪声,但是会使边界模糊,因此对ksize的选择直接影响图片的质量。

    展开全文
  • 椒盐噪声 什么是椒盐噪声 椒盐噪声,就是椒噪声和盐噪声的混合噪声。其中,椒噪声的椒即是黑胡椒之意,在图像中表现为黑色点斑;而盐噪声则是取自食盐,在图像中表现为白色点状。一般两种噪声在图像中混合出现,...

    椒盐噪声

    1. 什么是椒盐噪声
      椒盐噪声,就是椒噪声和盐噪声的混合噪声。其中,椒噪声的椒即是黑胡椒之意,在图像中表现为黑色点斑;而盐噪声则是取自食盐,在图像中表现为白色点状。一般两种噪声在图像中混合出现,表现为黑白混杂。
    2. 如何添加椒盐噪声
      因为椒噪声表现为黑色,属于低灰度图像;盐噪声表现为白色,属于高灰度图像。利用这种特性,可以在图像中随机选取像素点赋值为0或者255,通常为了便于人眼分辨,随机赋值为255.
    3. 如何去除椒盐噪声
      椒盐噪声的像素值为0或者255,用中值滤波的方法处理效果非常好。中值滤波是在对一个区域的像素值进行大小排序,取其中值代表这一区域的像素值。因此对于消弱高低频分量对图像的影响的效果非常明显。
      opencv实现程序:https://blog.csdn.net/m0_37992521/article/details/89840367
    展开全文
  • 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈...

    添加椒盐噪声
        椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。

    方法一:利用imnoise()函数

    t=imread('a1.jpg');
    subplot(1,2,1),imshow(t),title('原图');
    t1=imnoise(t,'salt & pepper',0.1);
    subplot(1,2,2),imshow(t1),title('加入噪声密度:0.1的椒盐噪声');
    t2=imnoise(t,'salt & pepper',0.2);
    figure,subplot(1,2,1),imshow(t2),title('加入噪声密度:0.2的椒盐噪声');
    t3=imnoise(t,'salt & pepper',0.3);
    subplot(1,2,2),imshow(t3),title('加入噪声密度:0.3的椒盐噪声');
    

    效果图:
    在这里插入图片描述
    在这里插入图片描述
    注意:

    • 噪声类型是 ‘salt & pepper’ 一定注意空格的位置 这里比较严格
    • 当噪声类型是’salt & pepper’的时候,第三个参数的意思是噪声密度,比如0.1,那么总像素个数的10%为黑白点,当然是黑点还是白点都是随机的。

    方法二:自己构造随机点

    image=imread('a1.jpg');
    [width,height,z]=size(image);
    
    result2=image;
    subplot(1,2,1)
    imshow(image);
    title('原图');
    
    %k1、k2作为判断临界点
    k1=0.2;
    k2=0.2;
    %rand(m,n)是随机生成m行n列的矩阵,每个矩阵元素都在0-1之间
    %这里k都是0.2,所以小于k的元素在矩阵中为1,反之为0
    a1=rand(width,height)<k1;
    a2=rand(width,height)<k2;
    %合成彩色图像
    t1=result2(:,:,1);
    t2=result2(:,:,2);
    t3=result2(:,:,3);
    %分成黑点 白点 随机
    t1(a1&a2)=0;
    t2(a1&a2)=0;
    t3(a1&a2)=0;
    t1(a1& ~a2)=255;
    t2(a1& ~a2)=255;
    t3(a1& ~a2)=255;
    result2(:,:,1)=t1;
    result2(:,:,2)=t2;
    result2(:,:,3)=t3;
    subplot(1,2,2)
    imshow(result2);
    title('加椒盐噪声后');
    

    效果图:
    在这里插入图片描述

    代码说明:
    1.c=rand(10,10)
    在这里插入图片描述
    2.a=c<0.2
    凡是第一步生成的10*10矩阵中元素小于0.2的元素都变成1,其余为0(和c++的0假1真差不多),这一步就是模拟噪声密度,小于0.2相当于有20%的像素点。
    在这里插入图片描述
    3.b=rand(10,10)<0.2
    在这里插入图片描述
    4.在分别a&b a&~b
    a&b:a和b队员元素都为1的时候,则结果为1,反正为0. 显示白点或者黑点
    a&~b:a为1 b为0时,结果为1 显示黑点或者白点
    这里都是以a为基准,只有a为1的点才可能成为黑白点,而a为1的点就是通过限制临界值获得的,其实就是imnoise中的噪声密度值。

    更多

    获取更多资料、代码,微信公众号:海轰Pro
    回复 海轰 即可

    展开全文
  • 本程序通过MATLAB实现,主要实现向图像中加入高斯噪声和椒盐噪声,内附有实验结果
  • 数字图像处理——添加高斯噪声&椒盐噪声 本文链接:https://blog.csdn.net/u012936765/article/details/53200918 最近交了数图作业,mark一下。 1.添加高斯噪声 1.1概率密度函数 σ为z的标准差,z为均值,...
  • loadbmp.h #include #include #include #include #include #define pi (double)3.14159265359 #define BI_RGB 0 #define BI_RLE8 1 #define BI_RLE4 2 #define BI_BITFIELDS 3 ...typede
  • 若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意思的 分享,可搜一搜 微信公共号 “分享猿” 免费获取资源。也可扫描下面的二维码关注,期待你的到来~ 一、椒盐噪声 椒盐...
  • 图像处理 椒盐噪声

    2017-12-15 11:01:55
    椒盐噪声
  • ... 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是
  • 椒盐噪声是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素。椒盐噪声是一种因为信号脉冲强度引起的噪声,椒盐噪声用中值滤波比较好。 原因是:  1.椒盐...
  • 1.向图像添加椒盐噪声; 2.利用2个3×3模板的均值滤波器对受噪声干扰的图像进行平滑处。   主要函数: void SaltNoise(IplImage*src,IplImage*dst);//产生椒盐噪声 void FilterAverage1(IplImage*src,IplImage...
  • 图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声。在这里,我们先看下图像中两种噪声各自的特征。 椒盐噪声:噪声幅值基本相同,但出现位置随机。 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的...
  • 椒盐噪声与高斯噪声的MATLAB实现 椒盐噪声的特征:出现位置是随机的,但噪声的幅值是基本相同的。 高斯噪声的特征:出现位置是一定的(每一点上),但噪声的幅值是随机的。 代码实现 % 椒盐噪声与高斯噪声示例 im...
  • 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰...
  • 图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声。在这里,我们先看下图像中两种噪声各自的特征。 椒盐噪声:噪声幅值基本相同,但出现位置随机。 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的。
  • 这个是用C#写的小型图像处理应用程序,包办有椒盐噪声、中值滤波、高斯低通等功能。
  • 椒盐噪声 在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声。通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大。 在信号系统中,计量单位为dB,为10lg(PS/PN), PS和PN分别代表...
  • #include <opencv2/opencv.hpp> #include <iostream> using namespace cv;...//添加椒盐噪声 Mat addSaltNoise(Mat srcImage, int n) { Mat resultImage = srcImage.clone(); for (int ...
  • 该资源事先了一幅图像加入椒盐噪声并将其解除出来的程序及其源代码
1 2 3 4 5 ... 20
收藏数 3,470
精华内容 1,388
关键字:

图像处理 如何加椒盐噪声