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)
增加椭圆噪声
最新推荐文章于 2024-09-09 23:28:21 发布
这段代码实现了一个用于在图像上添加高斯噪声的函数,以增强图像数据集。首先,它创建一个高斯协方差矩阵,然后在图像上应用这个噪声。通过调整噪声的尺度参数,可以为训练模型提供更具挑战性的输入。最后,它遍历一个图像目录,对每个图像应用噪声增强并保存处理后的图像。
摘要由CSDN通过智能技术生成