Skip to content

MariaLuize/Apicum-detection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

Detecção de áreas de apicum em dados Landsat utilizando redes neurais profundas

Apicuns, denominadas em inglês de hypersaline tidal flats, são unidades geoambientais comumente associadas a presença de manguezais em áridas e semiáridas regiões ao longo da Zona Costeira Brasileira (ZCB). Tais áreas apresentam altos níveis de salinidade aos quais advém da exposição a ciclos consecutivos de inundação e seca. Estes realizam manutenção da biodiversidade local e fomento social e econômico para a comunidade local, além de agir como guarda e buffer de florestas de mangue diante de aumentos no nível do mar. Entretanto, tais áreas estão à mercê de impactos ambientais, fenômenos naturais e antropológicos, e estudos focados nesse tipo de classe de uso e cobertura ainda são escassos e esparsos, logo, sua identificação e monitoramento ao longo de extensivas séries temporais se mostram tarefas importante para a sua preservação bem como forma de avaliar e descrever os impactos de atividades humanas e das mudanças climáticas, juntamente com a situação ecológica, financeira e social do espaço costeiro. Nacionalmente, o Projeto MapBiomas é uma referência notável no que tange a classificação e detecção, ao nível de pixel, de alvos ambientais em longas séries de imagens de satélite. Estudos deste projeto foram relatados em publicação recente a aplicação de modelos de Random Forest para a classificação de apicum em específico. Nesse sentido, por meio da execução de um mapeamento sistemático da literatura, verificou-se uma proeminência e popularidade na utilização de técnicas de Convolucional Neural Network para a segmentação semântica de alvos costeiros em imagens de satélite, em especial, redes derivadas do famoso modelo U-Net, utilizando técnicas de correção atmosférica para pré-processamento e métricas de acurácia global como forma de avaliação dos mapas e dados gerados. Destarte, o presente trabalho propõe a utilização de uma rede neural convolucional do tipo U-Net para sistematicamente classificar, ao nível de pixel, áreas de apicum presentes em imagens de satélite da missão Landsat. Tais imagens a serem classificadas compreendem uma série temporal com início em 1985 e término em 2023, embargando a ZCB. Ainda, técnicas de pré e pós-processamentos foram utilizada.

Google EARTH Engine Scripts

  • Geração de mosaicos: link

  • Função de preenchimento e filtro temporal: link

  • Filtro espacial: link

  • Filtro de frequência: link

  • Delimitação por área da ZCB: link

  • Visualização do produto final e estatísticas: link*

Uso do script de ''Visualização do produto final e estatísticas''

  • NECESSARY IMPORTS
var geometry_RJ = 
    /* color: #d63000 */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[-44.41376933593751, -22.106248427099384],
          [-44.41376933593751, -23.55919889599254],
          [-42.75483378906251, -23.55919889599254],
          [-42.75483378906251, -22.106248427099384]]], null, false),
    imageVisParam = {"opacity":1,"bands":["swir1","nir","red"],"min":1,"max":104,"gamma":1};
  • BASIC CONFIGURATIONS
// YEAR SELECTION
var year    = 1985;
var classID = 32;
var mosaic  = ee.Image("projects/mapbiomas-workspace/TRANSVERSAIS/ZONACOSTEIRA6/mosaic_"+year);

// BASIC MOSAIC VISUALIZATION
Map.addLayer(mosaic,imageVisParam,'Mosaic '+year);

// BLANK CANVAS FOR BETTER VISUALIZATION
Map.addLayer(ee.Image(0),{palette:'FFFFFF'},'Blank',false);
  • VISUALIZATION OF MapBiomas 6 CLASSIFICATION
// ATTENTION: PLEASE, DO NOT MODIFY THE FOLLOWING LINES
var merge = ee.ImageCollection('projects/mapbiomas-workspace/TRANSVERSAIS/ZONACOSTEIRA6-FT')
             .filterMetadata('version','equals','3').filter(ee.Filter.eq('year',year)).max().eq(classID).unmask(0);
var displacedMergeMask = merge.focal_max(4).reproject('EPSG:4326', null, 30)
merge = merge.updateMask(displacedMergeMask.eq(1)).unmask(0)
Map.addLayer(merge,{palette:['white','red'],min:0,max:1},'Reference Mapbiomas Collection 6',false)
  • SORT POINTS
var points = merge.stratifiedSample(10000,'classification',geometry_RJ,30,null,1,[0,1],[5000,5000],true,1,true)
print(points.size())
print(points.first())
Map.addLayer(points,{},'Points',false)
  • HYPERSALINE TIDAL FLATS (HTF) CLASSIFICATION
// ATTENTION: PLEASE, DO NOT MODIFY THE FOLLOWING LINES
var HTF_Seg = ee.ImageCollection('projects/masters-exp-postprocessing/assets/Data_Augmentation/clear_product')
                                                .filterMetadata('version','equals',14).filter(ee.Filter.eq('year',year)).max().unmask(0).rename('classification');
  • COMPARISON BETWEEN REFERENCE MAP (MapBiomas 6) WITH HTF CLASSIFICATION
points= points.map(function(feat){
  return feat.set({'HTF_Seg':HTF_Seg.eq(classID).reduceRegion(ee.Reducer.first(),feat.geometry(),30).get('classification')})
})
print(points.first())

Map.addLayer(HTF_Seg.mask(HTF_Seg.eq(classID)),{palette:'blue'},'HTF Segmentation',false)
  • CORRELATIONS
//No-change
var noChangeP = HTF_Seg.eq(classID).and(merge.eq(1))
var noChangeN = HTF_Seg.neq(classID).and(merge.eq(0))

//Positive-Disagreement (HTF_Seg HTF -> ecosystem non-HTF)
var positiveDisagreement = HTF_Seg.eq(classID).and(merge.neq(1))

//Negative-Disagreement (HTF_Seg non-HTF -> ecosystem HTF)
var nagativeDisagreement = HTF_Seg.neq(classID).and(merge.eq(1))

var changes = ee.ImageCollection([ee.Image(1).toByte().mask(noChangeP),
                                  ee.Image(2).toByte().mask(positiveDisagreement),
                                  ee.Image(3).toByte().mask(nagativeDisagreement)
                                  ]).max().unmask(0)
Map.addLayer(changes.mask(changes.gt(0)),{palette:['000000','0000FF','00FF00','FF0000'],min:0,max:3},'Changes')
  • STATISTICS
var statesBR = ee.FeatureCollection('projects/solvedltda/assets/BR_UF_2021')
 var changesPerState = statesBR.map(function(feat){
      var nochangesP = noChangeP.reduceRegion({reducer:ee.Reducer.sum(),geometry:feat.geometry(),scale:30,maxPixels:1e13})
      var nochangesN = noChangeN.reduceRegion({reducer:ee.Reducer.sum(),geometry:feat.geometry(),scale:30,maxPixels:1e13})
      var positive = positiveDisagreement.reduceRegion({reducer:ee.Reducer.sum(),geometry:feat.geometry(),scale:30,maxPixels:1e13})
      var negative = nagativeDisagreement.reduceRegion({reducer:ee.Reducer.sum(),geometry:feat.geometry(),scale:30,maxPixels:1e13})
      var sigla = feat.get('sigla')
    return ee.Feature(null,{'nochangeN':nochangesN.get('classification'),'nochangeP':nochangesP.get('classification'),'positive':positive.get('classification'),'negative':negative.get('classification'),'sigla':sigla})
 })
var changesPerState_Exemple = changesPerState.first()
print('Brasilian state exemple: ', changesPerState_Exemple.get('sigla'), changesPerState_Exemple) 
Export.table.toDrive(changesPerState,'changes_per_state_'+year+'_mapbiomas','results_HTF','changes_per_state_'+year+'_mapbiomas')
  • LOCALIZATION SET
Map.setCenter(-43.59631,-23.01244,13)
  • POINTS BASED STATS
var errorM = points.errorMatrix('classification','HTF_Seg')
print('Error Matrix',errorM)
print('O.A',errorM.accuracy())
print('F1-Score',errorM.fscore())
print('Consumer',errorM.consumersAccuracy())
print('Producers',errorM.producersAccuracy())

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors