Esta entrada de blog fue escrita por un blogger que ya no está en SAS
Soy un adulto mayor en el Escuela de Ciencias y Matemáticas de Carolina del Norte . Durante este verano, trabajé como estudiante técnico de verano en SAS.
Mientras JMP 8 no tiene soporte de manipulación de imágenes, permite al usuario crear una DLL personalizada que puede ser invocada desde JSL. Así que creé una DLL que permitía llamar desde JSL algunas funciones de ImageMagick, una biblioteca de imágenes de código abierto.
Usando este DLL, traté de contar los autos en las fotos de algunas de las cámaras web del Departamento de Transporte de Carolina del Norte. Aquí hay una imagen de la que está cerca de la Salida 289 de la Interestatal 40, en el área de Raleigh:

Desafortunadamente, las partes más distantes de la carretera son difíciles de ver porque todo se confunde. Así que no miré esa parte. Lo recorté.
Para facilitar los cálculos posteriores, también convertí las imágenes a escala de grises, por lo que solo tuve que trabajar con una sola intensidad para cada píxel, en lugar de tres canales de color.
La imagen entonces se veía así:

Para contar los autos, necesitaba saber qué partes de las fotos eran autos. Como las Webcams se actualizan cada 3 minutos, tuve muchas otras fotos con las que comparar cada una. Entonces, para cada imagen que analicé, miré las 10 imágenes anteriores y las 10 fotografías posteriores y promedié las 20 juntas. El resultado fue bastante cercano a una imagen de la carretera sin automóviles, como se puede ver:

Esta imagen me dijo que partes de la imagen que estaba viendo no eran autos. Al restarlo de la imagen que estaba analizando, obtuve una buena imagen de qué partes eran autos:

En este punto, es bastante fácil, incluso desde un guión, decir qué partes de la imagen son autos. Las regiones grises son coches; Las regiones oscuras no lo son. Hubo algunas regiones que eran de color gris oscuro, donde no estaba claro si debían considerarse autos o no. Descubrí que lo que parecía funcionar mejor para ellos era considerar las áreas donde la intensidad del color era menos de 60 como fondo, y las áreas donde la intensidad era 60 o más para los autos. Con este tipo de filtro aplicado, la imagen se ve así:

Luego tuve una colección de (x, y) coordenadas de píxeles que compusieron varios autos. Dado que los píxeles de un solo automóvil deberían estar más cerca unos de otros que los de otros automóviles, traté de usar la herramienta de análisis de clusters de JMP para dividir estos puntos en grupos. Idealmente, cada grupo representaría un automóvil. Aquí está la misma imagen con cada grupo dado su propio color:

Como puede ver, parece haber hecho un buen trabajo en esta foto. Pero como la herramienta de análisis de clusters de JMP necesita una serie de clústeres antes de poder realizar el análisis, no es la mejor herramienta para el conteo automatizado. Es por eso que tantos píxeles individuales parecen ser sus propios grupos; JMP los divide en la cantidad predeterminada de grupos, 20, cuando solo hay 8 autos en la imagen.
Debido a que la herramienta de análisis de clusters de JMP no es la mejor herramienta para este trabajo, terminé usando una diferente. Una vez que tenga en cuenta el hecho de que los automóviles más distantes parecen más pequeños, la mayoría de los automóviles son de tamaños similares. Por lo tanto, volviendo al paso en blanco y negro, pude contar píxeles blancos (asegurándome de tener en cuenta las distancias de los autos desde la cámara) para obtener una aproximación del número de autos en la imagen.
Por esta época también decidí cambiar de webcam. El problema con este fue que se movía mucho, lo que impedía que funcionara el promedio. Aquí hay cuatro fotos consecutivas de ella:




Estos cuatro son un poco más extremos que la mayoría, pero entiendes la idea. Después de mirar, encontré una cámara web diferente que no se movía. Aquí hay una foto de ella:

Dado que el tamaño de un automóvil varía con la coordenada y de forma predecible y lineal, es posible ajustarlo usando cálculos relativamente simples. Desafortunadamente, hacer esto requiere identificar cuatro puntos (dos a cada lado de la carretera), y comunicar esos cuatro puntos a un guión es bastante complicado.
Hay una manera más fácil. JMP tiene una plataforma de modelado. Si cuenta los autos en algunas de las imágenes a mano y le da esos datos a JMP, puede crear un modelo que prediga la cantidad de autos en las otras imágenes, dada la ubicación y distribución de los píxeles en ellas.
Dividí cada imagen en franjas horizontales de 5 píxeles de alto, como se muestra aproximadamente en la copia (recortada) de la imagen de abajo.

Después de restarle la imagen promedio, conté el número de píxeles con una intensidad superior a 60 en cada franja de cada píxel. Podría haber encajado un modelo en ese momento; pero como estaba tratando de explicar el número de autos según el número de píxeles en cada banda, había aproximadamente 30 variables explicativas, una para cada banda. Habría necesitado un mucho de imágenes para crear el modelo, que no habría dejado muchas para usarlo.
Para arreglar esto, extraje los componentes principales. Los componentes principales son combinaciones lineales de las 30 variables explicativas originales calculadas de tal manera que el primer componente principal explica la mayor variación en los datos y la 30 la menor variación. Resulta que los 11 componentes principales principales explicaron más del 95% de la variación. Entonces, al modelar en base a los componentes principales en lugar de los datos en bruto, reduje el número de variables explicativas a aproximadamente un tercio de lo que era, mientras que aún conservaba el 95% de la información.
Conté a mano los autos en una selección de 120 imágenes elegidas al azar (tenía más de 600, así que esto era solo una pequeña parte de ellas) e ingresé esos números, junto con los recuentos de píxeles, a la plataforma Fit Model de JMP. A JMP se le ocurrió un modelo que usé para crear una tabla con el número calculado de autos por tiempo. Luego graficé esos datos para el jueves por la tarde y el viernes. Con un ajuste de spline, el gráfico se ve así:

Este gráfico muestra los patrones de tráfico que esperaba. Hay un aumento significativo en el tráfico alrededor de las horas pico de la mañana y la tarde, así como a la hora del almuerzo.
Douglas M Okamoto (Datos a Información a Conocimiento) escribió:
Deseo felicitar al estudiante emprendedor de verano técnico de SAS por su desarrollo de un sistema de seguimiento de asociación de datos para identificar el tráfico vehicular en Raleigh, NC y sus alrededores, utilizando la plataforma JMP.
Tres preguntas, si me lo permiten.
Q1. ¿Qué pasa con el muestreo sistemático de fotografías tomadas cada 15 minutos? Treinta horas de cámara web de videovigilancia con imágenes actualizadas cada tres minutos proporciona 600 imágenes en total. Una muestra sistemática de 120 imágenes debe ser más representativa que una muestra aleatoria del mismo tamaño.
Q2. ¿Se incrementó la perspectiva una de las 30 variables explicativas impares a partir de las cuales se combinaron 11 componentes principales? En la imagen recortada y segmentada, los vehículos en los segmentos de primer plano están más pixelados que los de los de fondo.
Q3. ¿Es el caso de 16 autos fuera de lugar alrededor de la 1:00 PM debido a que la gente regresa rápidamente al trabajo después del almuerzo en el Davis Family Bar-BQ en Morrisville?
Referencia
Departamento de Transporte de los EE. UU., Manual del detector de tráfico: Tercera edición, Volumen I, No. de publicación FHWA-HRT-06-108 (octubre de 2006)
â ¢ http://www.tfhrc.gov/its/pubs/06108/06108.pdf
aki escribió:
Hey greg
¡Bastante interesante! Un buen informe.
Al mirar la trama al final, pensaba que si contabas con demasiada frecuencia durante la hora punta, los mismos autos todavía estarían en la imagen unos minutos más tarde, en cierta distancia. Por lo tanto, debe tener cuidado con la forma en que "suma" los datos (lo que no hace en este informe) ... Reconocer que el mismo auto en la imagen anterior todavía está allá arriba es un problema bastante difícil, supongo ... También pueden cambiar de carril, por lo que no puede simplemente reconocer un grupo de ellos, volver a escalar ...
Bueno, pero tal vez esos problemas solo se resuelvan por sí mismos cuando recopila una gran cantidad de datos automáticamente, así que tal vez no haya un problema real en la recopilación de datos reales ...
Decir para qué uso práctico se puede implementar la tecnología ayudaría a que el informe sea aún más interesante. (Como informes de flujo de tráfico automático, análisis de capacidad, o lo que sea ...)
De todos modos, leí su informe con interés. ¡gracias!
aki
Liang liem escribió:
Interesante. Si es de noche y las luces de la calle están encendidas, todavía funcionaría.
> Decir qué usos prácticos tiene la tecnología.
Tal vez se pueda utilizar para atenuar las farolas. Si la intensidad del tráfico es baja, el nivel de luz puede ser bajo, pero si la intensidad del tráfico aumenta, el nivel de iluminación también puede aumentar.
En alguna calle no puede haber autos, excepto algunos períodos cortos en los que algo sucede como si llegara un transbordador de automóviles o terminara un partido de hockey. Si pudiéramos detectar que la cantidad de automóviles supera los umbrales, dicha información podría enviarse a un servidor que luego envía comandos a diferentes controladores de atenuación a lo largo de la calle.
Saludos
Liang