|
import imageio |
|
from skimage import io |
|
import skimage |
|
|
|
import os |
|
from PIL import Image, ImageDraw, ImageFont, ImageOps |
|
import copy |
|
|
|
from datetime import date |
|
import numpy as np |
|
from argparse import ArgumentParser |
|
from skimage.transform import resize |
|
|
|
import cv2 |
|
|
|
|
|
def color_map(m): |
|
return m[0] * np.array([1, 1, 1]) + (255 - m[0]) * np.array([0, 0, 1]) |
|
|
|
|
|
def createOverlay(image, front, zone, boundary): |
|
""" |
|
creates an image with the front label overlaying the glacier image |
|
|
|
:param image: Image of the glacier |
|
:param front: Image of the label of the front |
|
:return: an rgb image with the black and white image and red front line |
|
""" |
|
|
|
|
|
|
|
image_rgb = np.array(image * 0.5, dtype=np.uint8) |
|
|
|
try: |
|
image_rgb[zone == 0] += np.array(np.array([0, 0, 0]) / 2, dtype=np.uint8) |
|
image_rgb[zone == 64] += np.array(np.array([52, 46, 55]) / 2, dtype=np.uint8) |
|
image_rgb[zone == 127] += np.array(np.array([254, 254, 254]) / 2, dtype=np.uint8) |
|
image_rgb[zone == 254] += np.array(np.array([60, 145, 230]) / 2, dtype=np.uint8) |
|
|
|
finally: |
|
|
|
|
|
|
|
image_rgb[front == 255] = np.array(np.array([255, 0, 0]), dtype=np.uint8) |
|
|
|
return image_rgb |
|
|
|
|
|
def create_target(sar_image_path): |
|
sample_name = sar_image_path.split('/')[-1] |
|
sar_image = cv2.imread(sar_image_path) |
|
front_image_path = '/home/ho11laqe/PycharmProjects/data_raw/fronts_dilated_5/train/' + sample_name[ |
|
:-len('.png')] + '_front.png' |
|
zone_image_path = '/home/ho11laqe/PycharmProjects/data_raw/zones/train/' + sample_name[ |
|
:-len('.png')] + '_zones.png' |
|
|
|
boundary_image_path = '/home/ho11laqe/PycharmProjects/data_raw/boundaries_dilated_5/train/' + sample_name[ |
|
:-len( |
|
'.png')] + '_boundary.png' |
|
front = cv2.imread(front_image_path, cv2.IMREAD_GRAYSCALE) |
|
zone = cv2.imread(zone_image_path, cv2.IMREAD_GRAYSCALE) |
|
boundary = cv2.imread(boundary_image_path, cv2.IMREAD_GRAYSCALE) |
|
overlay = createOverlay(sar_image, front, zone, boundary) |
|
cv2.imwrite('output/target.png', cv2.cvtColor(overlay, cv2.COLOR_RGB2BGR)) |
|
|
|
|
|
if __name__ == '__main__': |
|
parser = ArgumentParser(add_help=False) |
|
parser.add_argument('--image_dir', help="Directory with predictions as png") |
|
args = parser.parse_args() |
|
|
|
image_dir = args.image_dir |
|
|
|
front_gif = [] |
|
fronts = [] |
|
zone_gif = [] |
|
zones = [] |
|
boundary_gif = [] |
|
boundaries = [] |
|
|
|
sar_image_path = '/home/ho11laqe/PycharmProjects/data_raw/sar_images/train/DBE_2008-03-30_TSX_7_3_049.png' |
|
sar_image = cv2.imread(sar_image_path) |
|
shape = sar_image.shape |
|
new_shape = (int(shape[1] / 4), int(shape[0] / 4)) |
|
sar_image = cv2.resize(sar_image, new_shape) |
|
|
|
create_target(sar_image_path) |
|
|
|
list_images = os.listdir(image_dir) |
|
list_images.sort(key=lambda y: int(y.split('_')[6])) |
|
|
|
for i, image_file in enumerate(list_images[:300]): |
|
epoch = image_file.split('_')[6] |
|
if image_file.endswith('_front.png'): |
|
print(image_file) |
|
front = cv2.imread(image_dir + '/' + image_file, cv2.IMREAD_GRAYSCALE) |
|
front = cv2.resize(front, new_shape, interpolation=cv2.INTER_NEAREST) |
|
|
|
|
|
|
|
|
|
fronts.append(front) |
|
elif image_file.endswith('_zone.png'): |
|
print(image_file) |
|
zone = cv2.imread(image_dir + '/' + image_file, cv2.IMREAD_GRAYSCALE) |
|
zone = cv2.resize(zone, new_shape, interpolation=cv2.INTER_NEAREST) |
|
|
|
|
|
|
|
|
|
zones.append(zone) |
|
elif image_file.endswith('_boundary.png'): |
|
print(image_file) |
|
boundary = cv2.imread(image_dir + '/' + image_file, cv2.IMREAD_GRAYSCALE) |
|
boundary = cv2.resize(boundary, new_shape, interpolation=cv2.INTER_NEAREST) |
|
|
|
|
|
|
|
|
|
boundaries.append(boundary) |
|
|
|
font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf", 40) |
|
font_legend = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf", 20) |
|
overlay_gif = [] |
|
for epoch, (front, zone, boundary) in enumerate(zip(fronts, zones, boundaries)): |
|
overlay = createOverlay(sar_image, front, zone, boundary) |
|
image = Image.fromarray(overlay) |
|
image_draw = ImageDraw.Draw(image) |
|
|
|
image_draw.rectangle((0, 40, 195, 210), fill='gray') |
|
|
|
image_draw.rectangle((10, 60, 30, 80), fill=(60, 145, 230, 120)) |
|
image_draw.text((35, 60), 'Ocean', font=font_legend) |
|
|
|
image_draw.rectangle((10, 90, 30, 110), fill=(255, 255, 255)) |
|
image_draw.text((35, 90), 'Glacier', font=font_legend) |
|
|
|
image_draw.rectangle((10, 120, 30, 140), fill=(255, 0, 0)) |
|
image_draw.text((35, 120), 'Glacier Front', font=font_legend) |
|
|
|
image_draw.rectangle((10, 150, 30, 170), fill=(92, 76, 85)) |
|
image_draw.text((35, 150), 'Rock', font=font_legend) |
|
|
|
image_draw.rectangle((10, 180, 30, 200), fill=(0, 0, 0)) |
|
image_draw.text((35, 180), 'Shadow', font=font_legend) |
|
|
|
image_draw.rectangle((0, 0, 330, 45), fill='gray') |
|
image_draw.text((8, 1), 'Epoch:%03i' % epoch + '/' + str(len(fronts)), font=font, ) |
|
if epoch < 10: |
|
for i in range(10 - epoch): |
|
print(i) |
|
overlay_gif.append(image) |
|
else: |
|
overlay_gif.append(image) |
|
|
|
frame_one = overlay_gif[0] |
|
frame_one.save("output/overlay.gif", format="GIF", append_images=overlay_gif, |
|
save_all=True, duration=200, loop=0) |
|
|