Dieser Blogeintrag wurde von einem Blogger verfasst, der nicht mehr bei SAS ist
Ich bin ein steigender Senior bei der North Carolina School of Science und Mathematik . In diesem Sommer arbeitete ich als technischer Sommerstudent bei SAS.
Während JMP 8 hat keine Unterstützung für die Bildbearbeitung, der Benutzer kann jedoch eine benutzerdefinierte DLL erstellen, die von JSL aus aufgerufen werden kann. Also habe ich eine DLL erstellt, mit der einige Funktionen von ImageMagick, einer Open-Source-Image-Bibliothek, von JSL aus aufgerufen werden konnten.
Mit dieser DLL habe ich versucht, Autos in Fotos von einigen Webcams der North Carolina Department of Transportation zu zählen. Hier ist ein Bild aus der Nähe der Ausfahrt 289 der Interstate 40 in der Region Raleigh:

Leider sind die weiter entfernten Teile der Straße schwer zu erkennen, da alles miteinander verschmiert. Also habe ich mir diesen Teil nicht angesehen. Ich habe es herausgeschnitten.
Um die späteren Berechnungen zu vereinfachen, konvertierte ich die Bilder auch in Graustufen, sodass ich nur mit einer einzelnen Intensität für jedes Pixel arbeiten musste, anstatt mit drei Farbkanälen.
Das Bild sah dann so aus:

Um die Autos zählen zu können, musste ich wissen, welche Teile der Bilder Autos waren. Da die Webcams alle 3 Minuten aktualisiert werden, hatte ich viele andere Bilder, mit denen ich jedes vergleichen konnte. Also habe ich für jedes von mir analysierte Bild die 10 Bilder davor und die 10 Bilder danach betrachtet und die 20 Bilder zusammengemittelt. Das Ergebnis war ziemlich nahe an einem Straßenbild ohne Autos, wie Sie sehen können:

Dieses Bild sagte mir, welche Teile des Bildes, die ich betrachtete, keine Autos waren. Durch das Subtrahieren von dem Bild, das ich analysierte, bekam ich ein schönes Bild davon, welche Teile Autos waren:

An diesem Punkt ist es ziemlich einfach, selbst aus einem Skript herauszufinden, welche Teile des Bildes Autos sind. Die grauen Regionen sind Autos; die dunklen Regionen sind nicht. Es gab einige Regionen, die dunkelgrau waren, in denen nicht klar war, ob sie als Autos gelten sollten oder nicht. Ich habe festgestellt, dass es für sie am besten schien, die Bereiche zu betrachten, in denen die Farbintensität weniger als 60 war, als Hintergrund und die Bereiche, in denen die Intensität 60 oder mehr betrug, als Autos. Mit dieser Art von Filter sieht das Bild so aus:

Ich hatte dann eine Sammlung von (x, y) Koordinaten von Pixeln, aus denen mehrere Autos zusammengesetzt waren. Da die Pixel eines einzelnen Autos näher zueinander sein sollten als die von anderen Autos, habe ich versucht, die Clusteranalyse-Tools von JMP zu verwenden, um diese Punkte in Cluster zu unterteilen. Im Idealfall würde jeder Cluster ein Auto darstellen. Hier ist dasselbe Bild, bei dem jeder Cluster seine eigene Farbe erhält:

Wie Sie sehen können, scheint es bei diesem Bild recht gute Arbeit geleistet zu haben. Da das Cluster-Analyse-Tool von JMP jedoch eine Reihe von Clustern benötigt, bevor es die Analyse durchführen kann, ist es nicht das beste Werkzeug für das automatisierte Zählen. Deshalb scheinen so viele einzelne Pixel ihre eigenen Cluster zu sein. JMP teilt sie in die voreingestellte Anzahl von Clustern auf, 20, wenn nur 8 Autos im Bild sind.
Da das Cluster-Analyse-Tool von JMP nicht das beste Werkzeug für diesen Job ist, habe ich ein anderes verwendet. Wenn Sie die Tatsache berücksichtigen, dass weiter entfernte Autos kleiner aussehen, haben die meisten Autos ähnliche Größen. Zurück im Schwarzweißschritt konnte ich daher weiße Pixel zählen (wobei darauf zu achten ist, wie weit die Autos von der Kamera entfernt sind), um eine Annäherung an die Anzahl der Autos auf dem Bild zu erhalten.
Um diese Zeit habe ich mich auch entschlossen, die Webcams zu wechseln. Das Problem bei diesem war, dass es sich viel bewegte, was die Mittelwertbildung verhinderte. Hier sind vier aufeinanderfolgende Bilder davon:




Diese vier sind etwas extremer als die meisten, aber Sie haben die Idee. Nach einigem Suchen fand ich eine andere Webcam, die sich nicht bewegte. Hier ist ein Bild davon:

Da die Größe eines Autos mit der y-Koordinate auf vorhersagbare, lineare Weise variiert, ist es möglich, dies mit relativ einfachen Berechnungen anzupassen. Unglücklicherweise erfordert dies das Identifizieren von vier Punkten (zwei auf jeder Straßenseite), und das Kommunizieren dieser vier Punkte an ein Skript ist ziemlich schwierig.
Es gibt einen einfacheren Weg. JMP verfügt über eine Modellierungsplattform. Wenn Sie in einigen Bildern Autos von Hand zählen und diese Daten an JMP weitergeben, kann ein Modell erstellt werden, das die Anzahl der Autos in den anderen Bildern vorhersagt, wenn Sie die Position und die Verteilung der Pixel in den Bildern angeben.
Ich habe jedes Bild in 5 Pixel hohe horizontale Streifen unterteilt, wie in der (beschnittenen) Kopie unterhalb des obigen Bildes ungefähr dargestellt ist.

Nachdem ich das Durchschnittsbild davon abgezogen hatte, zählte ich die Anzahl der Pixel mit einer Intensität von mehr als 60 in jedem Streifen in jedem Pixel. Ich hätte gleich ein Modell passen können; Da ich jedoch versuchte, die Anzahl der Autos anhand der Pixelanzahl in jedem Streifen zu erklären, gab es ungefähr 30 erklärende Variablen - eine für jeden Streifen. Ich hätte einen gebraucht Menge von Bildern, um das Modell zu erstellen, was nicht viele übrig geblieben wäre.
Um dies zu beheben, extrahierte ich Hauptkomponenten. Hauptkomponenten sind Linearkombinationen der ursprünglichen 30 erklärenden Variablen, die so berechnet werden, dass die erste Hauptkomponente die größte Variation in den Daten und die 30. die geringste Variation erklärt. Es stellt sich heraus, dass die elf Hauptkomponenten mehr als 95% der Abweichung erklären. Durch die Modellierung basierend auf den Hauptkomponenten anstelle der Rohdaten reduzierte ich die Anzahl der erklärenden Variablen auf etwa ein Drittel der ursprünglichen Werte und behielt dabei immer noch 95% der Informationen bei.
Ich habe Autos in einer zufällig ausgewählten Auswahl von 120 Bildern (ich hatte mehr als 600, also nur einen kleinen Teil davon) von Hand gezählt und diese Zahlen zusammen mit den Pixelzahlen an JMPs Fit Model-Plattform weitergeleitet. JMP hatte ein Modell, mit dem ich eine Tabelle der berechneten Anzahl von Autos nach Zeit erstellt habe. Diese Daten habe ich dann für Donnerstagnachmittag und Freitag grafisch dargestellt. Mit einem dazu passenden Spline sieht das Diagramm folgendermaßen aus:

Diese Grafik zeigt tatsächlich die von mir erwarteten Verkehrsmuster. Um den Morgen- und Abendverkehr sowie um die Mittagszeit ist ein erheblicher Verkehrsanstieg zu verzeichnen.
Douglas M Okamoto (Daten zu Informationen zu Wissen) schrieb:
Ich möchte dem aufstrebenden technischen SAS-Studenten von SAS zu seiner Entwicklung eines Datenassoziations-Trackingsystems zur Ermittlung des Fahrzeugverkehrs in und um Raleigh, NC, über die JMP-Plattform gratulieren.
Drei Fragen, wenn ich darf.
Q1. Wie sieht es mit dem systematischen Erfassen von Bildern aus, die alle 15 Minuten aufgenommen wurden? 30 Stunden Webcam-Videoüberwachung mit alle drei Minuten aktualisierten Bildern ergeben insgesamt 600 Bilder. Eine systematische Auswahl von 120 Bildern sollte repräsentativer sein als eine Stichprobe gleicher Größe.
Q2. War die vergrößerte Perspektive eine der 30 merkwürdigen erklärenden Variablen, aus denen elf Hauptkomponenten kombiniert wurden? Im abgeschnittenen und segmentierten Bild sind Fahrzeuge in den Vordergrundsegmenten stärker pixeliert als im Hintergrund.
Q3. Ist der Ausreißer mit 16 Wagen gegen 13:00 Uhr aufgrund von Leuten, die nach dem Mittagessen im Davis Family Bar-BQ in Morrisville wieder zur Arbeit eilen?
Referenz
Verkehrsministerium der Vereinigten Staaten, Verkehrsdetektorhandbuch: Dritte Ausgabe, Band I, Veröffentlichungsnr. FHWA-HRT-06-108 (Oktober 2006)
â ¢ http://www.tfhrc.gov/its/pubs/06108/06108.pdf
Aki schrieb:
Hey, Greg!
Sehr interessant! Ein schöner Bericht.
Als ich mir die Handlung am Ende ansah, dachte ich, dass, wenn Sie während der Hauptverkehrszeit zu oft zählen, die gleichen Autos einige Minuten später in einiger Entfernung noch auf dem Bild stehen würden. Sie müssen also vorsichtig sein, wie Sie die Daten "addieren" (was Sie in diesem Bericht nicht tun) ... Zu erkennen, dass das gleiche Auto im vorherigen Bild noch weiter oben liegt, ist ein ziemlich schwieriges Problem, würde ich vermuten ... Sie können auch die Spur wechseln, so dass Sie nicht einfach einen Cluster von ihnen erkennen, skalieren können ...
Nun, aber vielleicht klappen diese Probleme einfach von selbst, wenn Sie eine große Datenmenge automatisch sammeln. Vielleicht gibt es bei der Erfassung realer Daten kein Problem.
Zu sagen, für welche praktische Anwendung die Technologie eingesetzt werden kann, würde den Bericht noch interessanter machen. (Wie automatische Verkehrsflussberichte oder Kapazitätsanalysen oder was auch immer ...)
Jedenfalls habe ich Ihren Bericht mit Interesse gelesen. Danke dir!
Aki.
Liang Liem schrieb:
Interessant. Wenn es Nacht ist und die Straßenbeleuchtung eingeschaltet ist, würde es trotzdem funktionieren.
> Zu sagen, wie praktisch die Technologie ist
Vielleicht kann es zum Dimmen von Straßenlaternen verwendet werden. Wenn die Lichtintensität bei niedriger Verkehrsintensität niedrig ist, die Verkehrsintensität jedoch ansteigt, kann auch die Lichtintensität erhöht werden.
In manchen Straßen kann es überhaupt keine Autos geben, es sei denn, es passiert eine kurze Zeit, wenn eine Autofähre ankommt oder ein Hockeyspiel endet. Wenn wir feststellen könnten, dass die Anzahl der Fahrzeuge einen Schwellenwert überschreitet, könnten diese Informationen an einen Server gesendet werden, der dann entsprechend Befehle an verschiedene Dimmersteuerungen entlang der Straße sendet.
Grüße
Liang