from ipfml.filters import noise as nf import sys, os, getopt from PIL import Image from modules.utils import config as cfg from modules import noise noise_list = cfg.noise_labels filename_ext = 'png' generated_folder = 'generated' def generate_noisy_image(p_image, p_n, p_noise, p_identical, p_output, p_param): noisy_image = noise.get_noise_result(p_image, p_n, _noise_choice=p_noise, _identical=p_identical, _p=p_param) noisy_image = Image.fromarray(noisy_image) output_path = os.path.join(generated_folder, p_noise) if not os.path.exists(output_path): os.makedirs(output_path) output_image_path = os.path.join(output_path, p_output) if not filename_ext in output_image_path: output_image_path = output_image_path + filename_ext noisy_image.save(output_image_path) print("Image saved at... '%s'" % output_image_path) def main(): # by default.. p_param = None p_all = False if len(sys.argv) < 1: print('python noise_computation.py --noise xxxx --image path/to/image.png --n 100 --identical 0 --output image_name --all 1 --p 0.1') sys.exit(2) try: opts, args = getopt.getopt(sys.argv[1:], "h:n:i:n:i:o:a:p", ["help=", "noise=", "image=", "n=", "identical=", "output=", "all=", "p="]) except getopt.GetoptError: # print help information and exit: print('python noise_computation.py --noise xxxx --image path/to/image.png --n 100 --identical 0 --output image_name --all 1 --p 0.1') sys.exit(2) for o, a in opts: if o == "-h": print('python noise_computation.py --noise xxxx --image path/to/image.png --n 100 --identical 0 --output image_name --all 1 --p 0.1') sys.exit() elif o in ("-n", "--noise"): p_noise = a if not p_noise in noise_list: assert False, "Unknow noise parameter %s " % (noise_list) elif o in ("-i", "--image"): p_image_path = a elif o in ("-n", "--n"): p_n = int(a) elif o in ("-i", "--identical"): p_identical = int(a) elif o in ("-o", "--output"): p_output = a elif o in ("-a", "--all"): p_all = int(a) elif o in ("-p", "--p"): p_param = float(a) else: assert False, "unhandled option" img = Image.open(p_image_path) if p_all: split_output = p_output.split('.') for i in range(1, p_n): p_filename = split_output[0] + "_" + str(i) + "." + filename_ext generate_noisy_image(img, i, p_noise, p_identical, p_filename, p_param) else: generate_noisy_image(img, p_n, p_noise, p_identical, p_output, p_param) if __name__== "__main__": main()