Détermination du nombre d'étages d'une maison à partir de sa photo sans apprentissage automatique


Dans cet article, je donnerai, à mon avis, une solution intéressante au problÚme de la reconnaissance informatique des objets dans une image sans utiliser de formation.


Tùche: avoir une photo d'un immeuble à plusieurs étages, essayer de déterminer le nombre d'étages qu'il contient.


Une bonne estimation du nombre d'Ă©tages peut donner le nombre de fenĂȘtres Ă  la verticale de la maison. Les fenĂȘtres, les balcons et autres objets sont de bonnes caractĂ©ristiques des sols (en particulier dans les bĂątiments rĂ©sidentiels). Je considĂ©rerai les bĂątiments rĂ©sidentiels dont les images sont faciles Ă  trouver sur le rĂ©seau. Une limitation importante doit ĂȘtre notĂ©e Ă  l'avance: la maison dans l'image doit ĂȘtre montrĂ©e complĂštement verticalement, afin qu'il soit possible de dĂ©tecter visuellement tous les Ă©tages.


La tùche est rationnellement divisée en deux étapes:


  1. Recherchez la «bande» verticale des fenĂȘtres Ă  compter. Deux sous-tĂąches: premiĂšrement, vous devez rechercher des fenĂȘtres dans la zone d'image occupĂ©e par la maison, et deuxiĂšmement, il y a beaucoup de fenĂȘtres dans les bĂątiments rĂ©sidentiels, cela n'a aucun sens de les analyser toutes. Il est nĂ©cessaire de mettre en Ă©vidence parmi eux la sĂ©quence verticale la mieux adaptĂ©e Ă  une analyse ultĂ©rieure.
  2. DĂ©termination du nombre d'Ă©tages (fenĂȘtres ou autres objets caractĂ©ristiques) par la zone sĂ©lectionnĂ©e de la maison.

Cet article est principalement consacré à la premiÚre étape de la solution. La deuxiÚme étape est encore en développement, mais je donnerai également quelques résultats de sa solution.


Étape 1. Recherchez la zone avec des fenĂȘtres


L'idĂ©e principale est qu'une sĂ©rie d'objets identiques (tels que des fenĂȘtres) qui se distinguent bien sur une maison dans une rangĂ©e d'objets identiques crĂ©ent une sĂ©quence pĂ©riodique de luminositĂ© des pixels. C'est prĂ©cisĂ©ment la sĂ©quence Ă  trouver. Voici les principales Ă©tapes de l'algorithme.


Nous traduisons d'abord l'image en nuances de gris et la mettons à l'échelle (j'ai utilisé des images 400x600px)
image
Fig.1 Image originale n / b


Plus loin dans la boucle:


  1. Sélection sur l'image d'une bande relativement étroite (40px) sur toute la hauteur (Fig.2, image inférieure sans points)
  2. Moyenne de la luminositĂ© sur la largeur de la bande. Il s'avĂšre que la ligne w de la distribution de la luminositĂ© moyenne sur la hauteur de la maison (Fig.2 graphique supĂ©rieur). Il a une structure pĂ©riodique clairement visible caractĂ©ristique de la zone oĂč il y a des fenĂȘtres. Les fenĂȘtres situĂ©es Ă  l'ombre sont moins reconnaissables, mais cela ne fera pas de mal.
  3. La différence dw des valeurs de w et w décalées de la distance sh est calculée. La méthode de recherche utilise une telle valeur de décalage sh pour atteindre la réduction maximale de la médiane des différences dw (figure 2, graphique inférieur).
    image
    image
    Fig.2 "Bande" de fenĂȘtres

Cependant, il ne suffit pas de trouver la bande de l'image sur laquelle la mĂ©diane a Ă©tĂ© la plus fortement rĂ©duite. Le fait est que les zones de verdure ou de ciel, avec de faibles valeurs de cisaillement, peuvent donner une diminution plus importante que les fenĂȘtres. Mais si nous traçons la dĂ©pendance de la valeur mĂ©diane sur la valeur de dĂ©calage pour les bandes avec et sans fenĂȘtres, nous pouvons remarquer une diffĂ©rence clĂ©: pour les valeurs de dĂ©calage proches de la hauteur des sols, le graphique avec les fenĂȘtres prĂ©sente des extrema clairement visibles. Ainsi, il n'est pas nĂ©cessaire de mesurer le niveau absolu atteignable de la mĂ©diane, mais sa diminution maximale par rapport au maximum dans le processus d'augmentation du dĂ©calage pour chaque fenĂȘtre. Ceci est un point clĂ©.


sans fenĂȘtresavec fenĂȘtres
imageimage

Fig. 3 Changement de la médiane de la luminosité moyenne avec un décalage croissant


Ci-dessous, le code python3 avec des commentaires.


image = Image.open("raf_data/32.jpg").resize((600,400)) # . img = np.array(image.convert("L"), dtype=float)/255 SEARCH_WIDTH = 40 #    x_opt = [0, 1] #    :      sh_range = range(1,100) #    kmax = 0 #       for x in range(0, img.shape[1]-SEARCH_WIDTH, int(SEARCH_WIDTH/2)): amax = 0 amin = 1 #      for sh in sh_range: #    w = img[:,x:x+SEARCH_WIDTH].mean(axis=1) aim = (pd.DataFrame(w)-pd.DataFrame(w).shift(sh))[sh:].abs().median().values[0] #    aim    sh if aim>amax: amax = aim amin = amax if aim<amin: amin = aim aim_k = amax/amin if aim_k>kmax: x_opt = [x, sh, w] kmax = aim_k print(' : {0},  : {1}'.format(x_opt[0], x_opt[1])) 

La figure 2 marque les points dĂ©finis Ă  la distance du dĂ©calage trouvĂ©. Comme vous pouvez le voir, ils marquent bien chaque fenĂȘtre. C'est-Ă -dire nous connaissons dĂ©jĂ  la hauteur du sol!
L'algorithme considéré trouve de bonnes zones réguliÚres sur les façades de divers bùtiments résidentiels (Fig. 4).
image
image
image
Fig.4 Exemple


Étape 2. Compter le nombre d'Ă©tages


A ce stade, les principales difficultĂ©s commencent. D'autres actions peuvent ĂȘtre les suivantes:


  1. Estimer la hauteur de la maison en analysant la courbe des différences de luminosité moyenne ou en utilisant le machine learning). Divisez la hauteur de la maison par la hauteur du sol et obtenez le nombre d'étages.
  2. Dans la fenĂȘtre trouvĂ©e Ă  la premiĂšre Ă©tape, recherchez des objets similaires aux fenĂȘtres et comptez-les directement, par exemple, Ă  des points spĂ©cifiques.

Il semble naturel d'essayer d'abord la premiÚre méthode: une fois la hauteur des sols connue, il reste à déterminer la hauteur de la maison. Cependant, des schémas similaires à ceux illustrés à l'étape 1 s'avÚrent mal adaptés pour déterminer la hauteur de la maison, en tenant compte de toutes les limites et transitions possibles. Dans certains cas, il est possible d'obtenir de bons exemples de travail, mais pour un bon résultat constant, des approches utilisant l'apprentissage automatique sont nécessaires.


image
Fig. 5 DĂ©termination de la hauteur de la maison Ă  l'aide d'une forĂȘt alĂ©atoire

Source: https://habr.com/ru/post/fr422867/


All Articles