近期给红外仿真图像加噪声和模糊,在几种常见的数字图像噪声,及使用python添加噪声的基础上写了一个批量添加噪声和模糊的代码
import cv2
import os
import numpy as np
from PIL import Image
from skimage import util
def make_noise(file_path, file,save_path, mean=0.0, var=0.01, ksize=(1, 1)):
# 批处理
img_path=os.path.join(file_path,file)
image_names = os.listdir(img_path) # 列举path下所有文件和文件夹名称(返回一个list)
for image_name in image_names:
if (image_name.endswith('.jpg')):
img = Image.open(os.path.join(img_path, image_name))
# 转灰度图
img = img.convert('L')
img = np.array(img)
# 高斯模糊,ksize:模糊核,5为方差
noise_gs_img = cv2.GaussianBlur(img, ksize, 5)
# noise_gs_img=util.random_noise(img,mode='pepper',amount = 0.05) # t添加椒盐噪声
# 高斯噪声,mode:噪声类型,mean,var:高斯函数均值方差
if var>0:
noise_gs_img = util.random_noise(img, mode='gaussian', mean=mean, var=var)
noise_gs_img = noise_gs_img * 255 # 由于输出是[0,1]的浮点型,先转成灰度图(我的输入就是灰度图)
noise_gs_img = noise_gs_img.astype(np.int) # 再变成整型数组
# 转3通道图片
noise_gs_img = Image.fromarray(noise_gs_img.astype('uint8')).convert('RGB')
# 转array
noise_gs_img = np.array(noise_gs_img)
# 生成图片文件名
save_name = file+"_Gsbur"+str(ksize[0])+"GsNoise"+str(int(100*var))+'_' + image_name
# 保存
cv2.imwrite(os.path.join(save_path, save_name), noise_gs_img) # 保存到新建的文件夹
if __name__ == '__main__':
# 图像路径
file_path = r'G:\simulation'
# 保存路径
savedpath = r'G:\simulationResult\new'
# 获取每种飞机所在的文件夹
file_list = os.listdir(file_path)
# 创建保存路径
if os.path.exists(savedpath):
pass
else:
os.mkdir(savedpath)
# 高斯噪声方差
vars = [0.0, 0.01]
# vars = [0.0, 0.01, 0.02, 0.04]
# ksizes = [(1, 1), (3, 3), (5, 5), (7, 7)]
# 模糊核
ksizes = [(9,9),(13,13),(15,15)]
# 逐飞机处理
for file in file_list:
for var in vars:
for ksize in ksizes:
# 生成噪声图片
make_noise(file_path,file, savedpath, var=var, ksize=ksize)