forked from kilianv/CoastSat_WRL
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
7 years ago
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
Created on Thu Mar 1 14:32:08 2018
|
||
|
|
||
|
@author: z5030440
|
||
|
|
||
|
Main code to extract shorelines from Landsat imagery
|
||
|
"""
|
||
|
# Preamble
|
||
|
|
||
|
import ee
|
||
|
import math
|
||
|
import matplotlib.pyplot as plt
|
||
|
import numpy as np
|
||
|
import pdb
|
||
|
|
||
|
# 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
|
||
|
from utils import *
|
||
|
from sds import *
|
||
|
|
||
|
np.seterr(all='ignore') # raise/ignore divisions by 0 and nans
|
||
|
ee.Initialize()
|
||
|
|
||
|
# parameters
|
||
|
plot_bool = False # if you want the plots
|
||
|
prob_high = 99.9 # upper probability to clip and rescale pixel intensity
|
||
|
min_contour_points = 100 # minimum number of points contained in each water line
|
||
|
|
||
|
# select collection
|
||
|
input_col = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT_TOA')
|
||
|
|
||
|
# location (Narrabeen-Collaroy beach)
|
||
|
rect_narra = [[[151.3473129272461,-33.69035274454718],
|
||
|
[151.2820816040039,-33.68206818063878],
|
||
|
[151.27281188964844,-33.74775138989556],
|
||
|
[151.3425064086914,-33.75231878701767],
|
||
|
[151.3473129272461,-33.69035274454718]]];
|
||
|
# Dates
|
||
|
start_date = '2016-01-01'
|
||
|
end_date = '2016-12-01'
|
||
|
# filter by location
|
||
|
flt_col = input_col.filterBounds(ee.Geometry.Polygon(rect_narra)).filterDate(start_date, end_date)
|
||
|
|
||
|
n_img = flt_col.size().getInfo()
|
||
|
print('Number of images covering Narrabeen:', n_img)
|
||
|
im_all = flt_col.getInfo().get('features')
|
||
|
output = []
|
||
|
# loop through all images
|
||
|
for i in range(n_img):
|
||
|
# find each image in ee database
|
||
|
im = ee.Image(im_all[i].get('id'))
|
||
|
# load image as np.array
|
||
|
im_pan, im_ms, im_cloud, crs = read_eeimage(im, rect_narra, plot_bool)
|
||
|
# rescale intensities
|
||
|
im_ms = rescale_image_intensity(im_ms, im_cloud, prob_high, plot_bool)
|
||
|
im_pan = rescale_image_intensity(im_pan, im_cloud, prob_high, plot_bool)
|
||
|
# pansharpen rgb image
|
||
|
im_ms_ps = pansharpen(im_ms[:,:,[0,1,2]], im_pan, im_cloud, 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 = nd_index(im_ms_ps[:,:,3], im_ms_ps[:,:,1], im_cloud, plot_bool)
|
||
|
# edge detection
|
||
|
wl_pix = find_wl_contours(im_ndwi, im_cloud, min_contour_points, True)
|
||
|
# convert from pixels to world coordinates
|
||
|
wl_coords = convert_pix2world(wl_pix, crs['crs_15m'])
|
||
|
output.append(wl_coords)
|
||
|
|