Ce blog a été écrit par un blogueur qui n'est plus chez SAS
Je suis un aîné qui monte au École de sciences et de mathématiques de Caroline du Nord . Au cours de cet été, j'ai travaillé comme étudiant technique d'été chez SAS.
Tandis que JMP 8 ne prend pas en charge la manipulation d'image, il permet à l'utilisateur de créer une DLL personnalisée pouvant être appelée à partir de JSL. J'ai donc créé une DLL qui permettait à certaines fonctions d'ImageMagick, une bibliothèque d'images open source, d'être appelées à partir de JSL.
À l'aide de cette DLL, j'ai essayé de compter les voitures figurant dans les photos de certaines webcams du département des transports de Caroline du Nord. Voici une image de celle située près de la sortie 289 de l'Interstate 40, dans la région de Raleigh:

Malheureusement, les parties les plus éloignées de la route sont difficiles à voir car tout est flou. Donc je n'ai pas regardé cette partie. Je l'ai coupé.
Pour faciliter les calculs ultérieurs, j'ai également converti les images en niveaux de gris. Je n'ai donc dû travailler qu'avec une seule intensité pour chaque pixel, plutôt que trois canaux de couleur.
L'image ressemblait alors à ceci:

Afin de compter les voitures, j'avais besoin de savoir quelles parties des images étaient des voitures. Comme les webcams sont mises à jour toutes les 3 minutes, j’avais beaucoup d’autres images avec lesquelles comparer. Donc, pour chaque image que j’ai analysée, j’ai regardé les 10 images qui la précédaient et les 10 images qui la suivaient, puis avons fait la moyenne de ces 20 images. Le résultat était assez proche d'une image de la route sans voiture, comme vous pouvez le constater:

Cette image m'a indiqué quelles parties de l'image que je regardais n'étaient pas des voitures. En le soustrayant de l’image que j’étais en train d’analyser, j’ai eu une belle image de ce que les pièces étaient des voitures:

À ce stade, il est assez facile, même à partir d'un script, de déterminer quelles parties de l'image sont des voitures. Les régions grises sont des voitures; les régions sombres ne sont pas. Il y avait des régions gris foncé où il n'était pas clair si elles devaient être considérées comme des voitures ou non. J'ai trouvé que ce qui semblait le mieux fonctionner pour eux était de considérer les zones où l'intensité de la couleur était inférieure à 60 comme fond, et les zones où l'intensité était de 60 ou plus pour être des voitures. Avec ce type de filtre appliqué, l’image ressemble à ceci:

J'avais alors une collection de coordonnées (x, y) de pixels qui composaient plusieurs voitures. Les pixels d'une seule voiture devant être plus proches les uns des autres que ceux d'autres voitures, j'ai essayé d'utiliser l'outil d'analyse de grappes de JMP pour diviser ces points en grappes. Idéalement, chaque groupe représenterait une voiture. Voici cette même image avec chaque cluster donné sa propre couleur:

Comme vous pouvez le constater, il semble avoir fait un très bon travail sur cette photo. Mais comme l'outil d'analyse de cluster de JMP a besoin d'un certain nombre de clusters avant de pouvoir effectuer l'analyse, ce n'est pas le meilleur outil pour le comptage automatisé. C'est pourquoi tant de pixels individuels semblent constituer leurs propres groupes. JMP les divise en un nombre de clusters par défaut, 20, alors qu'il n'y a que 8 voitures dans l'image.
L'outil d'analyse de cluster de JMP n'étant pas le meilleur outil pour ce travail, j'ai fini par en utiliser un autre. Une fois que vous avez pris en compte le fait que les voitures les plus éloignées ont l'air plus petites, la plupart des voitures ont des tailles similaires. Donc, à l'étape du noir et blanc, je pouvais compter les pixels blancs (en prenant soin de bien prendre en compte les distances des voitures par rapport à la caméra) pour obtenir une approximation du nombre de voitures dans l'image.
À peu près à la même époque, j'ai aussi décidé de changer de webcam. Le problème avec celui-ci était qu'il évoluait beaucoup, ce qui empêchait le calcul de la moyenne. Voici quatre images consécutives:




Ces quatre sont un peu plus extrêmes que la plupart, mais vous avez l’idée. Après quelques recherches, j'ai trouvé une webcam différente qui ne bougeait pas. En voici une photo:

Étant donné que la taille d'une voiture varie avec la coordonnée y d'une manière prévisible et linéaire, il est possible de l'ajuster à l'aide de calculs relativement simples. Malheureusement, cela nécessite d'identifier quatre points (deux de chaque côté de la route), et communiquer ces quatre points à un script est plutôt délicat.
Il y a un moyen plus facile. JMP dispose d'une plate-forme de modélisation. Si vous comptez les voitures dans certaines images à la main et transmettez ces données à JMP, vous pouvez créer un modèle permettant de prédire le nombre de voitures dans les autres images, en fonction de l'emplacement et de la distribution des pixels qui les composent.
J'ai divisé chaque image en bandes horizontales de 5 pixels de hauteur, comme indiqué approximativement dans la copie (recadrée) ci-dessous de l'image ci-dessus.

Après en avoir soustrait l’image moyenne, j’ai compté le nombre de pixels dont l’intensité était supérieure à 60 dans chaque bande de chaque pixel. J'aurais pu adapter un modèle à ce moment-là; mais comme j'essayais d'expliquer le nombre de voitures en fonction du nombre de pixels de chaque bande, il y avait environ 30 variables explicatives - une pour chaque bande. J'aurais eu besoin d'un lot d’images pour créer le modèle, ce qui n’aurait pas laissé beaucoup d’utilisateurs.
Pour résoudre ce problème, j'ai extrait les composants principaux. Les composantes principales sont des combinaisons linéaires des 30 variables explicatives d'origine calculées de manière à ce que la première composante principale explique la plus grande variation dans les données et la 30ème la moindre. Il s’avère que les 11 principales composantes expliquent plus de 95% de la variation. Ainsi, en modélisant sur la base des composantes principales au lieu des données brutes, j'ai réduit le nombre de variables explicatives à environ un tiers de ce qu'il était, tout en conservant 95% des informations.
J'ai compté à la main des voitures dans une sélection de 120 images choisies au hasard (j'en avais plus de 600, ce n'était donc qu'une petite partie d'entre elles) et j'ai transmis ces chiffres, ainsi que le nombre de pixels, à la plateforme Fit Model de JMP. JMP est venu avec un modèle que j'ai utilisé pour créer un tableau du nombre calculé de voitures par le temps. J'ai ensuite représenté graphiquement ces données pour jeudi après-midi et vendredi. Avec une spline adaptée, le graphique ressemble à ceci:

Ce graphique montre bien les modèles de trafic auxquels je m'attendais. Il y a une augmentation importante de la circulation aux heures de pointe du matin et du soir, ainsi qu’au déjeuner.
Douglas M Okamoto (Données à l'information à la connaissance) a écrit:
Je souhaite féliciter l'étudiant d'été technique et entreprenant de SAS pour avoir mis au point un système de suivi d'association de données permettant d'identifier le trafic de véhicules dans et autour de Raleigh, en Caroline du Nord, à l'aide de la plate-forme JMP.
Trois questions, si je peux.
Q1. Qu'en est-il de l'échantillonnage systématique des images prises toutes les 15 minutes? Trente heures de vidéosurveillance par webcam avec des images mises à jour toutes les trois minutes donnent 600 images en tout. Un échantillon systématique de 120 images devrait être plus représentatif qu'un échantillon aléatoire de la même taille.
Q2. La perspective accrue était-elle l’une des 30 variables d’explication étranges à partir desquelles les 11 composantes principales ont été combinées? Dans l'image recadrée et segmentée, les véhicules des segments de premier plan sont plus pixélisés que ceux de l'arrière-plan.
Q3. la voiture de moins de 16 voitures est-elle autour de 13 heures en raison de gens qui se dépêchent de retourner au travail après le déjeuner au Davis Family Bar-BQ à Morrisville?
Référence
Département des transports des États-Unis, Traffic Detector Handbook: Troisième édition, volume I, numéro de publication FHWA-HRT-06-108 (octobre 2006)
â ¢ http://www.tfhrc.gov/its/pubs/06108/06108.pdf
aki a écrit:
Hé, Greg!
Assez intéressant! Un beau reportage.
En regardant l’intrigue à la fin, je pensais que si vous comptiez trop souvent aux heures de pointe, les mêmes voitures seraient toujours visibles quelques minutes plus tard. Vous devez donc faire attention à la façon dont vous "additionnez" les données (ce que vous ne faites pas dans ce rapport) ... Reconnaître que la même voiture de la photo précédente est encore là-haut est un problème assez difficile, je suppose ... Ils peuvent aussi changer de voie, alors vous ne pouvez pas simplement reconnaître un groupe d'entre eux, redimensionné ...
Eh bien, mais peut-être que ces problèmes se résolvent d'eux-mêmes lorsque vous collectez automatiquement une grande quantité de données, alors il n'y a peut-être aucun problème à collecter de vraies données ...
Indiquer l’utilisation pratique de la technologie pourrait rendre le rapport encore plus intéressant. (Par exemple, rapports de flux de trafic automatiques, ou analyse de capacité, ou autre chose ...)
Quoi qu'il en soit, j'ai lu votre rapport avec intérêt. Je vous remercie!
aki.
Liang Liem a écrit:
Intéressant. S'il fait nuit et que les lampadaires sont allumés, cela fonctionnerait-il toujours.
> Dire quelle utilisation pratique de la technologie
Peut-être qu'il peut être utilisé pour atténuer les lampadaires. Si le niveau de lumière est faible, l'intensité lumineuse peut être faible, mais que si l'intensité du trafic augmente, vous pouvez également l'augmenter.
Dans certaines rues, il peut ne pas y avoir de voiture du tout, sauf pendant de courtes périodes, comme lorsqu'un ferry arrive ou qu'un match de hockey se termine. si nous pouvions détecter que le nombre de voitures dépasse un seuil, ces informations pourraient être envoyées à un serveur qui enverra ensuite des commandes en conséquence à différents contrôleurs de gradation dans la rue.
Cordialement
Liang