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()

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值