Questo post sul blog è stato scritto da un blogger che non è più in SAS
Sono un anziano in aumento al Scuola di scienza e matematica del North Carolina . Durante questa estate, ho lavorato come studente estivo tecnico presso SAS.
Mentre JMP 8 non ha il supporto per la manipolazione delle immagini, ma consente all'utente di creare una DLL personalizzata che può essere invocata da JSL. Così ho creato una DLL che consentiva ad alcune funzioni di ImageMagick, una libreria di immagini open source, di essere chiamate da JSL.
Usando questa DLL, ho provato a contare le auto nelle foto di alcune delle Webcams del Dipartimento del Nord Carolina del trasporto. Ecco un'immagine da quella vicino all'uscita 289 dall'Interstate 40, nell'area di Raleigh:

Sfortunatamente, le parti più distanti della strada sono difficili da vedere perché tutto sfuma insieme. Quindi non ho guardato quella parte. L'ho ritagliato.
Per semplificare i calcoli successivi, ho anche convertito le immagini in scala di grigi, quindi ho dovuto lavorare con una sola intensità per ciascun pixel, anziché tre canali di colore.
L'immagine è quindi simile a questa:

Per contare le macchine, avevo bisogno di sapere quali parti delle immagini erano automobili. Dal momento che le webcam si aggiornano ogni 3 minuti, ho avuto molte altre immagini con cui confrontarle. Quindi, per ogni immagine, ho analizzato, ho guardato le 10 immagini prima e le 10 immagini dopo di essa e una media di 20 di loro insieme. Il risultato è stato abbastanza vicino a una foto della strada senza auto, come puoi vedere:

Questa immagine mi ha detto quali parti dell'immagine che stavo guardando non erano automobili. Sottrandolo dall'immagine che stavo analizzando, ho ottenuto una bella immagine di quali parti erano le auto:

A questo punto, è abbastanza facile, anche da una sceneggiatura, dire quali parti dell'immagine sono automobili. Le regioni grigie sono auto; le regioni oscure non lo sono. C'erano alcune regioni che erano grigio scuro, dove non era chiaro se dovessero essere considerate auto o meno. Ho scoperto che quello che sembrava funzionare meglio per loro era considerare le aree in cui l'intensità del colore era inferiore a 60 per essere di sfondo, e le aree in cui l'intensità era di 60 o più per essere auto. Con questo tipo di filtro applicato, l'immagine appare così:

Ho quindi avuto una raccolta di (x, y) coordinate di pixel che componevano diverse macchine. Poiché i pixel di una singola auto dovrebbero essere più vicini tra loro rispetto a quelli di altre auto, ho provato a utilizzare lo strumento di analisi cluster di JMP per suddividere questi punti in cluster. Idealmente, ogni gruppo rappresenterebbe una macchina. Ecco la stessa immagine con ogni cluster dato il suo colore:

Come puoi vedere, sembra aver fatto un buon lavoro su questa immagine. Ma poiché lo strumento di analisi cluster di JMP necessita di un certo numero di cluster prima di poter eseguire l'analisi, non è lo strumento migliore per il conteggio automatizzato. Ecco perché tanti singoli pixel sembrano essere i loro stessi cluster; JMP li divide nel numero predefinito di cluster, 20, quando ci sono solo 8 auto nella foto.
Poiché lo strumento di analisi del cluster di JMP non è lo strumento migliore per questo lavoro, ho finito per usarne uno diverso. Una volta che si tiene conto del fatto che le auto più distanti sembrano più piccole, la maggior parte delle auto ha dimensioni simili. Pertanto, tornando al passaggio in bianco e nero, potrei contare i pixel bianchi (assicurandoti di tenere conto delle distanze delle macchine dalla fotocamera) per ottenere un'approssimazione del numero di auto nella foto.
In questo periodo ho anche deciso di cambiare webcam. Il problema con questo era che si muoveva molto, impedendo il funzionamento della media. Ecco quattro immagini consecutive da esso:




Questi quattro sono un po 'più estremi di molti, ma tu hai l'idea. Dopo aver guardato, ho trovato una webcam diversa che non si muoveva. Ecco una foto da essa:

Poiché la dimensione di un'auto varia con la coordinata y in modo prevedibile e lineare, è possibile regolarla utilizzando calcoli relativamente semplici. Sfortunatamente, fare ciò richiede l'identificazione di quattro punti (due su ciascun lato della strada) e comunicare questi quattro punti a uno script è piuttosto complicato.
C'è un modo più semplice. JMP ha una piattaforma di modellazione. Se contate le auto in alcune delle immagini a mano e date tali dati a JMP, è possibile creare un modello che preveda il numero di automobili nelle altre immagini, data la posizione e la distribuzione dei pixel in esse.
Ho diviso ciascuna immagine in strisce orizzontali alte 5 pixel, come mostrato approssimativamente nella copia (ritagliata) sotto l'immagine sopra.

Dopo aver sottratto l'immagine media da esso, ho contato il numero di pixel con intensità superiore a 60 in ciascuna striscia in ciascun pixel. Potrei avere un modello adatto in quel momento; ma poiché stavo cercando di spiegare il numero di auto in base al numero di pixel in ciascuna striscia, c'erano circa 30 variabili esplicative, una per ogni striscia. Avrei avuto bisogno di un lotto di immagini per creare il modello, che non avrebbe lasciato molti per utilizzarlo.
Per risolvere questo problema, ho estratto i componenti principali. Le componenti principali sono le combinazioni lineari delle 30 variabili esplicative originali calcolate in modo tale che il primo componente principale spieghi la maggior parte delle variazioni nei dati e il 30 ° la variazione minima. Risulta che i primi 11 componenti principali hanno spiegato più del 95% della variazione. Quindi, modellando sulla base delle componenti principali invece dei dati grezzi, ho ridotto il numero di variabili esplicative a circa un terzo di quello che era, pur mantenendo il 95% delle informazioni.
Ho contato a mano le auto in una selezione a caso di 120 immagini (ne avevo più di 600, quindi questa era solo una piccola parte di esse) e ho alimentato quei numeri, insieme ai conteggi dei pixel, alla piattaforma Fit Model di JMP. JMP ha inventato un modello che ho usato per creare una tabella di numero calcolato di auto in base al tempo. Ho poi tracciato i dati per giovedì pomeriggio e venerdì. Con una spline adattata, il grafico si presenta così:

Questo grafico mostra effettivamente gli schemi di traffico che mi aspettavo. Ci sono aumenti significativi nel traffico intorno alle ore di punta mattutine e serali e all'ora di pranzo.
Douglas M Okamoto (Dati per l'informazione alla conoscenza) ha scritto:
Desidero congratularmi con l'intraprendente studente estivo tecnico SAS per il suo sviluppo di un sistema di tracciamento delle associazioni di dati per identificare il traffico veicolare all'interno e intorno a Raleigh, NC, utilizzando la piattaforma JMP.
Tre domande, se posso.
Q1. Che ne dici di campionare sistematicamente le immagini scattate ogni 15 minuti? Trenta ore di videosorveglianza con webcam aggiornate ogni tre minuti danno complessivamente 600 immagini. Un campione sistematico di 120 immagini dovrebbe essere più rappresentativo di un campione casuale della stessa dimensione.
Q2. Era una prospettiva accresciuta una delle 30 strane variabili esplicative da cui erano stati combinati 11 componenti principali? Nell'immagine ritagliata e segmentata, i veicoli nei segmenti in primo piano sono più pixelati di quelli in quelli di sfondo.
Q3. è l'outlier di 16 auto intorno all'una del pomeriggio a causa di gente che si affretta a tornare al lavoro dopo pranzo al Davis Family Bar-BQ a Morrisville?
Riferimento
US Department of Transportation, Traffic Detector Handbook: Third Edition, Volume I, Publication No. FHWA-HRT-06-108 (ottobre 2006)
â ¢ http://www.tfhrc.gov/its/pubs/06108/06108.pdf
aki ha scritto:
Ehi, Greg!
Molto interessante! Una bella relazione.
Guardando la trama alla fine, stavo pensando che se contate troppo spesso durante l'ora di punta, le stesse macchine sarebbero ancora nella foto pochi minuti dopo in una certa distanza. Quindi dovresti stare attento a come "aggiungi" i dati (che non stai facendo in questo rapporto) .... Riconoscere che la stessa macchina nella foto precedente è ancora più lontana è un problema piuttosto difficile, direi ... Possono anche cambiare corsia, quindi non puoi semplicemente riconoscere un gruppo di essi, ridimensionato ...
Bene, ma forse questi problemi si risolvono automaticamente quando raccogli una grande quantità di dati automaticamente, quindi forse non c'è alcun problema nella raccolta di dati reali ....
Dire che uso pratico può essere implementato la tecnologia contribuirebbe a rendere la relazione ancora più interessante. (Come la segnalazione automatica del flusso di traffico, l'analisi della capacità, o qualsiasi altra cosa ...)
Ad ogni modo, ho letto il tuo rapporto con interesse. grazie!
aki.
Liang Liem ha scritto:
Interessante. Se è notte e i lampioni sono accesi, funzionerebbe ancora.
> Dicendo che uso pratico della tecnologia
Forse può essere usato per offuscare i lampioni. Se il livello di illuminazione a bassa intensità di traffico può essere basso, ma se l'intensità del traffico aumenta, è possibile aumentare anche il livello di luce.
In alcune strade non ci possono essere automobili se non per brevi periodi in cui qualcosa accade come un traghetto per auto arriva o una partita di hockey finisce. se potessimo rilevare che il numero di automobili supera una soglia, allora tali informazioni potrebbero essere inviate a un server che poi invia comandi di conseguenza a diversi controller di oscuramento lungo la strada.
Saluti
Liang