Este notebook es una herramienta para el reescalado de imágenes.
In [ ]:
%matplotlib inline
from __future__ import print_function
from ipywidgets import interact_manual, fixed
import os.path
from math import ceil
import numpy as np
import random
from skimage import io
from skimage.transform import rotate, rescale, resize
import matplotlib.pyplot as plt
import json
import warnings
In [ ]:
def rescale_coords(coords, factor_h, factor_v, h_limits, v_limits):
rescale_cs = []
for coord in coords:
if(coord[0] > h_limits[0] and coord[2] < h_limits[1] and
coord[1] > v_limits[0] and coord[3] < h_limits[1]):
r_coord = []
r_coord.append(coord[0] * factor_h)
r_coord.append(coord[1] * factor_v)
r_coord.append(coord[2] * factor_h)
r_coord.append(coord[3] * factor_v)
rescale_cs.append(r_coord)
return rescale_cs
In [ ]:
# Contamos el número de imágenes que tenemos en
# el directorio de las imágenes etiquetadas
import os, os.path
import re
path="../../rsc/img/Default"
dest_path = "../../rsc/img/rescaled/"
pattern = re.compile("^.*\.jpg$", re.IGNORECASE)
def list_images(path='../../rsc/img/Default'):
images_list = []
for name in os.listdir(path):
json_name = name.split(".")[0] + ".json"
if pattern.match(name) \
and os.path.exists(path + "/" + json_name):
images_list.append(path + "/" + name)
return images_list
In [ ]:
def read_coords_conversion(coords_dict):
for k, coords in coords_dict.items():
coords_mod = np.array(coords)
coords_mod = coords_mod[:,[2,0,3,1]]
coords_mod = coords_mod.tolist()
coords_dict[k] = coords_mod
return coords_dict
In [ ]:
def save_coords_conversion(coords_dict):
for k, coords in coords_dict.items():
if len(coords) == 0:
continue
coords_mod = np.array(coords)
coords_mod = coords_mod[:,[1,3,0,2]]
coords_mod = coords_mod.tolist()
coords_dict[k] = coords_mod
return coords_dict
In [ ]:
import copy
images_names_list = list_images(path)
if len(images_names_list) == 0:
raise ValueError("Number of images must be greater than 0")
for image_path in images_names_list:
warnings.filterwarnings('ignore')
original_image = io.imread(image_path)
json_path = "../.." + image_path.split(".")[-2] + ".json"
image_name = os.path.split(image_path)[1].split(".")[0]
image_with_format = image_name + ".jpg"
# Cargamos coordenadas, si existen,
# y si no existe fichero de coordenadas
# pasamos a la siguiente imagen
if os.path.exists(json_path):
with open(json_path) as jsonfile:
coords_dict = json.load(jsonfile)
coords_dict = coords_dict[image_with_format]
coords_dict = read_coords_conversion(coords_dict)
else:
continue
# Cambios de tamaño en la imagen
mod_image = original_image[0:1920,0:1920]
mod_image = resize(mod_image,(480,480),mode='constant')
mod_coords = dict()
for k, coords in coords_dict.items():
mod_coords[k] = rescale_coords(coords,
480/1920, 480/1920, (0,1920), (0,1920))
# Guardamos imagen
io.imsave(dest_path + image_name + ".jpg", mod_image, quality=30)
with open(dest_path + image_name + ".json", "w") as jsonfile2:
mod_coords_dict = dict()
mod_coords_dict[image_name +".jpg"] = save_coords_conversion(mod_coords)
json.dump(mod_coords_dict, jsonfile2)