首页 > 编程语言 >python+OpenCv 图像噪声(椒盐噪声、高斯噪声)

python+OpenCv 图像噪声(椒盐噪声、高斯噪声)

时间:2022-11-23 17:00:24浏览次数:81  
标签:noise 椒盐 python image 噪声 np output out

由于图像采集、处理、传输等过程不可避免的会受到噪声的污染,妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。

一、椒盐噪声

椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。

椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。

目前,python-OpenCv中没有直接生成噪声的函数,需要自己手动编写,但十分容易。

代码示例:

def sp_noise(image, prob):
    """
    添加椒盐噪声
    prob:噪声比例
    """
    output = np.zeros(image.shape,np.uint8)
    thres = 1 - prob
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = random.random()
            if rdn < prob:
                output[i][j] = 0
            elif rdn > thres:
                output[i][j] = 255
            else:
                output[i][j] = image[i][j]
    return output

二、高斯噪声

高斯噪声是指噪声密度函数服从高斯分布的一类噪声。由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。

代码示例:

def gasuss_noise(image, mean=0, var=0.001):
    """
        添加高斯噪声
        mean : 均值
        var : 方差
    """
    image = np.array(image/255, dtype=float)
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out*255)

三、代码编写

import cv2 as cv
import random
import matplotlib.pyplot as plt
 
 
def sp_noise(image, prob):
    """
    添加椒盐噪声
    prob:噪声比例
    """
    output = np.zeros(image.shape,np.uint8)
    thres = 1 - prob
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = random.random()
            if rdn < prob:
                output[i][j] = 0
            elif rdn > thres:
                output[i][j] = 255
            else:
                output[i][j] = image[i][j]
    return output
 
 
def gasuss_noise(image, mean=0, var=0.001):
    """
        添加高斯噪声
        mean : 均值
        var : 方差
    """
    image = np.array(image/255, dtype=float)
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out*255)
    return out
 
 
src = cv.imread("E:\\view.jpg")
img = src.copy()
 
# 调用噪声函数
img_sp = sp_noise(img, prob=0.02)  # 噪声比例为0.02
img_gauss = gasuss_noise(img, mean=0, var=0.01)  # 均值为0,方差为0.01
 
# 显示图像
cv.imshow("src", img)
cv.imshow("sp", img_sp)
cv.imshow("gauss", img_gauss)
cv.waitKey(0)
cv.destroyAllWindows()

原图:

 

 椒盐噪声:

 

 高斯噪声:

原文链接:https://blog.csdn.net/qq_45832961/article/details/122309422

标签:noise,椒盐,python,image,噪声,np,output,out
From: https://www.cnblogs.com/gzb1/p/16918895.html

相关文章

  • python——定时执行,间隔5s执行一次,blockingScheduler
    本来一开始使用的time.sleep(5),但是执行时间长了之后,会与实际时间有偏差,因为没有计算程序本身运行的时间。 解决:使用blockingScheduler  将send()这个方法,每5s执......
  • python 使用 requests,requests_toolbelt上传图片文件,报错:AttributeError: 'int' objec
    问题在使用pythonrequests_toolbelt库上传excel文件的过程中,几类问题报错1MultipartEncoder支持中文文件名称上传开始遇到的报错以为是中文文件名称不支持,查到的......
  • python中的集合
    集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。Python中,它是可变的、无序的、不重复的元素的集合set()->newemptysetobjects......
  • python中利用pipreqs查询并安装项目所依赖的所有包
    pipreqs的安装pipinstallpipreqs-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com在terminal中,如要查看test文件夹下脚本所依赖包,则输入如下命令:pi......
  • Python-import xx 和 from xx import xx 的区别
    1.importxx:导入模块,在使用的时候需要“模块.函数”来使用例如:1importmath2math.sqr(5)  2.fromxximportxx和fromxximport*这两个本质没有区......
  • 安装Python后你的电脑多了哪些东西?
    Python安装完成之后,我们的计算机都多出了哪些东西?我们在计算机搜索框中搜索“python”,会显示出python相关的程序。可以看到,我们的计算机会多出4个应用程序,如下:  接......
  • Python中的切片
    线性结构特征​ 可迭代for...in​ 有长度,通过len(x)获取,容器​ 通过整数下标可以访问元素。正索引、负索引​ 可以切片切片sequence[start:stop]sequence......
  • Python中的元组 Tuple
    一个有序的元素组成的集合使用小括号()表示元组是不可变对象新建t1=()#空元组t2=(1,)#必须有这个逗号t3=(1,)*5t4=(1,2,3)t5=1,'a't6=(......
  • Python画桑基图
    pipinstallpyechartspipinstallsnapshot-seleniumpipinstallsnapshot-phantomjs基于Python利用桑基图(Sankeydiagram)表示转移矩阵(土地利用)https://pyecharts.org......
  • Python爬虫如何实现多线程异步
    如果自己的电脑配置高操作系统可以多任务运行的,应该首先要考虑单核CPU是怎么执行多任务的,操作系统会让各个任务交替执行。例如:任务1执行0.02秒,切换到任务2,任务2执行0.02秒,再......