zoukankan      html  css  js  c++  java
  • 椒盐噪声

    椒盐噪声

    图像噪声之椒盐噪声(Salt And Pepper Noise)

    概述:

    椒盐噪声(salt & 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)输出加噪以后的图像

    编程实例:

    为简单起见,直接使用灰度图进行測试。彩色图的原理是同样的。

    # -*- coding: utf-8 -*-
    
    from PIL import Image
    
    from pylab import *
    
    from numpy import*
    
    #读取图片,灰度化,并转为数组
    img = im = array(Image.open('./source/test.jpg').convert('L'))
    
    #信噪比
    SNR = 0.6
    
    #计算总像素数目 SP, 得到要加噪的像素数目 NP = SP * (1-SNR)
    noiseNum=int((1- SNR)*img.shape[0]*img.shape[1])
    
    #于随机位置将像素值随机指定为0或者255
    for i in range(noiseNum):
    
        randX=random.random_integers(0,img.shape[0]-1)  
    
        randY=random.random_integers(0,img.shape[1]-1)  
    
        if random.random_integers(0,1)==0:  
    
            img[randX,randY]=0  
    
        else:  
    
            img[randX,randY]=255   
    
    #显示图像
    gray()
    
    imshow(img)
    
    show()         
    
    

    执行结果:

    原图

    这里写图片描写叙述

    SNR = 0.8

    这里写图片描写叙述

    SNR = 0.6

    这里写图片描写叙述

    SNR = 0.4

    这里写图片描写叙述

    结语:

    本篇博客主要介绍了椒盐噪声这样的常见的图像噪声。希望对大家有所帮助~

  • 相关阅读:
    如何学习新技术
    创建模式之工厂方法模式
    SQL Server 存储过程
    ASP.NET Cache的一些总结
    ACE_TSS研究
    利用Thunk让C++成员函数变回调函数
    ACE内存映射学习
    ACE的初始化
    双检锁模式学习
    ACE_Task笔记
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7224115.html
Copyright © 2011-2022 走看看