我是靠谱客的博主 激昂向日葵,最近开发中收集的这篇文章主要介绍python实现向图像随机添加高斯白噪声,并修改尺寸,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基于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实现向图像随机添加高斯白噪声,并修改尺寸所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部