123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- # main imports
- import sys, os, argparse
- # image processing imports
- from PIL import Image
- import matplotlib.pyplot as plt
- from ipfml import processing, utils
- # modules and config imports
- sys.path.insert(0, '') # trick to enable import of main folder module
- import custom_config as cfg
- from data_attributes import get_image_features
- # other variables
- noise_list = cfg.noise_labels
- generated_folder = cfg.generated_folder
- filename_ext = cfg.filename_ext
- feature_choices = cfg.features_choices_labels
- normalization_choices = cfg.normalization_choices
- pictures_folder = cfg.pictures_output_folder
- steparam_picture = 10
- def main():
- parser = argparse.ArgumentParser(description="Display svd of images with noise level")
- parser.add_argument('--prefix', type=str, help='Generated noise folder prefix (ex: `generated/prefix/noise`)')
- parser.add_argument('--mode', type=str, help='Kind of normalization', default=normalization_choices)
- parser.add_argument('--feature', type=str, help='feature choice', default=feature_choices)
- parser.add_argument('--n', type=int, help='Number of images')
- parser.add_argument('--color', type=int, help='Use of color or grey level', default=0)
- parser.add_argument('--norm', type=int, help='Use of normalization from interval or whole data vector', default=0)
- parser.add_argument('--interval', type=str, help='Interval data choice (ex: `0, 200`)', default="0, 200")
- parser.add_argument('--step', type=int, help='Step of image indices to keep', default=1)
- parser.add_argument('--ylim', type=str, help='Limite to display data (ex: `0, 1`)', default="0, 1")
- args = parser.parse_args()
- param_prefix = args.prefix
- param_mode = args.mode
- param_feature = args.feature
- param_n = args.n
- param_color = args.color
- param_norm = args.norm
- param_interval = list(map(int, args.interval.split(',')))
- param_step = args.step
- param_ylim = list(map(float, args.ylim.split(',')))
- param_prefix = param_prefix.split('/')[1].replace('_', '')
- noise_name = param_prefix.split('/')[2]
- if param_color:
- file_path = param_prefix + "/" + param_prefix + "_" + noise_name + "_color_{}." + filename_ext
- else:
- file_path = param_prefix + "/" + param_prefix + "_" + noise_name + "_{}." + filename_ext
- begin, end = param_interval
- all_svd_data = []
- svd_data = []
- image_indices = []
- # get all data from images
- for i in range(1, param_n):
- if i % steparam_picture == 0:
- image_path = file_path.format(str(i))
- img = Image.open(image_path)
- svd_values = get_image_features(param_feature, img)
- if param_norm:
- svd_values = svd_values[begin:end]
- all_svd_data.append(svd_values)
- # update min max values
- min_value = svd_values.min()
- max_value = svd_values.max()
- if min_value < min_value_svd:
- min_value_svd = min_value
- if max_value > max_value_svd:
- max_value_svd = max_value
- print('%.2f%%' % ((i + 1) / param_n * 100))
- sys.stdout.write("\033[F")
- for id, data in enumerate(all_svd_data):
- if (id * steparam_picture) % param_step == 0:
- current_data = data
- if param_mode == 'svdn':
- current_data = utils.normalize_arr(current_data)
- if param_mode == 'svdne':
- current_data = utils.normalize_arr_with_range(current_data, min_value_svd, max_value_svd)
- svd_data.append(current_data)
- image_indices.append(str(id * steparam_picture))
- # display all data using matplotlib (configure plt)
- plt.rcParams['figure.figsize'] = (25, 18)
- plt.title(param_prefix + ' noise, interval information ['+ str(begin) +', '+ str(end) +'], ' + param_feature + ' feature, step ' + str(param_step) + ' normalization ' + param_mode, fontsize=20)
- plt.ylabel('Importance of noise [1, 999]', fontsize=14)
- plt.xlabel('Vector features', fontsize=16)
- for id, data in enumerate(svd_data):
- param_label = param_prefix + str(image_indices[id])
- plt.plot(data, label=param_label)
- plt.legend(bbox_to_anchor=(0.8, 1), loc=2, borderaxespad=0.2, fontsize=14)
- if not param_norm:
- plt.xlim(begin, end)
- # adapt ylim
- y_begin, y_end = param_ylim
- plt.ylim(y_begin, y_end)
- output_filename = param_prefix + "_" + noise_name + "_1_to_" + str(param_n) + "_B" + str(begin) + "_E" + str(end) + "_" + param_feature + "_S" + str(param_step) + "_norm" + str(param_norm )+ "_" + param_mode
- if param_color:
- output_filename = output_filename + '_color'
- print("Generation of output figure... %s" % output_filename)
- output_path = os.path.join(pictures_folder, output_filename)
- if not os.path.exists(pictures_folder):
- os.makedirs(pictures_folder)
- plt.savefig(output_path, dpi=(200))
- if __name__== "__main__":
- main()
|