1 of 31

Gap filling in flood detection

feat. GEE and Python

Ian Davies

School of Environmental and Forest Sciences, UW

2 of 31

Motivation

3 of 31

Flood detection

Ideal:

  • Very few clouds
  • No haze
  • Image (L8) taken 1 day after peak precip

4 of 31

Flood detection

Less ideal:

  • Clouds and shadows obscure possible flooded areas
  • Image taken 5 days after peak precip, possibly capturing <max extent

5 of 31

Flood detection

Much less ideal:

  • Clouds and shadows obscure possible flooded areas

6 of 31

7 of 31

Radar

  • SAR (microwaves) can penetrate clouds �
  • But there’s really just one public SAR satellite system (Sentinel-1A/B), combined repeat time of ~6 days�
  • Many more optical sensors at our disposal (Landsat 7/8, Sentinel-2, MODIS)

8 of 31

Sentinel-1

9 of 31

Landsat 8

10 of 31

Question: What can we infer from cloud-covered floods (and with what certainty) when all we have is optical sensors?

11 of 31

Idea: Use auxiliary data

  • Utilize all available data to try and predict whether cloud-covered pixels are inundated or not
    • Spectral data to detect floods where we can
    • Topography/land cover data to estimate Pr(Flooded) where we can’t

12 of 31

Idea: Use auxiliary data

13 of 31

Goals

Rule out flooding

(High specificity)

Accurately predict flooding (High recall)

14 of 31

Workflow (in progress!)

  • Use cloudfree imagery and aux datasets to train a classifier
  • Test on “cloudy” images with mapped floods

15 of 31

Workflow

Find known flood events

Find imagery that overlaps flood event date/area

Calculate auxiliary features underneath imagery

Generate fake cloud cover, mask images

Sample pixels in clear imagery

Train classifier on sample pixels

Test on “cloudy” pixels

GEE

Python

16 of 31

Find flood events from DFO

  • Dartmouth Flood Observatory
  • Flood events mapped from space, mostly MODIS
  • Google Fusion Table contains flood date and (rough) bounds
  • For now, looking at just US floods for data availability

Event 4591, �April 4-11, 2018

17 of 31

Find clear imagery of flood events

  • Not interested in clouds yet! Only clear images <10% cloud cover�
  • Just L8 imagery for now

18 of 31

Calculate auxiliary features

  • Land cover (NLCD)
  • Distance from perm water
  • DEM-derived features
    • TWI, SPI, slope, curve, HAND, ...

19 of 31

Map floods and mask out any clouds, shadows, snow

  • Flood detection done with Automated Water Extraction Index (AWEI) (Feyisa et al. 2014)
  • Fewer urban misclassifications than MNDWI, thresholded at zero

20 of 31

Map floods and mask out any clouds, shadows, snow

From Feyisa et al. (2014)

21 of 31

Stack, generate cloud cover, and mask

Clear pixels

Cloudy pixels

Slope

Aspect

Distance from river

Etc ...

Clear flood event image

Cloudy image over same area

+

22 of 31

Sample from clear image

23 of 31

Export to Python, clean, convert to sparse matrix

24 of 31

Export to Python, clean, convert to sparse matrix

25 of 31

Export to Python, clean, convert to sparse matrix

26 of 31

Train exhaustively or extensively?

  • Two possibilities for training:�
  • Train on 1000s of points from one image to predict cloudy floods in that same image

27 of 31

Train exhaustively or extensively?

  • Two possibilities for training:�
  • Train on 1000s of points from one image to predict cloudy floods in that same image�
  • Train on 1000s of points from many different images/flood events to predict cloudy floods in any image

28 of 31

SVM

  • First attempt using SVM (linear and with kernel)
  • Not amazing
  • Better at predicting dry areas than predicting floods - low hanging fruit

29 of 31

Lots of bugs still, but how much can SVM improve?

30 of 31

TensorFlow CNNs

  • Seems very useful but I am not sure what sort of CNN would be appropriate - segmentation?

31 of 31

Thanks!