148 lines
6.3 KiB
Python
148 lines
6.3 KiB
Python
import os
|
|
import datetime
|
|
import numpy as np
|
|
from skimage import morphology
|
|
from skimage.segmentation import mark_boundaries
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib
|
|
from utils import *
|
|
|
|
OUT_DIR = './viz/'
|
|
|
|
norm = matplotlib.colors.Normalize(vmin=0.0, vmax=255.0)
|
|
cm = 1/2.54
|
|
dpi = 300
|
|
|
|
def denormalization(x, norm_mean, norm_std):
|
|
mean = np.array(norm_mean)
|
|
std = np.array(norm_std)
|
|
x = (((x.transpose(1, 2, 0) * std) + mean) * 255.).astype(np.uint8)
|
|
return x
|
|
|
|
|
|
def export_hist(c, gts, scores, threshold):
|
|
print('Exporting histogram...')
|
|
plt.rcParams.update({'font.size': 4})
|
|
image_dirs = os.path.join(OUT_DIR, c.model)
|
|
os.makedirs(image_dirs, exist_ok=True)
|
|
Y = scores.flatten()
|
|
Y_label = gts.flatten()
|
|
fig = plt.figure(figsize=(4*cm, 4*cm), dpi=dpi)
|
|
ax = plt.Axes(fig, [0., 0., 1., 1.])
|
|
fig.add_axes(ax)
|
|
plt.hist([Y[Y_label==1], Y[Y_label==0]], 500, density=True, color=['r', 'g'], label=['ANO', 'TYP'], alpha=0.75, histtype='barstacked')
|
|
image_file = os.path.join(image_dirs, 'hist_images_' + datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S"))
|
|
fig.savefig(image_file, dpi=dpi, format='svg', bbox_inches = 'tight', pad_inches = 0.0)
|
|
plt.close()
|
|
|
|
def export_groundtruth(c, test_img, gts):
|
|
image_dirs = os.path.join(OUT_DIR, c.model, 'gt_images_' + datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S"))
|
|
# images
|
|
if not os.path.isdir(image_dirs):
|
|
print('Exporting grountruth...')
|
|
os.makedirs(image_dirs, exist_ok=True)
|
|
num = len(test_img)
|
|
kernel = morphology.disk(4)
|
|
for i in range(num):
|
|
img = test_img[i]
|
|
img = denormalization(img, c.norm_mean, c.norm_std)
|
|
# gts
|
|
gt_mask = gts[i].astype(np.float64)
|
|
gt_mask = morphology.opening(gt_mask, kernel)
|
|
gt_mask = (255.0*gt_mask).astype(np.uint8)
|
|
gt_img = mark_boundaries(img, gt_mask, color=(1, 0, 0), mode='thick')
|
|
#
|
|
fig = plt.figure(figsize=(2*cm, 2*cm), dpi=dpi)
|
|
ax = plt.Axes(fig, [0., 0., 1., 1.])
|
|
ax.set_axis_off()
|
|
fig.add_axes(ax)
|
|
ax.imshow(gt_img)
|
|
image_file = os.path.join(image_dirs, '{:08d}'.format(i))
|
|
fig.savefig(image_file, dpi=dpi, format='svg', bbox_inches = 'tight', pad_inches = 0.0)
|
|
plt.close()
|
|
|
|
|
|
def export_scores(c, test_img, scores, threshold):
|
|
image_dirs = os.path.join(OUT_DIR, c.model, 'sc_images_' + datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S"))
|
|
# images
|
|
if not os.path.isdir(image_dirs):
|
|
print('Exporting scores...')
|
|
os.makedirs(image_dirs, exist_ok=True)
|
|
num = len(test_img)
|
|
kernel = morphology.disk(4)
|
|
scores_norm = 1.0/scores.max()
|
|
for i in range(num):
|
|
img = test_img[i]
|
|
img = denormalization(img, c.norm_mean, c.norm_std)
|
|
# scores
|
|
score_mask = np.zeros_like(scores[i])
|
|
score_mask[scores[i] > threshold] = 1.0
|
|
score_mask = morphology.opening(score_mask, kernel)
|
|
score_mask = (255.0*score_mask).astype(np.uint8)
|
|
score_img = mark_boundaries(img, score_mask, color=(1, 0, 0), mode='thick')
|
|
score_map = (255.0*scores[i]*scores_norm).astype(np.uint8)
|
|
#
|
|
fig_img, ax_img = plt.subplots(2, 1, figsize=(2*cm, 4*cm))
|
|
for ax_i in ax_img:
|
|
ax_i.axes.xaxis.set_visible(False)
|
|
ax_i.axes.yaxis.set_visible(False)
|
|
ax_i.spines['top'].set_visible(False)
|
|
ax_i.spines['right'].set_visible(False)
|
|
ax_i.spines['bottom'].set_visible(False)
|
|
ax_i.spines['left'].set_visible(False)
|
|
#
|
|
plt.subplots_adjust(hspace = 0.1, wspace = 0.1)
|
|
ax_img[0].imshow(img, cmap='gray', interpolation='none')
|
|
ax_img[0].imshow(score_map, cmap='jet', norm=norm, alpha=0.5, interpolation='none')
|
|
ax_img[1].imshow(score_img)
|
|
image_file = os.path.join(image_dirs, '{:08d}'.format(i))
|
|
fig_img.savefig(image_file, dpi=dpi, format='svg', bbox_inches = 'tight', pad_inches = 0.0)
|
|
plt.close()
|
|
|
|
|
|
def export_test_images(c, test_img, gts, scores, threshold):
|
|
image_dirs = os.path.join(OUT_DIR, c.model, 'images_' + datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S"))
|
|
cm = 1/2.54
|
|
# images
|
|
if not os.path.isdir(image_dirs):
|
|
print('Exporting images...')
|
|
os.makedirs(image_dirs, exist_ok=True)
|
|
num = len(test_img)
|
|
font = {'family': 'serif', 'color': 'black', 'weight': 'normal', 'size': 8}
|
|
kernel = morphology.disk(4)
|
|
scores_norm = 1.0/scores.max()
|
|
for i in range(num):
|
|
img = test_img[i]
|
|
img = denormalization(img, c.norm_mean, c.norm_std)
|
|
# gts
|
|
gt_mask = gts[i].astype(np.float64)
|
|
print('GT:', i, gt_mask.sum())
|
|
gt_mask = morphology.opening(gt_mask, kernel)
|
|
gt_mask = (255.0*gt_mask).astype(np.uint8)
|
|
gt_img = mark_boundaries(img, gt_mask, color=(1, 0, 0), mode='thick')
|
|
# scores
|
|
score_mask = np.zeros_like(scores[i])
|
|
score_mask[scores[i] > threshold] = 1.0
|
|
print('SC:', i, score_mask.sum())
|
|
score_mask = morphology.opening(score_mask, kernel)
|
|
score_mask = (255.0*score_mask).astype(np.uint8)
|
|
score_img = mark_boundaries(img, score_mask, color=(1, 0, 0), mode='thick')
|
|
score_map = (255.0*scores[i]*scores_norm).astype(np.uint8)
|
|
#
|
|
fig_img, ax_img = plt.subplots(3, 1, figsize=(2*cm, 6*cm))
|
|
for ax_i in ax_img:
|
|
ax_i.axes.xaxis.set_visible(False)
|
|
ax_i.axes.yaxis.set_visible(False)
|
|
ax_i.spines['top'].set_visible(False)
|
|
ax_i.spines['right'].set_visible(False)
|
|
ax_i.spines['bottom'].set_visible(False)
|
|
ax_i.spines['left'].set_visible(False)
|
|
#
|
|
plt.subplots_adjust(hspace = 0.1, wspace = 0.1)
|
|
ax_img[0].imshow(gt_img)
|
|
ax_img[1].imshow(score_map, cmap='jet', norm=norm)
|
|
ax_img[2].imshow(score_img)
|
|
image_file = os.path.join(image_dirs, '{:08d}'.format(i))
|
|
fig_img.savefig(image_file, dpi=dpi, format='svg', bbox_inches = 'tight', pad_inches = 0.0)
|
|
plt.close()
|