File size: 3,923 Bytes
ecf08bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import cv2
import os
import plotly.express as px
import numpy as np
import pandas as pd
from plotly.subplots import make_subplots
import plotly.io as pio
pio.kaleido.scope.mathjax = None
def distribute_glacier(list_of_samples):
list_of_glaciers = {}
for glacier in [ 'COL', 'Mapple', 'Crane', 'Jorum','DBE','SI', 'JAC']:
list_of_glaciers[glacier] = [sample for sample in list_of_samples if glacier in sample]
return list_of_glaciers
if __name__ == '__main__':
generate_data = True
if generate_data:
# directories with zone label
train_dir = '/home/ho11laqe/PycharmProjects/data_raw/zones/train'
test_dir = '/home/ho11laqe/PycharmProjects/data_raw/zones/test'
list_of_train_samples = []
for sample in os.listdir(train_dir):
list_of_train_samples.append(os.path.join(train_dir, sample))
list_of_test_samples = []
for sample in os.listdir(test_dir):
list_of_test_samples.append(os.path.join(test_dir, sample))
list_of_samples = list_of_train_samples + list_of_test_samples
list_of_glacier = distribute_glacier(list_of_samples)
fig = make_subplots(rows=len(list_of_glacier.keys()), cols=1)
nan = []
rock = []
ice = []
ocean = []
date = []
glacier_name = []
for i, glacier in enumerate(list_of_glacier.keys()):
for sample in list_of_glacier[glacier]:
print(sample)
seg_mask = cv2.imread(sample, cv2.IMREAD_GRAYSCALE)
all_pixel = seg_mask.shape[0] * seg_mask.shape[1]
nan.append(np.count_nonzero(seg_mask == 0) / all_pixel * 100)
rock.append(np.count_nonzero(seg_mask == 64) / all_pixel * 100)
ice.append(np.count_nonzero(seg_mask == 127) / all_pixel * 100)
ocean.append(np.count_nonzero(seg_mask == 254) / all_pixel * 100)
sample_split = sample.split('_')
date.append(sample_split[-6])
glacier_name.append(glacier)
df = pd.DataFrame(dict(Shadow=nan, Rock=rock, Glacier=ice, Ocean=ocean, date=date, glacier_name=glacier_name))
df.to_csv('output/area.csv')
else:
df = pd.read_csv('output/area.csv')
df = df.drop_duplicates(subset=['date', 'glacier_name'])
area_plot = px.area(df,
x="date",
y=["Rock", "Shadow", "Glacier", "Ocean"],
color_discrete_map={"Shadow": 'black', "Ocean": 'blue', "Glacier": "aliceblue", "Rock": "gray"},
template="plotly_white",
height=700,
width =600,
facet_row='glacier_name',
category_orders={'glacier': [ 'COL', 'Mapple', 'Crane', 'Jorum','DBE','SI', 'JAC']}
)
area_plot.update_yaxes(type='linear', range=[0, 100], ticksuffix='%', title='area', side='right')
area_plot.for_each_annotation(lambda a: a.update(text=a.text.split("=")[1], textangle=0, x=0, xanchor='right'))
area_plot.update_layout(legend=dict(title='Area:',
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1,
font=dict(size=12)),
margin=dict(l=70, r=0, t=0, b=0)
)
area_plot.for_each_yaxis(lambda a: a.update(title=''))
area_plot.update_xaxes(title=' ',tickfont=dict(size=12))
area_plot.update_layout(font=dict(family="Times New Roma", size=10, ))
area_plot.update_annotations(font=dict(size=12))
area_plot.write_image("output/area.pdf", format='pdf')
# fig.show()
|