Estou tentando reconhecer cursos de água a partir de fotografias aéreas (digamos, do Google Maps). Os governos locais costumam ter dados GIS que indicam onde estão as vias navegáveis (e estradas, edifícios etc.), mas os dados da água neles são geralmente um tanto imprecisos e podemos ser capazes de melhorá-los usando imagens aéreas. Portanto, já temos alguns dados que nem sempre são confiáveis.
Eu sei como fazer um processamento básico de imagem nos dados (infelizmente ainda não tenho imagens de amostra para mostrar aqui, estou tentando imaginar como eu poderia fazer isso, nenhum código de trabalho ainda):
Posso coletar alguns conjuntos de valores de cores usando bits de via navegável nas imagens e descobrir quais pixels são os mais próximos dessas cores, possivelmente também para outros tipos de recursos (grama, estradas, prédios etc.). Se eu definir um limite no qual os pixels estão "próximos o suficiente", recebo um conjunto de pixels que provavelmente são cursos d'água (mas haverá muito ruído).
Posso transformar a imagem em escala de cinza e usar um algoritmo de detecção de borda padrão para descobrir onde estão as bordas. Novamente, isso me dá um conjunto de pixels com limites semelhantes, mas haverá ruído e as bordas também serão pensadas e / ou terão lacunas.
O que eu quero ter como saída é um conjunto de polígonos que descrevam as prováveis vias navegáveis.
Intuitivamente, eu gostaria de usar as bordas detectadas para criar polígonos e as informações de cores para decidir quais delas são a água, possivelmente usando os dados do governo que já temos.
Existe uma maneira conhecida de passar do resultado de um algoritmo de detecção de borda para um bom conjunto de polígonos fechados? Ou outras dicas sobre como atacar esse problema, se houver uma maneira melhor?