diff --git a/sds_extract.py b/sds_extract.py deleted file mode 100644 index 74742c3..0000000 --- a/sds_extract.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- - -#==========================================================# -# Extract shorelines from Landsat images -#==========================================================# - -# Initial settings -import ee -import matplotlib.pyplot as plt -import matplotlib.cm as cm -import numpy as np -import pandas as pd -from datetime import datetime -import pickle -import pdb -import pytz - - -# 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.morphology as morphology -import skimage.measure as measure - -# my 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'] = False -plt.rcParams['figure.max_open_warning'] = 100 -ee.Initialize() - -# parameters -cloud_thresh = 0.5 # threshold for cloud cover -plot_bool = True # 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 = 10 # radius of disk for buffer (sand classif parameter) -min_beach_size = 50 # number of pixels in a beach (sand classif parameter) - -# select collection -satname = 'L8' -input_col = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT_TOA') # Landsat 8 Tier 1 TOA - -# location (Narrabeen-Collaroy beach) -polygon = [[[151.3473129272461,-33.69035274454718], - [151.2820816040039,-33.68206818063878], - [151.27281188964844,-33.74775138989556], - [151.3425064086914,-33.75231878701767], - [151.3473129272461,-33.69035274454718]]]; - -# dates -start_date = '2013-01-01' -end_date = '2018-12-31' - -# filter by location and date -flt_col = input_col.filterBounds(ee.Geometry.Polygon(polygon)).filterDate(start_date, end_date) - -n_img = flt_col.size().getInfo() -print('Number of images covering the polygon:', n_img) -im_all = flt_col.getInfo().get('features') - -i = 0 # first image - -# find image in ee database -im = ee.Image(im_all[i].get('id')) - -# load image as np.array -im_pan, im_ms, cloud_mask, crs, meta = sds.read_eeimage(im, polygon, satname, plot_bool) - -# mask -inf or nan values on the image 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) -cloud_cover = sum(sum(cloud_mask.astype(int)))/(cloud_mask.shape[0]*cloud_mask.shape[1]) -print('Cloud cover : ' + str(int(round(100*cloud_cover))) + ' %') - -# 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) - -# calculate NDWI -im_ndwi = sds.nd_index(im_ms_ps[:,:,3], im_ms_ps[:,:,1], cloud_mask, plot_bool) - -# edge detection -wl_pix = sds.find_wl_contours(im_ndwi, cloud_mask, min_contour_points, plot_bool) - -plt.figure() -plt.imshow(im_ms_ps[:,:,[2,1,0]]) -for i,contour in enumerate(wl_pix): plt.plot(contour[:, 1], contour[:, 0], linewidth=2) -plt.axis('image') -plt.title('Detected water lines') -plt.show() - -# convert from pixels to world coordinates -wl_coords = sds.convert_pix2world(wl_pix, crs['crs_15m']) - -# convert to output epsg spatial reference -wl = sds.convert_epsg(wl_coords, crs['epsg_code'], output_epsg) - -# classify sand pixels with Kmeans -#im_sand = sds.classify_sand_unsupervised(im_ms_ps, im_pan, cloud_mask, wl_pix, buffer_size, min_beach_size, plot_bool) - -# classify image in 4 classes (sand, whitewater, water, other) with NN classifier -im_classif = sds.classify_image_NN(im_ms_ps, im_pan, cloud_mask, plot_bool) \ No newline at end of file