From c1c1e6aacbd82259c3bd72335fdb8d5c3ab6fdeb Mon Sep 17 00:00:00 2001 From: kvos Date: Fri, 20 Apr 2018 15:45:07 +1000 Subject: [PATCH] finalised new shoreline detection method --- data/L8/BROULEE/BROULEE_accuracy_georef.pkl | Bin 0 -> 1819 bytes data/L8/BROULEE/BROULEE_epsgcode.pkl | 1 + data/L8/BROULEE/BROULEE_timestamps.pkl | Bin 0 -> 5952 bytes data/L8/MURI/MURI_accuracy_georef.pkl | Bin 0 -> 165 bytes data/L8/MURI/MURI_epsgcode.pkl | 1 + data/L8/MURI/MURI_timestamps.pkl | Bin 0 -> 498 bytes data/L8/MURI2/MURI2_accuracy_georef.pkl | Bin 0 -> 382 bytes data/L8/MURI2/MURI2_epsgcode.pkl | 1 + data/L8/MURI2/MURI2_timestamps.pkl | Bin 0 -> 5226 bytes data/L8/NARRA/NARRA_output_new.pkl | Bin 0 -> 353235 bytes data/L8/NARRA/NARRA_refpoints.pkl | Bin 520 -> 1360 bytes data/L8/NARRA/NARRA_refpoints2.pkl | Bin 1360 -> 0 bytes data/L8/NARRA/NARRA_skipped_new.pkl | Bin 0 -> 254 bytes download_images_L8.py | 29 +- functions/sds.py | 38 +- functions/utils.py | 8 + make_gif.py | 4 +- make_gif_classified.py | 4 +- make_gif_classified_sl.py | 228 +++++++++++ make_gif_classified_sl_MURI.py | 193 +++++++++ make_gif_classified_sl_NARRA.py | 227 +++++++++++ make_gif_classified_sl_NARRA_Chris.py | 229 +++++++++++ old/olddata/narra_beach.pkl | Bin 0 -> 520 bytes read_images.py | 6 +- read_images2.py | 180 ++++++--- read_images_old.py | 284 +++++++++++++ sand_pixtrain_beach.py | 4 +- sand_runNN.py | 4 +- sl_comparison_NARRA.py | 382 ++++++++++++++++++ ..._coverage.py => sl_comparison_NARRA_old.py | 6 +- 30 files changed, 1751 insertions(+), 78 deletions(-) create mode 100644 data/L8/BROULEE/BROULEE_accuracy_georef.pkl create mode 100644 data/L8/BROULEE/BROULEE_epsgcode.pkl create mode 100644 data/L8/BROULEE/BROULEE_timestamps.pkl create mode 100644 data/L8/MURI/MURI_accuracy_georef.pkl create mode 100644 data/L8/MURI/MURI_epsgcode.pkl create mode 100644 data/L8/MURI/MURI_timestamps.pkl create mode 100644 data/L8/MURI2/MURI2_accuracy_georef.pkl create mode 100644 data/L8/MURI2/MURI2_epsgcode.pkl create mode 100644 data/L8/MURI2/MURI2_timestamps.pkl create mode 100644 data/L8/NARRA/NARRA_output_new.pkl delete mode 100644 data/L8/NARRA/NARRA_refpoints2.pkl create mode 100644 data/L8/NARRA/NARRA_skipped_new.pkl create mode 100644 make_gif_classified_sl.py create mode 100644 make_gif_classified_sl_MURI.py create mode 100644 make_gif_classified_sl_NARRA.py create mode 100644 make_gif_classified_sl_NARRA_Chris.py create mode 100644 old/olddata/narra_beach.pkl create mode 100644 read_images_old.py create mode 100644 sl_comparison_NARRA.py rename time_coverage.py => sl_comparison_NARRA_old.py (98%) diff --git a/data/L8/BROULEE/BROULEE_accuracy_georef.pkl b/data/L8/BROULEE/BROULEE_accuracy_georef.pkl new file mode 100644 index 0000000000000000000000000000000000000000..6b05f81e606f037523e9a8883827f4d923cb88cd GIT binary patch literal 1819 zcmX|CX>3eU6sDwVRA)LfZ)Q60P3KL=F1ARO*si6$XvIYDu1%viQaHz`M~XOXT-v+`ZxROA4irtrnP(kG z4YdwR5n8{ZAJ$TYYq=+`U(sKRWOcg`i$x8dvLLudnSd4E`2>Ag?H=G762fH12uG8 znkGeLd2$-AUT8jCP%=OYdsP2Y*SzG%$WE}+J-u;5>tx?wQ z7g9v0T|3rchznKJX&w{b`xN-$lFdIKh!{Xsa5@4{yY%84=N2GWo(|~AKY>^00izy3 z#5M%agfH`|6c&?U6U`S^qKY*$pUcBuT<3+IrfUx#Qv6DhQbRpJn5hG%R1x2C03Sha z_as35RD$C3aK_yIBKyZJ6nNN6p>Zaw_o>{}uE4`vM$K4=VIrxjc#sqcr16XgQn=^o zTqe;p?K&jjl9S$%81GRsLp7MF1Vz{gDH3~v!R(*NMfln@M)nW|nvO-YxxdO&?nu#) z3ycoZwcGh^>A@N1In0{++C%>2lK{4Z!~s+%!*Khx**xqYlSC#3{fo752C7mX3vj@A zl?u7)v+jY^uCt*kZZU^eQNii)bAQ9M95CAVF8KurCuv&jYnm~eTo@>VNsj9{ky~0^ zi;mp?2T^`QfY~229iVfI?k5jqpZUBOLXzpptx4R4UiOPi1{bAURH zI>X>>)#i#sbwk)}WQ*xEUlY|^fSQh!JcM7^trqpe=l#$b)gMoN8Xe!U<+I+4FEPwJ1F#4 zJIK649vBGM6Y~Y9!QoHp^bA1Vi?+&XipHY0g1>~9Rjuw+Hy`$LKz~MQ1;z<@M!TzC zG0LvcD>(W(y_kc=5-oTlo6F5adAUV`G%j*e(dd;h(64fU??k^*L_VvU1ui?IX$j5J z)6U1Y3?6c>r%G=S&YkM#eljo@W8(Xub`=I4@8?-!39Xm^F%1{84GS0H2DNw)h6~m3 z2Xz^GFjohROdv5Zvu&o%dQT3Gg}7?eW`T_Z3N*xJ`#X8ox_LbK7-2OD!RdOo1^Cn9 z;VJH7Yk8CcAl$>Y39>ptRTjiGxeKg&>PrEhRqy3vSn}cUd_CkM#05Fif>V{ICVixa Sh7gC$Td@s1cTwt$ZuuWdsm&b# literal 0 HcmV?d00001 diff --git a/data/L8/BROULEE/BROULEE_epsgcode.pkl b/data/L8/BROULEE/BROULEE_epsgcode.pkl new file mode 100644 index 0000000..e8085a5 --- /dev/null +++ b/data/L8/BROULEE/BROULEE_epsgcode.pkl @@ -0,0 +1 @@ +M. \ No newline at end of file diff --git a/data/L8/BROULEE/BROULEE_timestamps.pkl b/data/L8/BROULEE/BROULEE_timestamps.pkl new file mode 100644 index 0000000000000000000000000000000000000000..48dbc594de302b9edd095b2914d1207093496d2b GIT binary patch literal 5952 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 Kpe5d1sd@m6cR&XK literal 0 HcmV?d00001 diff --git a/data/L8/MURI/MURI_epsgcode.pkl b/data/L8/MURI/MURI_epsgcode.pkl new file mode 100644 index 0000000..60e9d64 --- /dev/null +++ b/data/L8/MURI/MURI_epsgcode.pkl @@ -0,0 +1 @@ +M\. \ No newline at end of file diff --git a/data/L8/MURI/MURI_timestamps.pkl b/data/L8/MURI/MURI_timestamps.pkl new file mode 100644 index 0000000000000000000000000000000000000000..1862790d248677b199937e41700bfcbbecea5508 GIT binary patch literal 498 zcmX}o%Ps?P6b5i+rkzWt)yq*@+Pa&6-7j_Dd4m&Tfgm)gg~XTCf>lFeV_|FI1?>6= z9>Bs2pge&`FlYXW-N`Q}U-Eq|^AKIZ>DfuM-aNmkd;bTzw>|sEvT3C3UUgucUS2nE zyrbQnZ4ahmSoerA;thHGaPl-o?&K@%M(7U1jr`L{QPoN9b>N977`}GXAXPJ-(nyM@ z7(Lpp94X&V`mD?B;FEPs66Uors=U-IBhZw_=e;FB4amg7GA7zYbk2w_dnfu2W7oT8EYInn& zWbEx2fq1x5HS&&KB9)b#De-B>Oyu8If`YmDV;i&LbBuZIu@VI}^QDCa@kPdxb~_#J p5dV0`vUrWLqTS7geG_P7ReX)H9{G=zqF~&-y~Kw2CS$8U`v;UHfRF$H literal 0 HcmV?d00001 diff --git a/data/L8/MURI2/MURI2_accuracy_georef.pkl b/data/L8/MURI2/MURI2_accuracy_georef.pkl new file mode 100644 index 0000000000000000000000000000000000000000..14329361a75d8dc4fd17ca31211a3cfe440d98d3 GIT binary patch literal 382 ucmZo*jxA)+@a7tYxI)0)!FHL-U45wqxD*f)cX!ZZ*Jk4J+=Z?%RSy8`KSFZ= literal 0 HcmV?d00001 diff --git a/data/L8/MURI2/MURI2_epsgcode.pkl b/data/L8/MURI2/MURI2_epsgcode.pkl new file mode 100644 index 0000000..60e9d64 --- /dev/null +++ b/data/L8/MURI2/MURI2_epsgcode.pkl @@ -0,0 +1 @@ +M\. \ No newline at end of file diff --git a/data/L8/MURI2/MURI2_timestamps.pkl b/data/L8/MURI2/MURI2_timestamps.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8c6d30e9cb8a65aec4ee8c3afab8b146adf502fa GIT binary patch literal 5226 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§ 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 KTT;lEqz3>Z8mDpq diff --git a/data/L8/NARRA/NARRA_refpoints2.pkl b/data/L8/NARRA/NARRA_refpoints2.pkl deleted file mode 100644 index 0f19ec3605de26d545b848ada3136ffa3dccb22d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmYk*e=L-790%~{T%qf_!lRg2B0GPu<|MUS^Ei{bjgX@0hdXXEhwnM$tV`v`SyyDs zkCLWl&57AHw;M)3NXyxpXw}duwP*vV>gLSy_@eJuOo%%M#03h*+y)r6sQYMGPTPh^zz*5n>jj4N+(# zSI7|h37JL6nl4S0=Vm0akWH)=K@gHaWGf_ujAFDY3bD9CW-J3MA8if~4?k+bXZ0f_ zb1Lr$QjcYQTf+tQ=xP0}D|Gt`Y%S2M-PZvQX@c16muKgQH?Hr59 z76T`5)@zK@B(;>o)?NVa_~D5m0K2KJ;Jg~R^T)>ap(&D@Z_wA&0SaSNfqJM$kH z&R}0!R(r<*KhAUx@x|W#_4-sga7FhUiz9YX?hb7U@Bq5rie0C80DOizqYB0KqxVni z^uTNBdj`G?Ne#eR^gD|@U9{uCU-2`mAL4r^waA7!wcZEMR(sw7+_&btvR-H4htMa> z<^O#y2qO0ZS5957cEEG&N#P_M1J3pso>5~@T&eU<0UmcJPvwSl;=~`3UI89jQC58k zyE=RJ&^_RVoV`3doWm0dbAMZb7ts0SEj~Kf2b^t5llbF2^Cyhb5#S4S&V%2Qb+f<~ z^j;k42^(ZgulGSY{Y<0B`!dkD-Q5*zM|w5sER_jk~Hp)`95M8I#;&iXK4dJ#C`~ 1) diff --git a/make_gif.py b/make_gif.py index e3c524d..322f7ac 100644 --- a/make_gif.py +++ b/make_gif.py @@ -82,12 +82,12 @@ for i in idx_nocloud: fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask im_qa = im_ms[:,:,5] diff --git a/make_gif_classified.py b/make_gif_classified.py index 5e58376..c5119de 100644 --- a/make_gif_classified.py +++ b/make_gif_classified.py @@ -95,14 +95,14 @@ for i in range(N): fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] nrow = im_pan.shape[0] ncol = im_pan.shape[1] # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask im_qa = im_ms[:,:,5] diff --git a/make_gif_classified_sl.py b/make_gif_classified_sl.py new file mode 100644 index 0000000..601ec32 --- /dev/null +++ b/make_gif_classified_sl.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Run Neural Network on image to extract sandy pixels +#==========================================================# + +# Initial settings +import os +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import matplotlib.lines as mlines +from matplotlib import gridspec +from datetime import datetime, timedelta +import pytz +import ee +import pdb +import time +import pandas as pd +# other modules +from osgeo import gdal, ogr, osr +import pickle +import matplotlib.cm as cm +from pylab import ginput + +# image processing modules +import skimage.filters as filters +import skimage.exposure as exposure +import skimage.transform as transform +import sklearn.decomposition as decomposition +import skimage.measure as measure +import skimage.morphology as morphology +from scipy import ndimage +import imageio + + +# machine learning modules +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +from sklearn.preprocessing import StandardScaler, Normalizer +from sklearn.externals import joblib + +# import own modules +import functions.utils as utils +import functions.sds as sds + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 +ee.Initialize() + +# parameters +cloud_thresh = 0.2 # threshold for cloud cover +plot_bool = False # if you want the plots +prob_high = 100 # upper probability to clip and rescale pixel intensity +min_contour_points = 100# minimum number of points contained in each water line +output_epsg = 28356 # GDA94 / MGA Zone 56 +buffer_size = 10 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 10 # number of pixels in a beach (pixel classification) + +# load metadata (timestamps and epsg code) for the collection +satname = 'L8' +#sitename = 'NARRA_all' +#sitename = 'NARRA' +#sitename = 'OLDBAR' +#sitename = 'OLDBAR_inlet' +#sitename = 'SANDMOTOR' +#sitename = 'TAIRUA' +#sitename = 'DUCK' +#sitename = 'BROULEE' +sitename = 'MURI' + + +# Load metadata +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_timestamps' + '.pkl'), 'rb') as f: + timestamps = pickle.load(f) +timestamps_sorted = sorted(timestamps) +daysall = (datetime(2019,1,1,tzinfo=pytz.utc) - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() +# path to images +file_path_pan = os.path.join(os.getcwd(), 'data', satname, sitename, 'pan') +file_path_ms = os.path.join(os.getcwd(), 'data', satname, sitename, 'ms') +file_names_pan = os.listdir(file_path_pan) +file_names_ms = os.listdir(file_path_ms) +N = len(file_names_pan) + +# initialise some variables +idx_skipped = [] +idx_nocloud = [] +n_features = 10 +train_pos = np.nan*np.ones((1,n_features)) +train_neg = np.nan*np.ones((1,n_features)) +columns = ('B','G','R','NIR','SWIR','Pan','WI','VI','BR', 'mWI', 'class') + +#%% +for i in range(N): + # read pan image + fn_pan = os.path.join(file_path_pan, file_names_pan[i]) + data = gdal.Open(fn_pan, gdal.GA_ReadOnly) + georef = np.array(data.GetGeoTransform()) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_pan = np.stack(bands, 2)[:,:,0] + nrow = im_pan.shape[0] + ncol = im_pan.shape[1] + # read ms image + fn_ms = os.path.join(file_path_ms, file_names_ms[i]) + data = gdal.Open(fn_ms, gdal.GA_ReadOnly) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_ms = np.stack(bands, 2) + # cloud mask + im_qa = im_ms[:,:,5] + cloud_mask = sds.create_cloud_mask(im_qa, satname, plot_bool) + cloud_mask = transform.resize(cloud_mask, (im_pan.shape[0], im_pan.shape[1]), + order=0, preserve_range=True, + mode='constant').astype('bool_') + # resize the image using bilinear interpolation (order 1) + im_ms = transform.resize(im_ms,(im_pan.shape[0], im_pan.shape[1]), + order=1, preserve_range=True, mode='constant') + # check if -inf or nan values and add to cloud mask + im_inf = np.isin(im_ms[:,:,0], -np.inf) + im_nan = np.isnan(im_ms[:,:,0]) + cloud_mask = np.logical_or(np.logical_or(cloud_mask, im_inf), im_nan) + # skip if cloud cover is more than the threshold + cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') + idx_skipped.append(i) + continue + idx_nocloud.append(i) + + # pansharpen rgb image + im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) + # add down-sized bands for NIR and SWIR (since pansharpening is not possible) + im_ms_ps = np.append(im_ms_ps, im_ms[:,:,[3,4]], axis=2) + + im_classif, im_labels = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, min_beach_size, plot_bool) + + # if there are no sand pixels, skip the image (maybe later change the detection method with old method) + if sum(sum(im_labels[:,:,0])) == 0 : + print('skip ' + str(i) + ' - no sand') + idx_skipped.append(i) + continue + + contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, False) + + + im_display = sds.rescale_image_intensity(im_ms_ps[:,:,[2,1,0]], cloud_mask, 100, False) + im = np.copy(im_display) + # define colours for plot + colours = np.array([[1,128/255,0/255],[204/255,1,1],[0,0,204/255]]) + for k in range(0,im_labels.shape[2]): + im[im_labels[:,:,k],0] = colours[k,0] + im[im_labels[:,:,k],1] = colours[k,1] + im[im_labels[:,:,k],2] = colours[k,2] + + +# fig = plt.figure() +# plt.suptitle(date_im, fontsize=17, fontweight='bold') +# ax1 = plt.subplot(121) +# plt.imshow(im_display) +# plt.axis('off') +# ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) +# plt.imshow(im) +# plt.axis('off') +# plt.gcf().set_size_inches(17.99,7.55) +# plt.tight_layout() +# orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') +# white_patch = mpatches.Patch(color=[204/255,1,1], label='swash/whitewater') +# blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') +# plt.legend(handles=[orange_patch,white_patch,blue_patch], bbox_to_anchor=(0.95, 0.2)) +# plt.draw() + + date_im = timestamps_sorted[i].strftime('%d %b %Y') + daysnow = (timestamps_sorted[i] - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() + + fig = plt.figure() + gs = gridspec.GridSpec(2, 2, height_ratios=[1, 20]) + + ax1 = fig.add_subplot(gs[0,:]) + plt.plot(0,0,'ko',daysall,0,'ko') + plt.plot([0,daysall],[0,0],'k-') + plt.plot(daysnow,0,'ro') + plt.text(0,0.05,'2013') + plt.text(daysall,0.05,'2019') + plt.plot((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.text((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2014') + plt.text((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2015') + plt.text((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2016') + plt.text((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2017') + plt.text((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2018') + + plt.axis('off') + + ax2 = fig.add_subplot(gs[1,0]) + plt.imshow(im_display) + plt.axis('off') + plt.title(date_im, fontsize=17, fontweight='bold') + + ax3 = fig.add_subplot(gs[1,1]) + plt.imshow(im) + for l,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + plt.axis('off') + orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') + white_patch = mpatches.Patch(color=[204/255,1,1], label='swash/whitewater') + blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') + black_line = mlines.Line2D([],[],color='k',linestyle='-', label='shoreline') + plt.legend(handles=[orange_patch,white_patch,blue_patch, black_line], bbox_to_anchor=(0.95, 0.2)) + + plt.gcf().set_size_inches(17.99,7.55) + plt.gcf().set_tight_layout(True) + + plt.draw() + plt.savefig(os.path.join(filepath,'plots_classif', file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] + '.jpg'), dpi = 300) + plt.close() + +# create gif +images = [] +filenames = os.listdir(os.path.join(filepath, 'plots_classif')) +with imageio.get_writer(sitename + '.gif', mode='I', duration=0.4) as writer: + for filename in filenames: + image = imageio.imread(os.path.join(filepath,'plots_classif',filename)) + writer.append_data(image) + diff --git a/make_gif_classified_sl_MURI.py b/make_gif_classified_sl_MURI.py new file mode 100644 index 0000000..b81e5d7 --- /dev/null +++ b/make_gif_classified_sl_MURI.py @@ -0,0 +1,193 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Run Neural Network on image to extract sandy pixels +#==========================================================# + +# Initial settings +import os +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import matplotlib.lines as mlines +from matplotlib import gridspec +from datetime import datetime, timedelta +import pytz +import ee +import pdb +import time +import pandas as pd +# other modules +from osgeo import gdal, ogr, osr +import pickle +import matplotlib.cm as cm +from pylab import ginput + +# image processing modules +import skimage.filters as filters +import skimage.exposure as exposure +import skimage.transform as transform +import sklearn.decomposition as decomposition +import skimage.measure as measure +import skimage.morphology as morphology +from scipy import ndimage +import imageio + + +# machine learning modules +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +from sklearn.preprocessing import StandardScaler, Normalizer +from sklearn.externals import joblib + +# import own modules +import functions.utils as utils +import functions.sds as sds + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 +ee.Initialize() + +# parameters +cloud_thresh = 0.5 # threshold for cloud cover +plot_bool = False # if you want the plots +prob_high = 100 # upper probability to clip and rescale pixel intensity +min_contour_points = 30# minimum number of points contained in each water line +output_epsg = 28356 # GDA94 / MGA Zone 56 +buffer_size = 10 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 10 # number of pixels in a beach (pixel classification) + +# load metadata (timestamps and epsg code) for the collection +satname = 'L8' +#sitename = 'NARRA_all' +#sitename = 'NARRA' +#sitename = 'OLDBAR' +#sitename = 'OLDBAR_inlet' +#sitename = 'SANDMOTOR' +#sitename = 'TAIRUA' +#sitename = 'DUCK' +#sitename = 'BROULEE' +sitename = 'MURI2' + + +# Load metadata +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_timestamps' + '.pkl'), 'rb') as f: + timestamps = pickle.load(f) +timestamps_sorted = sorted(timestamps) +daysall = (datetime(2019,1,1,tzinfo=pytz.utc) - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() +# path to images +file_path_pan = os.path.join(os.getcwd(), 'data', satname, sitename, 'pan') +file_path_ms = os.path.join(os.getcwd(), 'data', satname, sitename, 'ms') +file_names_pan = os.listdir(file_path_pan) +file_names_ms = os.listdir(file_path_ms) +N = len(file_names_pan) + +# initialise some variables +idx_skipped = [] +idx_nocloud = [] +n_features = 10 +train_pos = np.nan*np.ones((1,n_features)) +train_neg = np.nan*np.ones((1,n_features)) +columns = ('B','G','R','NIR','SWIR','Pan','WI','VI','BR', 'mWI', 'class') + +#%% +for i in range(N): + # read pan image + fn_pan = os.path.join(file_path_pan, file_names_pan[i]) + data = gdal.Open(fn_pan, gdal.GA_ReadOnly) + georef = np.array(data.GetGeoTransform()) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_pan = np.stack(bands, 2)[:,:,0] + nrow = im_pan.shape[0] + ncol = im_pan.shape[1] + # read ms image + fn_ms = os.path.join(file_path_ms, file_names_ms[i]) + data = gdal.Open(fn_ms, gdal.GA_ReadOnly) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_ms = np.stack(bands, 2) + # cloud mask + im_qa = im_ms[:,:,5] + cloud_mask = sds.create_cloud_mask(im_qa, satname, plot_bool) + cloud_mask = transform.resize(cloud_mask, (im_pan.shape[0], im_pan.shape[1]), + order=0, preserve_range=True, + mode='constant').astype('bool_') + # resize the image using bilinear interpolation (order 1) + im_ms = transform.resize(im_ms,(im_pan.shape[0], im_pan.shape[1]), + order=1, preserve_range=True, mode='constant') + # check if -inf or nan values and add to cloud mask + im_inf = np.isin(im_ms[:,:,0], -np.inf) + im_nan = np.isnan(im_ms[:,:,0]) + cloud_mask = np.logical_or(np.logical_or(cloud_mask, im_inf), im_nan) + # skip if cloud cover is more than the threshold + cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') + idx_skipped.append(i) + continue + idx_nocloud.append(i) + + # pansharpen rgb image + im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) + # add down-sized bands for NIR and SWIR (since pansharpening is not possible) + im_ms_ps = np.append(im_ms_ps, im_ms[:,:,[3,4]], axis=2) + + # extract shorelines (old method) + im_ndwi = sds.nd_index(im_ms_ps[:,:,3], im_ms_ps[:,:,1], cloud_mask, plot_bool) + wl_pix = sds.find_wl_contours(im_ndwi, cloud_mask, min_contour_points, plot_bool) + + im_display = sds.rescale_image_intensity(im_ms_ps[:,:,[2,1,0]], cloud_mask, 100, False) + + date_im = timestamps_sorted[i].strftime('%d %b %Y') + daysnow = (timestamps_sorted[i] - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() + + fig = plt.figure() + gs = gridspec.GridSpec(2, 2, height_ratios=[1, 20]) + + ax1 = fig.add_subplot(gs[0,:]) + plt.plot(0,0,'ko',daysall,0,'ko') + plt.plot([0,daysall],[0,0],'k-') + plt.plot(daysnow,0,'ro') + plt.text(0,0.05,'2013') + plt.text(daysall,0.05,'2019') + plt.plot((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.text((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2014') + plt.text((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2015') + plt.text((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2016') + plt.text((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2017') + plt.text((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2018') + plt.axis('off') + +# ax2 = fig.add_subplot(gs[1,0]) +# plt.imshow(im_display) +# plt.axis('off') +# plt.title(date_im, fontsize=17, fontweight='bold') + + ax3 = fig.add_subplot(gs[1,:]) + plt.imshow(im_display) + for l,contour in enumerate(wl_pix): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + plt.title(date_im, fontsize=17, fontweight='bold') + plt.axis('off') + + plt.gcf().set_size_inches(5.34,9.18) + plt.gcf().set_tight_layout(True) + + plt.draw() + + plt.savefig(os.path.join(filepath,'plots_classif', file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] + '.jpg'), dpi = 300) + plt.close() + +# create gif +images = [] +filenames = os.listdir(os.path.join(filepath, 'plots_classif')) +with imageio.get_writer(sitename + '_final.gif', mode='I', duration=0.6) as writer: + for filename in filenames: + image = imageio.imread(os.path.join(filepath,'plots_classif',filename)) + writer.append_data(image) + diff --git a/make_gif_classified_sl_NARRA.py b/make_gif_classified_sl_NARRA.py new file mode 100644 index 0000000..e0ddae4 --- /dev/null +++ b/make_gif_classified_sl_NARRA.py @@ -0,0 +1,227 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Run Neural Network on image to extract sandy pixels +#==========================================================# + +# Initial settings +import os +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import matplotlib.lines as mlines +from matplotlib import gridspec +from datetime import datetime, timedelta +import pytz +import ee +import pdb +import time +import pandas as pd +# other modules +from osgeo import gdal, ogr, osr +import pickle +import matplotlib.cm as cm +from pylab import ginput + +# image processing modules +import skimage.filters as filters +import skimage.exposure as exposure +import skimage.transform as transform +import sklearn.decomposition as decomposition +import skimage.measure as measure +import skimage.morphology as morphology +from scipy import ndimage +import imageio + + +# machine learning modules +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +from sklearn.preprocessing import StandardScaler, Normalizer +from sklearn.externals import joblib + +# import own modules +import functions.utils as utils +import functions.sds as sds + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 +ee.Initialize() + +# parameters +cloud_thresh = 0.2 # threshold for cloud cover +plot_bool = False # if you want the plots +prob_high = 100 # upper probability to clip and rescale pixel intensity +min_contour_points = 100# minimum number of points contained in each water line +output_epsg = 28356 # GDA94 / MGA Zone 56 +buffer_size = 10 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 20 # number of pixels in a beach (pixel classification) + +# load metadata (timestamps and epsg code) for the collection +satname = 'L8' +#sitename = 'NARRA_all' +sitename = 'NARRA' +#sitename = 'OLDBAR' +#sitename = 'OLDBAR_inlet' +#sitename = 'SANDMOTOR' +#sitename = 'TAIRUA' +#sitename = 'DUCK' +#sitename = 'BROULEE' + +# Load metadata +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_timestamps' + '.pkl'), 'rb') as f: + timestamps = pickle.load(f) +timestamps_sorted = sorted(timestamps) +daysall = (datetime(2019,1,1,tzinfo=pytz.utc) - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() +# path to images +file_path_pan = os.path.join(os.getcwd(), 'data', satname, sitename, 'pan') +file_path_ms = os.path.join(os.getcwd(), 'data', satname, sitename, 'ms') +file_names_pan = os.listdir(file_path_pan) +file_names_ms = os.listdir(file_path_ms) +N = len(file_names_pan) + +# initialise some variables +idx_skipped = [] +idx_nocloud = [] +n_features = 10 +train_pos = np.nan*np.ones((1,n_features)) +train_neg = np.nan*np.ones((1,n_features)) +columns = ('B','G','R','NIR','SWIR','Pan','WI','VI','BR', 'mWI', 'class') + +#%% +for i in range(N): + # read pan image + fn_pan = os.path.join(file_path_pan, file_names_pan[i]) + data = gdal.Open(fn_pan, gdal.GA_ReadOnly) + georef = np.array(data.GetGeoTransform()) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_pan = np.stack(bands, 2)[:,:,0] + nrow = im_pan.shape[0] + ncol = im_pan.shape[1] + # read ms image + fn_ms = os.path.join(file_path_ms, file_names_ms[i]) + data = gdal.Open(fn_ms, gdal.GA_ReadOnly) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_ms = np.stack(bands, 2) + # cloud mask + im_qa = im_ms[:,:,5] + cloud_mask = sds.create_cloud_mask(im_qa, satname, plot_bool) + cloud_mask = transform.resize(cloud_mask, (im_pan.shape[0], im_pan.shape[1]), + order=0, preserve_range=True, + mode='constant').astype('bool_') + # resize the image using bilinear interpolation (order 1) + im_ms = transform.resize(im_ms,(im_pan.shape[0], im_pan.shape[1]), + order=1, preserve_range=True, mode='constant') + # check if -inf or nan values and add to cloud mask + im_inf = np.isin(im_ms[:,:,0], -np.inf) + im_nan = np.isnan(im_ms[:,:,0]) + cloud_mask = np.logical_or(np.logical_or(cloud_mask, im_inf), im_nan) + # skip if cloud cover is more than the threshold + cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') + idx_skipped.append(i) + continue + idx_nocloud.append(i) + + # pansharpen rgb image + im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) + # add down-sized bands for NIR and SWIR (since pansharpening is not possible) + im_ms_ps = np.append(im_ms_ps, im_ms[:,:,[3,4]], axis=2) + + im_classif, im_labels = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, min_beach_size, plot_bool) + + # if there are no sand pixels, skip the image (maybe later change the detection method with old method) + if sum(sum(im_labels[:,:,0])) == 0 : + print('skip ' + str(i) + ' - no sand') + idx_skipped.append(i) + continue + + contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, False) + + + im_display = sds.rescale_image_intensity(im_ms_ps[:,:,[2,1,0]], cloud_mask, 100, False) + im = np.copy(im_display) + # define colours for plot + colours = np.array([[1,128/255,0/255],[204/255,1,1],[0,0,204/255]]) + for k in range(0,im_labels.shape[2]): + im[im_labels[:,:,k],0] = colours[k,0] + im[im_labels[:,:,k],1] = colours[k,1] + im[im_labels[:,:,k],2] = colours[k,2] + + +# fig = plt.figure() +# plt.suptitle(date_im, fontsize=17, fontweight='bold') +# ax1 = plt.subplot(121) +# plt.imshow(im_display) +# plt.axis('off') +# ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) +# plt.imshow(im) +# plt.axis('off') +# plt.gcf().set_size_inches(17.99,7.55) +# plt.tight_layout() +# orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') +# white_patch = mpatches.Patch(color=[204/255,1,1], label='swash/whitewater') +# blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') +# plt.legend(handles=[orange_patch,white_patch,blue_patch], bbox_to_anchor=(0.95, 0.2)) +# plt.draw() + + date_im = timestamps_sorted[i].strftime('%d %b %Y') + daysnow = (timestamps_sorted[i] - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() + + fig = plt.figure() + gs = gridspec.GridSpec(2, 2, height_ratios=[1, 20]) + + ax1 = fig.add_subplot(gs[0,:]) + plt.plot(0,0,'ko',daysall,0,'ko') + plt.plot([0,daysall],[0,0],'k-') + plt.plot(daysnow,0,'ro') + plt.text(0,0.05,'2013') + plt.text(daysall,0.05,'2019') + plt.plot((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.text((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2014') + plt.text((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2015') + plt.text((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2016') + plt.text((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2017') + plt.text((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2018') + + plt.axis('off') + +# ax2 = fig.add_subplot(gs[1,0]) +# plt.imshow(im_display) +# plt.axis('off') +# plt.title(date_im, fontsize=17, fontweight='bold') + + ax3 = fig.add_subplot(gs[1,:]) + plt.imshow(im) + for l,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + plt.axis('off') + orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') + white_patch = mpatches.Patch(color=[204/255,1,1], label='swash/whitewater') + blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') + black_line = mlines.Line2D([],[],color='k',linestyle='--', label='shoreline') + plt.legend(handles=[orange_patch,white_patch,blue_patch, black_line], bbox_to_anchor=(0.6, 0.6)) + plt.title(date_im, fontsize=17, fontweight='bold') + + plt.gcf().set_size_inches(5.34,9.18) + plt.gcf().set_tight_layout(True) + + plt.draw() + plt.savefig(os.path.join(filepath,'plots_classif', file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] + '.jpg'), dpi = 300) + plt.close() + +# create gif +images = [] +filenames = os.listdir(os.path.join(filepath, 'plots_classif')) +with imageio.get_writer(sitename + '.gif', mode='I', duration=0.4) as writer: + for filename in filenames: + image = imageio.imread(os.path.join(filepath,'plots_classif',filename)) + writer.append_data(image) + diff --git a/make_gif_classified_sl_NARRA_Chris.py b/make_gif_classified_sl_NARRA_Chris.py new file mode 100644 index 0000000..9e7f9aa --- /dev/null +++ b/make_gif_classified_sl_NARRA_Chris.py @@ -0,0 +1,229 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Run Neural Network on image to extract sandy pixels +#==========================================================# + +# Initial settings +import os +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches +import matplotlib.lines as mlines +from matplotlib import gridspec +from datetime import datetime, timedelta +import pytz +import ee +import pdb +import time +import pandas as pd +# other modules +from osgeo import gdal, ogr, osr +import pickle +import matplotlib.cm as cm +from pylab import ginput + +# image processing modules +import skimage.filters as filters +import skimage.exposure as exposure +import skimage.transform as transform +import sklearn.decomposition as decomposition +import skimage.measure as measure +import skimage.morphology as morphology +from scipy import ndimage +import imageio + + +# machine learning modules +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +from sklearn.preprocessing import StandardScaler, Normalizer +from sklearn.externals import joblib + +# import own modules +import functions.utils as utils +import functions.sds as sds + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 +ee.Initialize() + +# parameters +cloud_thresh = 0.2 # threshold for cloud cover +plot_bool = False # if you want the plots +prob_high = 100 # upper probability to clip and rescale pixel intensity +min_contour_points = 100# minimum number of points contained in each water line +output_epsg = 28356 # GDA94 / MGA Zone 56 +buffer_size = 10 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 50 # number of pixels in a beach (pixel classification) + +# load metadata (timestamps and epsg code) for the collection +satname = 'L8' +sitename = 'NARRA_all' +#sitename = 'NARRA' +#sitename = 'OLDBAR' +#sitename = 'OLDBAR_inlet' +#sitename = 'SANDMOTOR' +#sitename = 'TAIRUA' +#sitename = 'DUCK' +#sitename = 'BROULEE' + +# Load metadata +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_timestamps' + '.pkl'), 'rb') as f: + timestamps = pickle.load(f) +timestamps_sorted = sorted(timestamps) +daysall = (datetime(2019,1,1,tzinfo=pytz.utc) - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() +# path to images +file_path_pan = os.path.join(os.getcwd(), 'data', satname, sitename, 'pan') +file_path_ms = os.path.join(os.getcwd(), 'data', satname, sitename, 'ms') +file_names_pan = os.listdir(file_path_pan) +file_names_ms = os.listdir(file_path_ms) +N = len(file_names_pan) + +# initialise some variables +idx_skipped = [] +idx_nocloud = [] +n_features = 10 +train_pos = np.nan*np.ones((1,n_features)) +train_neg = np.nan*np.ones((1,n_features)) +columns = ('B','G','R','NIR','SWIR','Pan','WI','VI','BR', 'mWI', 'class') + +#%% +for i in range(1): + i = 156 # open (96 close) + # read pan image + fn_pan = os.path.join(file_path_pan, file_names_pan[i]) + data = gdal.Open(fn_pan, gdal.GA_ReadOnly) + georef = np.array(data.GetGeoTransform()) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_pan = np.stack(bands, 2)[:,:,0] + nrow = im_pan.shape[0] + ncol = im_pan.shape[1] + # read ms image + fn_ms = os.path.join(file_path_ms, file_names_ms[i]) + data = gdal.Open(fn_ms, gdal.GA_ReadOnly) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_ms = np.stack(bands, 2) + # cloud mask + im_qa = im_ms[:,:,5] + cloud_mask = sds.create_cloud_mask(im_qa, satname, plot_bool) + cloud_mask = transform.resize(cloud_mask, (im_pan.shape[0], im_pan.shape[1]), + order=0, preserve_range=True, + mode='constant').astype('bool_') + # resize the image using bilinear interpolation (order 1) + im_ms = transform.resize(im_ms,(im_pan.shape[0], im_pan.shape[1]), + order=1, preserve_range=True, mode='constant') + # check if -inf or nan values and add to cloud mask + im_inf = np.isin(im_ms[:,:,0], -np.inf) + im_nan = np.isnan(im_ms[:,:,0]) + cloud_mask = np.logical_or(np.logical_or(cloud_mask, im_inf), im_nan) + # skip if cloud cover is more than the threshold + cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') + idx_skipped.append(i) + continue + idx_nocloud.append(i) + + # pansharpen rgb image + im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) + # add down-sized bands for NIR and SWIR (since pansharpening is not possible) + im_ms_ps = np.append(im_ms_ps, im_ms[:,:,[3,4]], axis=2) + + im_classif, im_labels = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, min_beach_size, plot_bool) + + # if there are no sand pixels, skip the image (maybe later change the detection method with old method) + if sum(sum(im_labels[:,:,0])) == 0 : + print('skip ' + str(i) + ' - no sand') + idx_skipped.append(i) + continue + + contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, False) + + + im_display = sds.rescale_image_intensity(im_ms_ps[:,:,[2,1,0]], cloud_mask, 100, False) + im = np.copy(im_display) + # define colours for plot + colours = np.array([[1,128/255,0/255],[0,0,204/255],[0,0,204/255]]) + + for k in range(0,im_labels.shape[2]): + im[im_labels[:,:,k],0] = colours[k,0] + im[im_labels[:,:,k],1] = colours[k,1] + im[im_labels[:,:,k],2] = colours[k,2] + + +# fig = plt.figure() +# plt.suptitle(date_im, fontsize=17, fontweight='bold') +# ax1 = plt.subplot(121) +# plt.imshow(im_display) +# plt.axis('off') +# ax2 = plt.subplot(122, sharex=ax1, sharey=ax1) +# plt.imshow(im) +# plt.axis('off') +# plt.gcf().set_size_inches(17.99,7.55) +# plt.tight_layout() +# orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') +# white_patch = mpatches.Patch(color=[204/255,1,1], label='swash/whitewater') +# blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') +# plt.legend(handles=[orange_patch,white_patch,blue_patch], bbox_to_anchor=(0.95, 0.2)) +# plt.draw() + + date_im = timestamps_sorted[i].strftime('%d %b %Y') + daysnow = (timestamps_sorted[i] - datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds() + + fig = plt.figure() + gs = gridspec.GridSpec(2, 2, height_ratios=[1, 20]) + + ax1 = fig.add_subplot(gs[0,:]) + plt.plot(0,0,'ko',daysall,0,'ko') + plt.plot([0,daysall],[0,0],'k-') + plt.plot(daysnow,0,'ro') + plt.text(0,0.05,'2013') + plt.text(daysall,0.05,'2019') + plt.plot((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.plot((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0,'ko',markersize=3) + plt.text((datetime(2014,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2014') + plt.text((datetime(2015,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2015') + plt.text((datetime(2016,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2016') + plt.text((datetime(2017,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2017') + plt.text((datetime(2018,1,1,tzinfo=pytz.utc)- datetime(2013,1,1,tzinfo=pytz.utc)).total_seconds(),0.05,'2018') + + plt.axis('off') + + ax2 = fig.add_subplot(gs[1,0]) + plt.imshow(im_display) + plt.axis('off') + plt.title(date_im, fontsize=17, fontweight='bold') + + ax3 = fig.add_subplot(gs[1,1], sharex=ax2, sharey=ax2) + plt.imshow(im) + for l,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + plt.axis('off') + orange_patch = mpatches.Patch(color=[1,128/255,0/255], label='sand') + blue_patch = mpatches.Patch(color=[0,0,204/255], label='water') + black_line = mlines.Line2D([],[],color='k',linestyle='--', label='water line') + plt.legend(handles=[orange_patch,blue_patch, black_line], bbox_to_anchor=(0.6, 0.6)) +# plt.title(date_im, fontsize=17, fontweight='bold') + + plt.gcf().set_size_inches(11.38, 7.51) + plt.gcf().set_tight_layout(True) + + plt.draw() + +# plt.savefig(os.path.join(filepath,'plots_classif', file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] + '.jpg'), dpi = 300) +# plt.close() + +# create gif +#images = [] +#filenames = os.listdir(os.path.join(filepath, 'plots_classif')) +#with imageio.get_writer(sitename + '.gif', mode='I', duration=0.4) as writer: +# for filename in filenames: +# image = imageio.imread(os.path.join(filepath,'plots_classif',filename)) +# writer.append_data(image) + diff --git a/old/olddata/narra_beach.pkl b/old/olddata/narra_beach.pkl new file mode 100644 index 0000000000000000000000000000000000000000..e31345495e9acd17d3a17e6aa6dea06e1e47deb3 GIT binary patch literal 520 zcmZo*PR=XMEvVE>&M!*U%Pq|*$xJLNO049HFG@|$&nqq|DorloDrA7D;>t^b$QCks zGqe^mIWr~|GPf791QoJscr$wQdo#BcvO$%mlvEa^auu>iFflMNq*)Ylcr$o2wij{+ z6>@2KGeelOxEetU_4#;b5gpmH!c zo_)!6_FEChb%ndzaFg(P0c KTT;lEqz3>Z8mDpq literal 0 HcmV?d00001 diff --git a/read_images.py b/read_images.py index 7555a4e..18b1be6 100644 --- a/read_images.py +++ b/read_images.py @@ -84,12 +84,12 @@ for i in range(N): fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask im_qa = im_ms[:,:,5] @@ -129,7 +129,7 @@ for i in range(N): idx_skipped.append(i) continue else: -# del shorelines[idx_samedate] + del shorelines[idx_samedate] del t[idx_samedate] del cloud_cover_ts[idx_samedate] del date_acquired_ts[idx_samedate] diff --git a/read_images2.py b/read_images2.py index cb381d3..20d05f3 100644 --- a/read_images2.py +++ b/read_images2.py @@ -16,6 +16,7 @@ from osgeo import gdal, ogr, osr import pickle import matplotlib.cm as cm from pylab import ginput +from shapely.geometry import LineString # image processing modules import skimage.filters as filters @@ -42,12 +43,15 @@ plt.rcParams['figure.max_open_warning'] = 100 ee.Initialize() # parameters -cloud_thresh = 0.3 # threshold for cloud cover -plot_bool = False # if you want the plots +cloud_thresh = 0.2 # threshold for cloud cover +plot_bool = False # if you want the plots min_contour_points = 100# minimum number of points contained in each water line output_epsg = 28356 # GDA94 / MGA Zone 56 -buffer_size = 7 # radius (in pixels) of disk for buffer (pixel classification) -min_beach_size = 50 # number of pixels in a beach (pixel classification) +buffer_size = 7 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 20 # number of pixels in a beach (pixel classification) +dist_ref = 100 +min_length_wl = 300 +manual = False # load metadata (timestamps and epsg code) for the collection satname = 'L8' @@ -64,6 +68,13 @@ with open(os.path.join(filepath, sitename + '_epsgcode' + '.pkl'), 'rb') as f: input_epsg = pickle.load(f) with open(os.path.join(filepath, sitename + '_refpoints' + '.pkl'), 'rb') as f: refpoints = pickle.load(f) +try: + with open(os.path.join(filepath, sitename + '_skipped_new' + '.pkl'), 'rb') as f: + idx_skipped = pickle.load(f) +except: + idx_skipped = [] + manual = True + # sort timestamps and georef accuracy (dowloaded images are sorted by date in directory) timestamps_sorted = sorted(timestamps) idx_sorted = sorted(range(len(timestamps)), key=timestamps.__getitem__) @@ -80,19 +91,20 @@ N = len(file_names_pan) cloud_cover_ts = [] date_acquired_ts = [] acc_georef_ts = [] -idx_skipped = [] -idx_nocloud = [] t = [] shorelines = [] -idx_keep = [] + #%% for i in range(N): - + if ~manual: + if i in idx_skipped: + continue + # read pan image fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(k + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] nrows = im_pan.shape[0] ncols = im_pan.shape[1] @@ -100,7 +112,7 @@ for i in range(N): # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(k + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask @@ -120,40 +132,11 @@ for i in range(N): # calculate cloud cover and skip image if too high cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) - if cloud_cover > cloud_thresh: - print('skip ' + str(i) + ' - cloudy (' + str(cloud_cover) + ')') - idx_skipped.append(i) - continue - idx_nocloud.append(i) - - # check if image for that date already exists and choose the best in terms of cloud cover and georeferencing - if file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] in date_acquired_ts: - - # find the index of the image that is repeated - idx_samedate = utils.find_indices(date_acquired_ts, lambda e : e == file_names_pan[i][9:19]) - idx_samedate = idx_samedate[0] - print('cloud cover ' + str(cloud_cover) + ' - ' + str(cloud_cover_ts[idx_samedate])) - print('acc georef ' + str(acc_georef_sorted[i]) + ' - ' + str(acc_georef_ts[idx_samedate])) - - # keep image with less cloud cover or best georeferencing accuracy - if cloud_cover < cloud_cover_ts[idx_samedate] - 0.01: - skip = False - elif acc_georef_sorted[i] < acc_georef_ts[idx_samedate]: - skip = False - else: - skip = True - - if skip: - print('skip ' + str(i) + ' - repeated') + if manual: + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') idx_skipped.append(i) continue - else: -# del shorelines[idx_samedate] - del t[idx_samedate] - del cloud_cover_ts[idx_samedate] - del date_acquired_ts[idx_samedate] - del acc_georef_ts[idx_samedate] - print('keep ' + str(i) + ' - deleted ' + str(idx_samedate)) # pansharpen rgb image im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) @@ -164,20 +147,119 @@ for i in range(N): # classify image in 4 classes (sand, whitewater, water, other) with NN classifier im_classif, im_labels = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, min_beach_size, plot_bool) - idx_keep.append(i) - if sum(sum(im_labels[:,:,0])) == 0 : - print('skip ' + str(i) + ' - no sand') - idx_skipped.append(i) - continue + +# # manually validate classification +# pt_in = np.array(ginput(n=1, timeout=1000)) +# if pt_in[0][1] > nrows/2: +# print('skip ' + str(i) + ' - wrong classification') +# idx_skipped.append(i) +# continue + + # if there are no sand pixels, skip the image (maybe later change the detection method with old method) + if manual: + if sum(sum(im_labels[:,:,0])) == 0 : + print('skip ' + str(i) + ' - no sand') + idx_skipped.append(i) + continue # extract shorelines (new method) - contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, True) + contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, plot_bool) + + plt.figure() + im = np.copy(im_display) + # define colours for plot + colours = np.array([[1,128/255,0/255],[204/255,1,1],[0,0,204/255]]) + for k in range(0,im_labels.shape[2]): + im[im_labels[:,:,k],0] = colours[k,0] + im[im_labels[:,:,k],1] = colours[k,1] + im[im_labels[:,:,k],2] = colours[k,2] + plt.imshow(im) + for k,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + mng = plt.get_current_fig_manager() + mng.window.showMaximized() + plt.tight_layout() + plt.draw() + # manually validate detection + if manual: + pt_in = np.array(ginput(n=1, timeout=1000)) + plt.close() + if pt_in[0][1] > nrows/2: + print('skip ' + str(i) + ' - wrong detection') + idx_skipped.append(i) + continue + else: + plt.close() + + # remove contour points that are around clouds (nan values) + for k, contour in enumerate(contours_mwi): + if np.any(np.isnan(contour)): + index_nan = np.where(np.isnan(contour))[0] + contour = np.delete(contour, index_nan, axis=0) + + # convert from pixels to world coordinates + wl_coords = sds.convert_pix2world(contours_mwi, georef) + # convert to output epsg spatial reference + wl = sds.convert_epsg(wl_coords, input_epsg, output_epsg) + + # remove contours that have a perimeter < min_length_wl as usually they are not shoreline + wl_good = [] + for l, wls in enumerate(wl): + coords = [(wls[k,0], wls[k,1]) for k in range(len(wls))] + a = LineString(coords) # shapely LineString structure + if a.length >= min_length_wl: + wl_good.append(wls) + + # pre-process points (list of arrays to single array of points) + x_points = np.array([]) + y_points = np.array([]) + for k in range(len(wl_good)): + x_points = np.append(x_points,wl_good[k][:,0]) + y_points = np.append(y_points,wl_good[k][:,1]) + wl_good = np.transpose(np.array([x_points,y_points])) + + # only select points around Narrabeen beach (refpoints given) + temp = np.zeros((len(wl_good))).astype(bool) + for k in range(len(refpoints)): + temp = np.logical_or(np.linalg.norm(wl_good - refpoints[k,[0,1]], axis=1) < dist_ref, temp) + wl_final = wl_good[temp] + +# plt.figure() +# plt.axis('equal') +# plt.plot(wl_final[:,0],wl_final[:,1],'k.') +# plt.draw() + + # save data + shorelines.append(wl_final) t.append(timestamps_sorted[i]) cloud_cover_ts.append(cloud_cover) acc_georef_ts.append(acc_georef_sorted[i]) date_acquired_ts.append(file_names_pan[i][9:19]) + + +output = {'t':t, 'shorelines':shorelines, 'cloud_cover':cloud_cover_ts, 'acc_georef':acc_georef_ts} + + +#with open(os.path.join(filepath, sitename + '_output_new' + '.pkl'), 'wb') as f: +# pickle.dump(output, f) +# +#with open(os.path.join(filepath, sitename + '_skipped_new' + '.pkl'), 'wb') as f: +# pickle.dump(idx_skipped, f) +# plt.figure() +# plt.axis('equal') +# plt.plot(refpoints[:,0], refpoints[:,1], 'ko') +# plt.plot(all_points[temp,0], all_points[temp,1], 'go') +# plt.plot(all_points[~temp,0], all_points[~temp,1], 'ro') +# plt.draw() + # extract shorelines (old method) +# im_ndwi = sds.nd_index(im_ms_ps[:,:,3], im_ms_ps[:,:,1], cloud_mask, plot_bool) +# wl_pix = sds.find_wl_contours(im_ndwi, cloud_mask, min_contour_points, plot_bool) - \ No newline at end of file +# plt.figure() +# plt.imshow(im_display) +# for k,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=3, color='k') +# for k,contour in enumerate(wl_pix): plt.plot(contour[:, 1], contour[:, 0], linestyle='--', linewidth=1, color='w') +# plt.draw() + diff --git a/read_images_old.py b/read_images_old.py new file mode 100644 index 0000000..f03d806 --- /dev/null +++ b/read_images_old.py @@ -0,0 +1,284 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Extract shorelines from Landsat images +#==========================================================# + +# Initial settings +import os +import numpy as np +import matplotlib.pyplot as plt +import ee +import pdb + +# other modules +from osgeo import gdal, ogr, osr +import pickle +import matplotlib.cm as cm +from pylab import ginput +from shapely.geometry import LineString + +# image processing modules +import skimage.filters as filters +import skimage.exposure as exposure +import skimage.transform as transform +import sklearn.decomposition as decomposition +import skimage.measure as measure +import skimage.morphology as morphology + +# machine learning modules +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPClassifier +from sklearn.preprocessing import StandardScaler, Normalizer +from sklearn.externals import joblib + +# import own modules +import functions.utils as utils +import functions.sds as sds + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 +ee.Initialize() + +# parameters +cloud_thresh = 0.5 # threshold for cloud cover +plot_bool = False # if you want the plots +min_contour_points = 100# minimum number of points contained in each water line +output_epsg = 28356 # GDA94 / MGA Zone 56 +buffer_size = 7 # radius (in pixels) of disk for buffer (pixel classification) +min_beach_size = 20 # number of pixels in a beach (pixel classification) +dist_ref = 100 +min_length_wl = 300 + +# load metadata (timestamps and epsg code) for the collection +satname = 'L8' +sitename = 'NARRA' +#sitename = 'OLDBAR' + +# Load metadata +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_timestamps' + '.pkl'), 'rb') as f: + timestamps = pickle.load(f) +with open(os.path.join(filepath, sitename + '_accuracy_georef' + '.pkl'), 'rb') as f: + acc_georef = pickle.load(f) +with open(os.path.join(filepath, sitename + '_epsgcode' + '.pkl'), 'rb') as f: + input_epsg = pickle.load(f) +with open(os.path.join(filepath, sitename + '_refpoints2' + '.pkl'), 'rb') as f: + refpoints = pickle.load(f) +# sort timestamps and georef accuracy (dowloaded images are sorted by date in directory) +timestamps_sorted = sorted(timestamps) +idx_sorted = sorted(range(len(timestamps)), key=timestamps.__getitem__) +acc_georef_sorted = [acc_georef[j] for j in idx_sorted] + +# path to images +file_path_pan = os.path.join(os.getcwd(), 'data', satname, sitename, 'pan') +file_path_ms = os.path.join(os.getcwd(), 'data', satname, sitename, 'ms') +file_names_pan = os.listdir(file_path_pan) +file_names_ms = os.listdir(file_path_ms) +N = len(file_names_pan) + +# initialise some variables +cloud_cover_ts = [] +date_acquired_ts = [] +acc_georef_ts = [] +idx_skipped = [] +idx_nocloud = [] +t = [] +shorelines = [] + +#%% +for i in range(N): + + # read pan image + fn_pan = os.path.join(file_path_pan, file_names_pan[i]) + data = gdal.Open(fn_pan, gdal.GA_ReadOnly) + georef = np.array(data.GetGeoTransform()) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_pan = np.stack(bands, 2)[:,:,0] + nrows = im_pan.shape[0] + ncols = im_pan.shape[1] + + # read ms image + fn_ms = os.path.join(file_path_ms, file_names_ms[i]) + data = gdal.Open(fn_ms, gdal.GA_ReadOnly) + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] + im_ms = np.stack(bands, 2) + + # cloud mask + im_qa = im_ms[:,:,5] + cloud_mask = sds.create_cloud_mask(im_qa, satname, plot_bool) + cloud_mask = transform.resize(cloud_mask, (im_pan.shape[0], im_pan.shape[1]), + order=0, preserve_range=True, + mode='constant').astype('bool_') + # resize the image using bilinear interpolation (order 1) + im_ms = transform.resize(im_ms,(im_pan.shape[0], im_pan.shape[1]), + order=1, preserve_range=True, mode='constant') + + # check if -inf or nan values and add to cloud mask + im_inf = np.isin(im_ms[:,:,0], -np.inf) + im_nan = np.isnan(im_ms[:,:,0]) + cloud_mask = np.logical_or(np.logical_or(cloud_mask, im_inf), im_nan) + + # calculate cloud cover and skip image if too high + cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) + if cloud_cover > cloud_thresh: + print('skip ' + str(i) + ' - cloudy (' + str(np.round(cloud_cover*100).astype(int)) + '%)') + idx_skipped.append(i) + continue + idx_nocloud.append(i) + + # pansharpen rgb image + im_ms_ps = sds.pansharpen(im_ms[:,:,[0,1,2]], im_pan, cloud_mask, plot_bool) + # rescale pansharpened RGB for visualisation + im_display = sds.rescale_image_intensity(im_ms_ps[:,:,[2,1,0]], cloud_mask, 100, False) + # add down-sized bands for NIR and SWIR (since pansharpening is not possible) + im_ms_ps = np.append(im_ms_ps, im_ms[:,:,[3,4]], axis=2) + + # classify image in 4 classes (sand, whitewater, water, other) with NN classifier + im_classif, im_labels = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, min_beach_size, plot_bool) + +# # manually validate classification +# pt_in = np.array(ginput(n=1, timeout=1000)) +# if pt_in[0][1] > nrows/2: +# print('skip ' + str(i) + ' - wrong classification') +# idx_skipped.append(i) +# continue + + # if there are no sand pixels, skip the image (maybe later change the detection method with old method) + if sum(sum(im_labels[:,:,0])) == 0 : + print('skip ' + str(i) + ' - no sand') + idx_skipped.append(i) + continue + + # extract shorelines (new method) + contours_wi, contours_mwi = sds.find_wl_contours2(im_ms_ps, im_labels, cloud_mask, buffer_size, plot_bool) + + plt.figure() + im = np.copy(im_display) + # define colours for plot + colours = np.array([[1,128/255,0/255],[204/255,1,1],[0,0,204/255]]) + for k in range(0,im_labels.shape[2]): + im[im_labels[:,:,k],0] = colours[k,0] + im[im_labels[:,:,k],1] = colours[k,1] + im[im_labels[:,:,k],2] = colours[k,2] + plt.imshow(im) + for k,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='k', linestyle='--') + mng = plt.get_current_fig_manager() + mng.window.showMaximized() + plt.tight_layout() + plt.draw() + + + # manually validate detection + pt_in = np.array(ginput(n=1, timeout=1000)) + if pt_in[0][1] > nrows/2: + print('skip ' + str(i) + ' - wrong detection') + idx_skipped.append(i) + continue + + # remove contour points that are around clouds (nan values) + for k, contour in enumerate(contours_mwi): + if np.any(np.isnan(contour)): + index_nan = np.where(np.isnan(contour))[0] + contour = np.delete(contour, index_nan, axis=0) + + # convert from pixels to world coordinates + wl_coords = sds.convert_pix2world(contours_mwi, georef) + # convert to output epsg spatial reference + wl = sds.convert_epsg(wl_coords, input_epsg, output_epsg) + + # remove contours that have a perimeter < min_length_wl as usually they are not shoreline + wl_good = [] + for l, wls in enumerate(wl): + coords = [(wls[k,0], wls[k,1]) for k in range(len(wls))] + a = LineString(coords) # shapely LineString structure + if a.length >= min_length_wl: + wl_good.append(wls) + + # pre-process points (list of arrays to single array of points) + x_points = np.array([]) + y_points = np.array([]) + for k in range(len(wl_good)): + x_points = np.append(x_points,wl_good[k][:,0]) + y_points = np.append(y_points,wl_good[k][:,1]) + wl_good = np.transpose(np.array([x_points,y_points])) + + # only select points around Narrabeen beach (refpoints given) + temp = np.zeros((len(wl_good))).astype(bool) + for k in range(len(refpoints)): + temp = np.logical_or(np.linalg.norm(wl_good - refpoints[k,[0,1]], axis=1) < dist_ref, temp) + wl_final = wl_good[temp] + + plt.figure() + plt.axis('equal') + plt.plot(wl_final[:,0],wl_final[:,1],'k.') + plt.draw() + + + # check if image for that date already exists and choose the best in terms of cloud cover and georeferencing + if file_names_pan[i][len(satname)+1+len(sitename)+1:len(satname)+1+len(sitename)+1+10] in date_acquired_ts: + + # find the index of the image that is repeated + idx_samedate = utils.find_indices(date_acquired_ts, lambda e : e == file_names_pan[i][9:19]) + idx_samedate = idx_samedate[0] +# print('cloud cover ' + str(cloud_cover) + ' - ' + str(cloud_cover_ts[idx_samedate])) +# print('acc georef ' + str(acc_georef_sorted[i]) + ' - ' + str(acc_georef_ts[idx_samedate])) + + # keep image with less cloud cover or best georeferencing accuracy + if cloud_cover < cloud_cover_ts[idx_samedate] - 0.01: + skip = False + elif acc_georef_sorted[i] < acc_georef_ts[idx_samedate]: + skip = False + else: + skip = True + + if skip: + print('skip ' + str(i) + ' - repeated') + idx_skipped.append(i) + continue + else: + del shorelines[idx_samedate] + del t[idx_samedate] + del cloud_cover_ts[idx_samedate] + del date_acquired_ts[idx_samedate] + del acc_georef_ts[idx_samedate] + print('keep ' + str(i) + ' - deleted ' + str(idx_samedate)) + + + # save data + shorelines.append(wl_final) + t.append(timestamps_sorted[i]) + cloud_cover_ts.append(cloud_cover) + acc_georef_ts.append(acc_georef_sorted[i]) + date_acquired_ts.append(file_names_pan[i][9:19]) + +output = {'t':t, 'shorelines':shorelines, 'cloud_cover':cloud_cover_ts, 'acc_georef':acc_georef_ts} + +#with open(os.path.join(filepath, sitename + '_output2' + '.pkl'), 'wb') as f: +# pickle.dump(output, f) +# +#with open(os.path.join(filepath, sitename + '_skipped2' + '.pkl'), 'wb') as f: +# pickle.dump(idx_skipped, f) +# +#with open(os.path.join(filepath, sitename + '_idxnocloud2' + '.pkl'), 'wb') as f: +# pickle.dump(idx_nocloud, f) + +# plt.figure() +# plt.axis('equal') +# plt.plot(refpoints[:,0], refpoints[:,1], 'ko') +# plt.plot(all_points[temp,0], all_points[temp,1], 'go') +# plt.plot(all_points[~temp,0], all_points[~temp,1], 'ro') +# plt.draw() + + # extract shorelines (old method) +# im_ndwi = sds.nd_index(im_ms_ps[:,:,3], im_ms_ps[:,:,1], cloud_mask, plot_bool) +# wl_pix = sds.find_wl_contours(im_ndwi, cloud_mask, min_contour_points, plot_bool) + +# plt.figure() +# plt.imshow(im_display) +# for i,contour in enumerate(contours_mwi): plt.plot(contour[:, 1], contour[:, 0], linewidth=3, color='k') +# for i,contour in enumerate(wl_pix): plt.plot(contour[:, 1], contour[:, 0], linestyle='--', linewidth=1, color='w') +# plt.draw() + diff --git a/sand_pixtrain_beach.py b/sand_pixtrain_beach.py index 0a4803e..6aea092 100644 --- a/sand_pixtrain_beach.py +++ b/sand_pixtrain_beach.py @@ -88,14 +88,14 @@ for i in range(N): fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] nrow = im_pan.shape[0] ncol = im_pan.shape[1] # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask im_qa = im_ms[:,:,5] diff --git a/sand_runNN.py b/sand_runNN.py index 00cc15c..470c913 100644 --- a/sand_runNN.py +++ b/sand_runNN.py @@ -85,14 +85,14 @@ for i in range(N): fn_pan = os.path.join(file_path_pan, file_names_pan[i]) data = gdal.Open(fn_pan, gdal.GA_ReadOnly) georef = np.array(data.GetGeoTransform()) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_pan = np.stack(bands, 2)[:,:,0] nrow = im_pan.shape[0] ncol = im_pan.shape[1] # read ms image fn_ms = os.path.join(file_path_ms, file_names_ms[i]) data = gdal.Open(fn_ms, gdal.GA_ReadOnly) - bands = [data.GetRasterBand(i + 1).ReadAsArray() for i in range(data.RasterCount)] + bands = [data.GetRasterBand(i + 1).ReadAsArray() for k in range(data.RasterCount)] im_ms = np.stack(bands, 2) # cloud mask im_qa = im_ms[:,:,5] diff --git a/sl_comparison_NARRA.py b/sl_comparison_NARRA.py new file mode 100644 index 0000000..ac9a3b0 --- /dev/null +++ b/sl_comparison_NARRA.py @@ -0,0 +1,382 @@ +# -*- coding: utf-8 -*- + +#==========================================================# +# Compare Narrabeen SDS with 3D quadbike surveys +#==========================================================# + +# Initial settings + +import os +import numpy as np +import matplotlib.pyplot as plt +import pdb +import ee + +import matplotlib.dates as mdates +import matplotlib.cm as cm +from datetime import datetime, timedelta +import pickle +import pytz +import scipy.io as sio +import scipy.interpolate as interpolate +import statsmodels.api as sm +import skimage.measure as measure + +# my functions +import functions.utils as utils + +# some settings +np.seterr(all='ignore') # raise/ignore divisions by 0 and nans +plt.rcParams['axes.grid'] = True +plt.rcParams['figure.max_open_warning'] = 100 + +au_tz = pytz.timezone('Australia/Sydney') + +# load quadbike dates and convert from datenum to datetime +filename = 'data\quadbike\survey_dates.mat' +filepath = os.path.join(os.getcwd(), filename) +dates_quad = sio.loadmat(filepath)['dates'] # matrix containing year, month, day +dates_quad = [datetime(dates_quad[i,0], dates_quad[i,1], dates_quad[i,2], + tzinfo=au_tz) for i in range(dates_quad.shape[0])] + +# load timestamps from satellite images +satname = 'L8' +sitename = 'NARRA' +filepath = os.path.join(os.getcwd(), 'data', satname, sitename) +with open(os.path.join(filepath, sitename + '_output_new' + '.pkl'), 'rb') as f: + output = pickle.load(f) + +dates_l8 = output['t'] +# convert to AEST +dates_l8 = [_.astimezone(au_tz) for _ in dates_l8] +# remove duplicates +dates_l8_str = [_.strftime('%Y%m%d') for _ in dates_l8] +dupl = utils.duplicates_dict(dates_l8_str) +idx_remove = [] +for k,v in dupl.items(): + + idx1 = v[0] + idx2 = v[1] + + c1 = output['cloud_cover'][idx1] + c2 = output['cloud_cover'][idx2] + g1 = output['acc_georef'][idx1] + g2 = output['acc_georef'][idx2] + + if c1 < c2 - 0.01: + idx_remove.append(idx2) + elif g1 < g2 - 0.1: + idx_remove.append(idx2) + else: + idx_remove.append(idx1) +idx_remove = sorted(idx_remove) +idx_all = np.linspace(0,70,71) +idx_keep = list(np.where(~np.isin(idx_all,idx_remove))[0]) +output['t'] = [output['t'][k] for k in idx_keep] +output['shorelines'] = [output['shorelines'][k] for k in idx_keep] +output['cloud_cover'] = [output['cloud_cover'][k] for k in idx_keep] +output['acc_georef'] = [output['acc_georef'][k] for k in idx_keep] +# convert to AEST +dates_l8 = output['t'] +dates_l8 = [_.astimezone(au_tz) for _ in dates_l8] + +# load wave data (already AEST) +filename = 'data\wave\SydneyProcessed.mat' +filepath = os.path.join(os.getcwd(), filename) +wave_data = sio.loadmat(filepath) +idx = utils.find_indices(wave_data['dates'][:,0], lambda e: e >= dates_l8[0].year and e <= dates_l8[-1].year) +hsig = np.array([wave_data['Hsig'][i][0] for i in idx]) +wdir = np.array([wave_data['Wdir'][i][0] for i in idx]) +dates_wave = [datetime(wave_data['dates'][i,0], wave_data['dates'][i,1], + wave_data['dates'][i,2], wave_data['dates'][i,3], + wave_data['dates'][i,4], wave_data['dates'][i,5], + tzinfo=au_tz) for i in idx] + +# load tide data (already AEST) +filename = 'SydTideData.mat' +filepath = os.path.join(os.getcwd(), 'data', 'tide', filename) +tide_data = sio.loadmat(filepath) +idx = utils.find_indices(tide_data['dates'][:,0], lambda e: e >= dates_l8[0].year and e <= dates_l8[-1].year) +tide = np.array([tide_data['tide'][i][0] for i in idx]) +dates_tide = [datetime(tide_data['dates'][i,0], tide_data['dates'][i,1], + tide_data['dates'][i,2], tide_data['dates'][i,3], + tide_data['dates'][i,4], tide_data['dates'][i,5], + tzinfo=au_tz) for i in idx] + +#%% make a plot of all the dates with wave data +orange = [255/255,140/255,0] +blue = [0,191/255,255/255] +f = plt.figure() +months = mdates.MonthLocator() +month_fmt = mdates.DateFormatter('%b %Y') +days = mdates.DayLocator() +years = [2013,2014,2015,2016] +for k in range(len(years)): + sel_year = years[k] + ax = plt.subplot(4,1,k+1) + idx_year = utils.find_indices(dates_wave, lambda e : e.year >= sel_year and e.year <= sel_year) + plt.plot([dates_wave[i] for i in idx_year], [hsig[i] for i in idx_year], 'k-', linewidth=0.5) + hsigmax = np.nanmax([hsig[i] for i in idx_year]) + cbool = True + for j in range(len(dates_quad)): + if dates_quad[j].year == sel_year: + if cbool: + plt.plot([dates_quad[j], dates_quad[j]], [0, hsigmax], color=orange, label='survey') + cbool = False + else: + plt.plot([dates_quad[j], dates_quad[j]], [0, hsigmax], color=orange) + cbool = True + for j in range(len(dates_l8)): + if dates_l8[j].year == sel_year: + if cbool: + plt.plot([dates_l8[j], dates_l8[j]], [0, hsigmax], color=blue, label='landsat8') + cbool = False + else: + plt.plot([dates_l8[j], dates_l8[j]], [0, hsigmax], color=blue) + if k == 3: + plt.legend() + plt.xlim((datetime(sel_year,1,1), datetime(sel_year,12,31, tzinfo=au_tz))) + plt.ylim((0, hsigmax)) + plt.ylabel('Hs [m]') + ax.xaxis.set_major_locator = months + ax.xaxis.set_major_formatter(month_fmt) +f.subplots_adjust(hspace=0.2) +plt.draw() + +#%% calculate difference between dates (quad and sat) +diff_days = [ [(x - _).days for _ in dates_quad] for x in dates_l8] +max_diff = 14 +idx_closest = [utils.find_indices(_, lambda e: abs(e) <= max_diff) for _ in diff_days] +# store in dates_diff dictionnary +dates_diff = [] +cloud_cover = [] +for i in range(len(idx_closest)): + if not idx_closest[i]: + continue + elif len(idx_closest[i]) > 1: + idx_best = np.argmin(np.abs([diff_days[i][_] for _ in idx_closest[i]])) + dates_temp = [dates_quad[_] for _ in idx_closest[i]] + days_temp = [diff_days[i][_] for _ in idx_closest[i]] + dates_diff.append({"date sat": dates_l8[i], + "date quad": dates_temp[idx_best], + "days diff": days_temp[idx_best]}) + else: + dates_diff.append({"date sat": dates_l8[i], + "date quad": dates_quad[idx_closest[i][0]], + "days diff": diff_days[i][idx_closest[i][0]] + }) + # store cloud data + cloud_cover.append(output['cloud_cover'][i]) + +# store wave data +wave_hsig = [] +for i in range(len(dates_diff)): + wave_hsig.append(hsig[np.argmin(np.abs(np.array([(dates_diff[i]['date sat'] - _).total_seconds() for _ in dates_wave])))]) + +# make a plot +plt.figure() +counter = 0 +for i in range(len(dates_diff)): + counter = counter + 1 + if dates_diff[i]['date quad'] > dates_diff[i]['date sat']: + date_min = dates_diff[i]['date sat'] + date_max = dates_diff[i]['date quad'] + color1 = orange + color2 = blue + else: + date_min = dates_diff[i]['date quad'] + date_max = dates_diff[i]['date sat'] + color1 = blue + color2 = orange + idx_t = utils.find_indices(dates_wave, lambda e : e >= date_min and e <= date_max) + hsigmax = np.nanmax([hsig[i] for i in idx_t]) + hsigmin = np.nanmin([hsig[i] for i in idx_t]) + if counter > 9: + counter = 1 + plt.figure() + ax = plt.subplot(3,3,counter) + plt.plot([dates_wave[i] for i in idx_t], [hsig[i] for i in idx_t], 'k-', linewidth=1.5) + plt.plot([date_min, date_min], [0, 4.5], color=color2, label='survey') + plt.plot([date_max, date_max], [0, 4.5], color=color1, label='landsat8') + plt.ylabel('Hs [m]') + ax.xaxis.set_major_locator(mdates.DayLocator(tz=au_tz)) + ax.xaxis.set_minor_locator(mdates.HourLocator(tz=au_tz)) + ax.xaxis.set_major_formatter(mdates.DateFormatter('%d')) + ax.xaxis.set_minor_locator(months) + plt.title(dates_diff[i]['date sat'].strftime('%b %Y') + ' (' + str(abs(dates_diff[i]['days diff'])) + ' days)') + plt.draw() + plt.gcf().subplots_adjust(hspace=0.5) + +# mean day difference +np.mean([ np.abs(_['days diff']) for _ in dates_diff]) + +#%% Compare shorelines in elevation + +dist_buffer = 50 # buffer of points selected for interpolation + +# load quadbike .mat files +foldername = 'data\quadbike\surveys3D' +folderpath = os.path.join(os.getcwd(), foldername) +filenames = os.listdir(folderpath) + +# get the satellite shorelines +sl = output['shorelines'] + +# get dates from filenames +dates_quad = [datetime(int(_[6:10]), int(_[11:13]), int(_[14:16]), tzinfo= au_tz) for _ in filenames] + +zav = [] +ztide = [] +sl_gt = [] +for i in range(len(dates_diff)): + + sl_smooth = sl[i] + + # select closest 3D survey and load .mat file + idx_closest = np.argmin(np.abs(np.array([(dates_diff[i]['date sat'] - _).days for _ in dates_quad]))) + survey3d = sio.loadmat(os.path.join(folderpath, filenames[idx_closest])) + # reshape to a vector + xs = survey3d['x'].reshape(survey3d['x'].shape[0] * survey3d['x'].shape[1]) + ys = survey3d['y'].reshape(survey3d['y'].shape[0] * survey3d['y'].shape[1]) + zs = survey3d['z'].reshape(survey3d['z'].shape[0] * survey3d['z'].shape[1]) + # remove nan values + idx_nan = np.isnan(zs) + xs = xs[~idx_nan] + ys = ys[~idx_nan] + zs = zs[~idx_nan] + + # find water level at the time the image was acquired + idx_closest = np.argmin(np.abs(np.array([(dates_diff[i]['date sat'] - _).total_seconds() for _ in dates_tide]))) + tide_level = tide[idx_closest] + ztide.append(tide_level) + + # find contour corresponding to the water level on 3D surface (if below minimum, add 0.05m increments) + if tide_level < np.nanmin(survey3d['z']): + tide_level = np.nanmin(survey3d['z']) + sl_tide = measure.find_contours(survey3d['z'], tide_level) + sl_tide = sl_tide[np.argmax(np.array([len(_) for _ in sl_tide]))] + count = 0 + while len(sl_tide) < 900: + count = count + 1 + tide_level = tide_level + 0.05*count + sl_tide = measure.find_contours(survey3d['z'], tide_level) + sl_tide = sl_tide[np.argmax(np.array([len(_) for _ in sl_tide]))] + print('added ' + str(0.05*count) + ' cm - contour with ' + str(len(sl_tide)) + ' points') + else: + sl_tide = measure.find_contours(survey3d['z'], tide_level) + sl_tide = sl_tide[np.argmax(np.array([len(_) for _ in sl_tide]))] + # remove nans + if np.any(np.isnan(sl_tide)): + index_nan = np.where(np.isnan(sl_tide))[0] + sl_tide = np.delete(sl_tide, index_nan, axis=0) + # get x,y coordinates + xtide = [survey3d['x'][int(np.round(sl_tide[m,0])), int(np.round(sl_tide[m,1]))] for m in range(sl_tide.shape[0])] + ytide = [survey3d['y'][int(np.round(sl_tide[m,0])), int(np.round(sl_tide[m,1]))] for m in range(sl_tide.shape[0])] + sl_gt.append(np.transpose(np.array([np.array(xtide), np.array(ytide)]))) + # interpolate SDS on 3D surface to get elevation (point by point) + zq = [] + for j in range(sl_smooth.shape[0]): + xq = sl_smooth[j,0] + yq = sl_smooth[j,1] + dist_q = np.linalg.norm(np.transpose(np.array([[xq - _ for _ in xs],[yq - _ for _ in ys]])), axis=1) + idx_buffer = dist_q <= dist_buffer + if sum(idx_buffer) > 0: + tck = interpolate.bisplrep(xs[idx_buffer], ys[idx_buffer], zs[idx_buffer]) + zq.append(interpolate.bisplev(xq, yq, tck)) + + zq = np.array(zq) + plt.figure() + plt.hist(zq, bins=100) + plt.draw() +# plt.figure() +# plt.axis('equal') +# plt.scatter(xs, ys, s=10, c=zs, marker='o', cmap=cm.get_cmap('jet'), +# label='quad data') +# plt.plot(xs[idx_buffer], ys[idx_buffer], 'ko') +# plt.plot(xq,yq,'ro') +# plt.draw() + + # store the alongshore median elevation + zav.append(np.median(utils.reject_outliers(zq, m=2))) + + # make plot + red = [255/255, 0, 0] + gray = [0.75, 0.75, 0.75] + plt.figure() + plt.subplot(121) + plt.axis('equal') + plt.scatter(xs, ys, s=10, c=zs, marker='o', cmap=cm.get_cmap('jet'), + label='3D survey') + plt.plot(xtide, ytide, '--', color=gray, linewidth=2.5, label='tide level contour') + plt.plot(sl_smooth[:,0], sl_smooth[:,1], '-', color=red, linewidth=2.5, label='SDS') +# plt.plot(sl[i][idx_beach,0], sl[i][idx_beach,1], 'w-', linewidth=2) + plt.xlabel('Eastings [m]') + plt.ylabel('Northings [m]') + plt.title('Shoreline comparison') + plt.colorbar(label='mAHD') + plt.legend() + plt.ylim((6266100, 6267000)) + plt.subplot(122) + plt.plot(np.linspace(0,1,len(zq)), zq, 'ko-', markersize=5) + plt.plot([0, 1], [zav[i], zav[i]], 'r-', label='median') + plt.plot([0, 1], [ztide[i], ztide[i]], 'g--', label = 'measured tide') + plt.xlabel('Northings [m]') + plt.ylabel('Elevation [mAHD]') + plt.title('Alongshore SDS elevation') + plt.legend() + mng = plt.get_current_fig_manager() + mng.window.showMaximized() + plt.tight_layout() + plt.draw() + + print(i) + +#%% Calculate some error statistics +zav = np.array(zav) +ztide = np.array(ztide) + +f = plt.figure() +plt.subplot(3,1,1) +plt.bar(np.linspace(1,len(zav),len(zav)), zav-ztide) +plt.ylabel('Error in z [m]') +plt.title('Elevation error') +plt.xticks([]) +plt.draw() + +plt.subplot(3,1,2) +plt.bar(np.linspace(1,len(zav),len(zav)), wave_hsig, color=orange) +plt.ylabel('Hsig [m]') +plt.xticks([]) +plt.draw() + +plt.subplot(3,1,3) +plt.bar(np.linspace(1,len(zav),len(zav)), np.array(cloud_cover)*100, color='g') +plt.ylabel('Cloud cover %') +plt.xlabel('comparison #') +plt.grid(False) +plt.grid(axis='y') +f.subplots_adjust(hspace=0) +plt.draw() + +np.sqrt(np.mean((zav - ztide)**2)) + + + +#%% plot to show LOWESS smoothing +#i = 0 +#idx_beach = [np.min(np.linalg.norm(sl[i][k,:] - narrabeach, axis=1)) < dist_thresh for k in range(sl[i].shape[0])] +#x = sl[i][idx_beach,0] +#y = sl[i][idx_beach,1] +#sl_smooth = lowess(x,y, frac=1./10, it = 10) +# +#plt.figure() +#plt.axis('equal') +#plt.scatter +#plt.plot(x,y,'bo', linewidth=2, label='original SDS') +#plt.plot(sl_smooth[:,1], sl_smooth[:,0], 'ro', linewidth=2, label='smoothed SDS') +#plt.legend() +#plt.xlabel('Eastings [m]') +#plt.ylabel('Northings [m]') +#plt.title('Local weighted scatterplot smoothing (LOWESS)') +#plt.draw() + diff --git a/time_coverage.py b/sl_comparison_NARRA_old.py similarity index 98% rename from time_coverage.py rename to sl_comparison_NARRA_old.py index 31b01f6..63533e8 100644 --- a/time_coverage.py +++ b/sl_comparison_NARRA_old.py @@ -24,7 +24,7 @@ import skimage.measure as measure # my functions import functions.utils as utils -import functions.sds as sds +import functions.sds_old1 as sds # some settings np.seterr(all='ignore') # raise/ignore divisions by 0 and nans @@ -44,7 +44,7 @@ dates_quad = [datetime(dates_quad[i,0], dates_quad[i,1], dates_quad[i,2], satname = 'L8' sitename = 'NARRA' filepath = os.path.join(os.getcwd(), 'data', satname, sitename) -with open(os.path.join(filepath, sitename + '_output2' + '.pkl'), 'rb') as f: +with open(os.path.join(filepath, sitename + '_output' + '.pkl'), 'rb') as f: output = pickle.load(f) dates_l8 = output['t'] # convert to AEST @@ -195,7 +195,7 @@ filenames = os.listdir(folderpath) sl = output['shorelines'] # load narrabeen beach points (manually digitized) -with open(os.path.join(os.getcwd(), 'olddata', 'narra_beach' + '.pkl'), 'rb') as f: +with open(os.path.join(os.getcwd(), 'old', 'olddata', 'narra_beach' + '.pkl'), 'rb') as f: narrabeach = pickle.load(f) # get dates from filenames