概述
基于python向图像随机添加高斯噪声,并修改尺寸
噪声分布设置为(均值为0,方差分布在0~50之间)
# -*- coding: utf-8 -*-
"""
Created on Nov Mon 29 14:09:45 2021
@author: 瀛台夜雪
"""
import os
import numpy as np
import cv2
import glob
def main():
src_dir='./example/'
save_dir = './example/train'
src_dir_test='./example/test'
save_dir_test = './example/test'
#遍历文件夹下所有的图片
filepaths = glob.glob(save_dir + '/*.jpg')
filepaths_test = glob.glob(src_dir_test + '/*.jpg')
def sortKeyFunc(s):
return int(os.path.basename(s)[:-4])
#os.path.basename()返回path最后的文件名,[:-4],取后缀前的名字
filepaths_test.sort(key=sortKeyFunc)
filepaths.sort(key=sortKeyFunc)
print("[*] Reading train files...")
#如果地址不存在,创建新地址文件夹
if not os.path.exists(save_dir):
os.mkdir(save_dir)
os.mkdir(save_dir_test)
os.mkdir('./example/train/noisy')
os.mkdir('./example/train/original')
os.mkdir('./example/test/noisy')
os.mkdir('./example/test/original')
print("[*] Applying noise...")
# np.linspace(start,stop,num)创建等差数列
sig = np.linspace(0,50,len(filepaths))
np.random.shuffle(sig)
# print(sig)
sig_test = np.linspace(0,50,len(filepaths_test))
np.random.shuffle(sig_test)
for i in range(len(filepaths)):
image = cv2.imread(filepaths[i])
#将图片变换成180*180大小的图片
image = cv2.resize(image,(180,180), interpolation = cv2.INTER_CUBIC)
row,col,ch = image.shape
mean = 0
sigma = sig[i]
# print("this is train sigma")
# print(sigma)
#np.random.normal(loc=mean,scale=sigma,size=(row,col,ch))生成高斯分布的概率密度随机数,均值,方差,输入样式
#建立方差随机的高斯噪声,方差分布在0到50之间
gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch)
noisy = image + gauss
#np.clip(a,a_min,a_max)将输入的原始a限制在a_min与a_max之间,小于a_min赋值为a_min,大于a_max赋值为a_max
noisy = np.clip(noisy, 0, 255)
#noise.astype('uint8'),转变数据类型为uint8型,uint8为8位无符号整数类型,表示范围为[0:255]
noisy = noisy.astype('uint8')
cv2.imwrite(os.path.join(save_dir, "noisy/%04d.png" %i), noisy)
cv2.imwrite(os.path.join(save_dir, "original/%04d.png" %i), image)
for i in range(len(filepaths_test)):
image = cv2.imread(filepaths_test[i])
image = cv2.resize(image,(180,180), interpolation = cv2.INTER_CUBIC)
row,col,ch = image.shape
mean = 0
sigma = sig[i]
# print("this is test sigma")
# print(sigma)
gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch)
noisy = image + gauss
noisy = np.clip(noisy, 0, 255)
noisy = noisy.astype('uint8')
cv2.imwrite(os.path.join(save_dir_test, "noisy/%d.png" %i), noisy)
cv2.imwrite(os.path.join(save_dir_test, "original/%d.png" %i), image)
print("[*] Noisy and original images saved")
if __name__ == "__main__":
main()
原始图像:
噪声图像:
最后
以上就是激昂向日葵为你收集整理的python实现向图像随机添加高斯白噪声,并修改尺寸的全部内容,希望文章能够帮你解决python实现向图像随机添加高斯白噪声,并修改尺寸所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复