python 图像处理——图像增强之给图像添加噪声

前言

在训练模型时,我们往往需要对图像进行增强以改善其质量或突出某些特征或增加样本的多样性。其中一种常见的图像增强方法是添加噪声。噪声可以模拟真实世界中的干扰因素,例如传感器噪声、传输误差等。通过向图像中添加噪声,我们可以测试和评估图像处理算法的性能,并提高其鲁棒性。

例如,在计算机视觉任务中,如果训练数据集中的图像都是干净且完美的,那么模型可能会对一些实际场景中的噪声和干扰因素无法适应。但是,如果我们在训练数据集中添加一些噪声,模型就会学会更好地处理这些噪声和干扰因素,从而提高其鲁棒性和泛化能力

高斯噪声

高斯噪声,是一种服从正态分布的随机噪声。这种噪声的特点是其概率密度函数符合高斯分布(正态分布),并且具有均值为零和方差为常数的特性

import random
import cv2

def add_noise(img,percentange,mu,sigma):
    if len(img.shape) == 2:
        channel_size =1
    else:
        channel_size =3

    height,width = img.shape[0],img.shape[1]
    num = int (height*width*percentange)
    X_list = [random.randint(0,width-1) for i in range(num) ]
    Y_list = [random.randint(0, height-1) for i in range(num)]

    object_list = []
    if channel_size ==1:
        object_list.append(img)
    else:
        b,g,r = img[:,:,0],img[:,:,1],img[:,:,2]
        object_list = [b,g,r]

    for channel,object in enumerate(object_list):
        for i,x in enumerate(X_list):
            y = Y_list[i]
            a = random.gauss(mu,sigma)
            object_list[channel][y, x] = int(object[y, x] + a)

    if channel_size ==1:
        return object_list[0]
    else:
        result = cv2.merge(object_list)
        return result

img_path = 'C:/Users/Administrator/Desktop/img/2.jpg'
img = cv2.imread(img_path)
cv2.imshow("img",img)
img = add_noise(img,0.2,0,0.1)
cv2.imshow("new_img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

椒盐噪声

椒盐噪声,又被称为脉冲噪声,是一种在图像处理中常见的噪声类型。这种噪声的特点是在图像中随机出现白点或黑点,或者两者都有。具体来说,这些噪声可能使原本亮的区域出现黑色像素,或者在暗的区域出现白色像素。

椒盐噪声的成因可能是由于影像讯号受到突如其来的强烈干扰而产生,或者是由类比数位转换器、解码处理等过程产生的。此外,椒盐噪声也被称为“雪花”,这是因为它在二值图像上表现为一些像素点的变白和一些像素点的变黑,形象地类似于天空中飘落的雪花

import random
import cv2


def add_noise(img,percentange):
    if len(img.shape) == 2:
        channel_size =1
    else:
        channel_size =3

    height,width = img.shape[0],img.shape[1]
    num = int (height*width*percentange)
    X_list = [random.randint(0,width-1) for i in range(num) ]
    Y_list = [random.randint(0, height-1) for i in range(num)]

    object_list = []
    if channel_size ==1:
        object_list.append(img)
    else:
        b,g,r = img[:,:,0],img[:,:,1],img[:,:,2]
        object_list = [b,g,r]

    for channel,object in enumerate(object_list):
        for i,x in enumerate(X_list):
            y = Y_list[i]
            a = random.random()
            if a <0.5:
                object_list[channel][y, x] = 0
            else:
                object_list[channel][y, x] = 255

    if channel_size ==1:
        return object_list[0]
    else:
        result = cv2.merge(object_list)
        return result

img_path = 'C:/Users/Administrator/Desktop/img/2.jpg'
img = cv2.imread(img_path)
cv2.imshow("img",img)
img = add_noise(img,0.2)
cv2.imshow("new_img",img)
# 将图像窗口移动到指定位置
cv2.moveWindow("img", 500, 500)
cv2.moveWindow("new_img", 500, 500)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种功能强大的编程语言,用于图像处理和数字信号处理,使用Python添加噪声是一个相对简单的过程。高斯噪声是一种广泛使用的噪声类型,可用于模拟自然环境中的噪声。 以下是添加高斯噪声的过程: 1.导入所需库——numpy和opencv 2.读取图像——用OpenCV的imread函数或其他适当函数来读取图像 3.创建高斯分布——用numpy的random函数生成高斯分布 4.将高斯噪声添加图像 5.显示和保存图像——用OpenCV的imshow函数显示图像,用imwrite函数保存图像。 具体步骤如下: import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg') # 添加高斯噪声 mean = 0 var = 1 sigma = var ** 0.5 gauss = np.random.normal(mean, sigma, img.shape) gauss = gauss.reshape(img.shape[0], img.shape[1], img.shape[2]).astype('uint8') img_gauss = cv2.add(img, gauss) # 显示噪声图像 cv2.imshow('Gaussian Noise', gauss) # 显示添加噪声后的图像 cv2.imshow('Gaussian Noise Applied', img_gauss) # 保存添加噪声后的图像 cv2.imwrite('image_gauss.jpg', img_gauss) # 等待按键退出窗口 cv2.waitKey(0) cv2.destroyAllWindows() 在此示例中,高斯噪声具有平均值为0,方差为1,然后将其重塑为与原始图像相同的大小和数据类型,并将其添加到原始图像中。这生成了添加高斯噪声后的图像。最后,该程序将噪声图像添加噪声后的图像显示在OpenCV窗口中,并将添加噪声后的图像保存到磁盘上。 综上所述,使用Python添加高斯噪声是相对容易的,需要的只是导入需要的库和几行简单的代码即可完成。添加噪声可用于许多实际应用中,例如图像增强图像识别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值