123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- # main imports
- import numpy as np
- import pandas as pd
- import math
- import time
- import os, sys, argparse
- # image processing imports
- import matplotlib.pyplot as plt
- from PIL import Image
- # modules 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
- from modules.utils import data as dt
- # other variables
- learned_zones_folder = cfg.learned_zones_folder
- models_name = cfg.models_names_list
- # utils information
- zone_width, zone_height = (200, 200)
- scene_width, scene_height = (800, 800)
- nb_x_parts = math.floor(scene_width / zone_width)
- def reconstruct_image(scene_name, output):
- """
- @brief Method used to display simulation given .csv files
- @param scene_name, scene name used
- @param output, the output filename
- @return nothing
- """
- # compute zone start index
- zones_coordinates = []
- for zone_index in cfg.zones_indices:
- x_zone = (zone_index % nb_x_parts) * zone_width
- y_zone = (math.floor(zone_index / nb_x_parts)) * zone_height
- zones_coordinates.append((x_zone, y_zone))
- scene_folder = os.path.join(cfg.dataset_path, scene_name)
- folder_scene_elements = os.listdir(scene_folder)
- zones_folder = [zone for zone in folder_scene_elements if 'zone' in zone]
- zones_folder = sorted(zones_folder)
- scenes_images = [img for img in folder_scene_elements if cfg.scene_image_extension in img]
- scenes_images = sorted(scenes_images)
- # 1. find thresholds from scene
- human_thresholds = []
- for zone_folder in zones_folder:
- zone_path = os.path.join(scene_folder, zone_folder)
-
- with open(os.path.join(zone_path, cfg.seuil_expe_filename)) as f:
- human_thresholds.append(int(f.readline()))
- # 2. find images for each zone which are attached to these human thresholds by the model
- zone_images_index = []
- for threshold in human_thresholds:
- current_image_index = 0
- for image_name in scenes_images:
- image_quality = dt.get_scene_image_quality(image_name)
- if image_quality > threshold:
- current_image_index = image_quality
- break
- str_index = str(current_image_index)
- while len(str_index) < 5:
- str_index = "0" + str_index
- zone_images_index.append(str_index)
- images_zones = []
- line_images_zones = []
- # get image using threshold by zone
- for id, zone_index in enumerate(zone_images_index):
- filtered_images = [img for img in scenes_images if zone_index in img]
-
- if len(filtered_images) > 0:
- image_name = filtered_images[0]
- else:
- image_name = scenes_images[-1]
-
- image_path = os.path.join(scene_folder, image_name)
- selected_image = Image.open(image_path)
- x_zone, y_zone = zones_coordinates[id]
- zone_image = np.array(selected_image)[y_zone:y_zone+zone_height, x_zone:x_zone+zone_width]
- line_images_zones.append(zone_image)
- if int(id + 1) % int(scene_width / zone_width) == 0:
- images_zones.append(np.concatenate(line_images_zones, axis=1))
- line_images_zones = []
- # 3. reconstructed the image using these zones
- reconstructed_image = np.concatenate(images_zones, axis=0)
- # 4. Save the image with generated name based on scene
- reconstructed_pil_img = Image.fromarray(reconstructed_image)
- folders = output.split('/')
- if len(folders) > 1:
- output_folder = '/'.join(folders[:len(folders) - 1])
-
- if not os.path.exists(output_folder):
- os.makedirs(output_folder)
- reconstructed_pil_img.save(output)
- def main():
- parser = argparse.ArgumentParser(description="Compute and save reconstructed images from human thresholds")
- parser.add_argument('--scene', type=str, help='Scene index to use', choices=cfg.scenes_indices)
- parser.add_argument('--output', type=str, help='Output reconstructed image path and filename')
- args = parser.parse_args()
- p_scene = args.scene
- p_output = args.output
-
- scenes_list = cfg.scenes_names
- scenes_indices = cfg.scenes_indices
- scene_index = scenes_indices.index(p_scene.strip())
- scene_name = scenes_list[scene_index]
- reconstruct_image(scene_name, p_output)
- if __name__== "__main__":
- main()
|