Suite

Comment regrouper des groupes individuels de pixels en une seule classe

Comment regrouper des groupes individuels de pixels en une seule classe


J'ai une image raster avec certains groupes de pixels de surface égale. Chaque groupe représente une seule maison. Je veux que tous les pixels à proximité d'un groupe de maisons aient la même valeur de pixel, c'est-à-dire que je veux nommer cette zone "zone résidentielle". Comment puis-je faire ceci? Je veux que quelque chose comme ça soit fait : cette image devrait changer en :


Calculer le densité de maisons et de seuillage qui vous donneront la flexibilité nécessaire pour obtenir une solution reproductible à votre goût.

La flexibilité résulte de la variation de deux paramètres : l'étendue ("rayon" ou "largeur") du noyau de densité et la valeur seuil.

La densité peut être calculée par convolution avec un noyau gaussien (un "flou gaussien" dans le jargon du traitement d'images) ou même par des moyens focaux répétés (en utilisant des voisinages circulaires). Le seuillage est une simple opération de comparaison ("inférieure à" ou "supérieure à") pour sélectionner les régions de densité la plus élevée.

Les en-têtes numériques dans la figure sont la largeur du noyau gaussien en pixels. (L'image elle-même mesure environ 750 x 500 pixels.) Les zones sombres sont les régions sélectionnées via un seuil approprié. Dans ce cas, il apparaît que des largeurs comprises entre 20 et 50 environ donneront un résultat conforme à celui esquissé dans la question. Des largeurs plus grandes peuvent provoquer la fusion des régions tandis que des largeurs plus petites peuvent les maintenir séparées.

Une caractéristique intéressante de cette approche est son interprétabilité : les régions peuvent être caractérisées comme les zones où la densité de logements dépasse tant de maisons par unité de surface (kilomètre carré ou mile carré, par exemple). Cela en fait plus qu'un simple outil cartographique et permet son utilisation dans le cadre d'analyses quantitatives.


Les figurines ont été réalisées avec Mathématique 9, mais le processus dans un SIG raster tel que Spatial Analyst ou GRASS sera similaire. Cela peut même (facilement) être fait avec la plupart des logiciels de traitement d'images.

(* Recréer la grille d'indicateur de logement d'origine *) i = Import["http://i.stack.imgur.com/xWbby.png">

L'utilisation de statistiques focales vous donnera les résultats souhaités.

Disons que les pixels de la maison ont une valeur de 1 et d'autres ont une valeur de 0. Utilisez la statistique focale avec le type de statistique MAXIMUM avec un voisinage de votre choix. Le raster résultant sera une zone résidentielle de votre quartier.


J'imagine que le moyen le plus efficace serait de 1) convertir vos valeurs "maison" en une classe d'entités ponctuelles, 2) créer un attribut de regroupement en utilisant un critère de distance minimale avec l'outil de proximité, 3) parcourir chaque groupe pour générer un minimum polygones convexes à l'aide de l'outil Géométrie limite minimale. Vous pouvez ensuite reconvertir les polygones convexes minimaux combinés en raster.


J'ai récemment eu un problème similaire où j'avais besoin de reconnaître des groupes d'éléments. J'ai fini par utiliser un algorithme de clustering hiérarchique fourni par la bibliothèque clusterfck. Démo ici.

Pour appliquer cela à votre problème, vous devez d'abord parcourir l'image et faire une liste de points correspondant à vos critères.

Pour tracer les limites, vous pouvez utiliser plusieurs techniques : vous pouvez calculer une enveloppe convexe ou peut-être utiliser des cellules de Voronoï.

Je ne sais pas si ces algorithmes sont implémentés dans le langage que vous utilisez, mais ce n'est pas trop difficile à faire.


Voir la vidéo: Tartu Karlova Kooli klassi lõpuaktus