增加椭圆噪声

这段代码实现了一个用于在图像上添加高斯噪声的函数,以增强图像数据集。首先,它创建一个高斯协方差矩阵,然后在图像上应用这个噪声。通过调整噪声的尺度参数,可以为训练模型提供更具挑战性的输入。最后,它遍历一个图像目录,对每个图像应用噪声增强并保存处理后的图像。
摘要由CSDN通过智能技术生成
import scipy.stats
import torch
import glob
import cv2
import random
import numpy as np




def make_noise(image_size, diag_limit=10):
    a = np.pi * np.random.random()
    R = np.array([
        [np.cos(a), np.sin(a)],
        [-np.sin(a), np.cos(a)],
    ])
    D = np.diag([diag_limit * np.random.random(), diag_limit * np.random.random()])
    cov = R @ D @ R.T
    pos = np.dstack((np.mgrid[0:image_size[0], 0:image_size[1]]))

    center0 = image_size[0] * np.random.random()
    center1 = image_size[1] * np.random.random()
    center = (center0, center1)
    rv = scipy.stats.multivariate_normal(mean=center, cov=cov)
    I = rv.pdf(pos)
    I = (I / I.max() * 255).astype(np.uint8)
    I = cv2.addWeighted(I, -1, np.zeros_like(I), 0, 255)
    (_, M) = cv2.threshold(I, 200, 255, cv2.THRESH_BINARY_INV)
    return (M, I)

def add_noise(image_src, diag_limit):
    image_dst = image_src.copy()
    (mask, noise) = make_noise(image_dst.shape[:2], diag_limit)
    image_dst[np.where(mask)] = noise[np.where(mask)]
    return image_dst


def creat_gauss_kernel(kernel_size=3, sigma=1, k=1):
    if sigma == 0:
        sigma = ((kernel_size - 1) * 0.5 - 1) * 0.3 + 0.8
    X = np.linspace(-k, k, kernel_size)
    Y = np.linspace(-k, k, kernel_size)
    x, y = np.meshgrid(X, Y)
    x0 = 0
    y0 = 0
    gauss = 1/(2*np.pi*sigma**2) * np.exp(- ((x -x0)**2 + (y - y0)**2)/ (2 * sigma**2))
    return gauss

if __name__ == '__main__':
    imgpaths = glob.glob("datasets/silknet/train/trainA/*")
    for imgpath in imgpaths:
        img = cv2.imread(imgpath,0)
        for i in range(10):
            img = add_noise(img, 10)

        # img = rectangleimg(img)
        img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
        cv2.imwrite(imgpath.replace("A","B"),img)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值