1 puntos por GN⁺ 2025-08-24 | Aún no hay comentarios. | Compartir por WhatsApp
  • Las cámaras line-scan son muy adecuadas para fotografiar sujetos en movimiento, como trenes, con alta resolución y sin distorsión
  • El procesamiento de imágenes requiere diversos algoritmos y técnicas, como detección de regiones de interés, estimación de velocidad y remuestreo
  • Las tareas de mejora de calidad, como la eliminación de franjas horizontales y verticales y la supresión de ruido, son importantes
  • La implementación incluye manejo de grandes volúmenes de datos, uso de Python, numpy y varias mejoras experimentales
  • Comparar con casos de fotografía line-scan de otros autores puede aportar ideas adicionales

Resumen de la cámara line-scan

  • Una cámara line-scan escanea imágenes a muy alta velocidad usando una sola línea de píxeles (o dos líneas)
  • La cámara permanece fija, y el tren pasa frente a ella mientras se registra su forma completa
  • El fondo estático se repite en todas las columnas verticales de la imagen, produciendo un efecto de franjas característico
  • Este método permite capturar fotografías de alta resolución sin distorsión a lo largo de toda la longitud del tren, por lo que también es útil para hobbies como el modelismo ferroviario
  • Las cámaras strip basadas en película funcionan con un principio similar, pero se diferencian en que, por cuestiones de sensibilidad, hay que ajustar manualmente la velocidad de la película

Equipo de cámara

  • Se usa el modelo [Alkeria Necta N4K2-7C], con un sensor de imagen de arreglo Bayer dual de 4096×2
  • Los datos originales se guardan como arreglos binarios de 16 bits
  • Las capturas se realizaron en diversos entornos, incluidos metros urbanos

Detección de región de interés (ROI)

  • En escaneos largos se genera una gran cantidad de datos de fondo, por lo que es indispensable un algoritmo de detección automática de secciones con objetos en movimiento
  • Se combinan una función de energía (basada en gradiente) y el valor máximo de píxel, entre otros, para distinguir estructuras verticales (movimiento) de estructuras horizontales (fondo)
  • La imagen se divide en varios bloques, y se calcula una puntuación usando la energía en el percentil 99 de cada bloque
  • Los bloques cuya puntuación es al menos 1.5 veces mayor que la mínima se consideran regiones que contienen objetos en movimiento
  • Los métodos anteriores no lograban generalizar bien; el método actual funciona de manera más eficiente en situaciones diversas

Estimación de velocidad

  • Cuando el sujeto está en movimiento, si falla la estimación de velocidad la imagen se estira o se comprime, generando distorsión
  • Se compara la información de los dos canales verdes (Green) de la cámara para calcular la velocidad de movimiento en cada bloque
  • Para cada bloque se aplican pequeños desplazamientos de -7 a +7 y luego se calcula la suma de diferencias absolutas entre ambos canales para generar un cost array
  • Para encontrar el pico subpixel se usa una interpolación estilo [mean shift] basada en gaussianas, y se corrige la variación total con un spline
  • Los valores extraídos del spline representan el intervalo entre muestras en la serie temporal original, y se usan para corregir la distorsión de la imagen

Remuestreo

  • Se calculan posiciones de muestreo según el spline para extraer una nueva imagen
  • Se consideran casos excepcionales, como invertir horizontalmente cuando el spline es negativo o tratar como error cuando está cerca de 0
  • En cada posición de muestreo también se guarda información del ancho de muestra, y se mejora el antialiasing con funciones de windowing adecuadas, como la ventana de Hann
  • Elegir columnas de forma simple o usar una ventana rectangular no es adecuado, porque al hacer upsampling aparecen artefactos ásperos

Demosaicing

  • Se necesita un demosaicing personalizado, como interpolación bilineal, que tenga en cuenta el desplazamiento espacial del arreglo Bayer de 2 columnas
  • Después de la estimación de velocidad, se corrigen efectos como el fringing mediante interpolación lineal
  • Dado que existen diferencias entre los datos de los dos canales verdes, podría haber margen para lograr una reconstrucción full-color mejor que con un arreglo Bayer convencional

Eliminación de franjas verticales

  • Se producen franjas verticales en la imagen debido a jitter de reloj (stripes) y cambios de brillo del sujeto
  • Las franjas se corrigen con una función de ajuste por columna que usa regresión lineal y pesos gaussianos (iteratively reweighted least squares)
  • Estas funciones de corrección forman una estructura de grupo matemático, y para evitar drift al acumular correcciones se considera resolver un sistema lineal de banda diagonal
  • En la práctica también es posible suprimir ruido de alta frecuencia con filtros como el suavizado exponencial
  • La corrección de franjas debe realizarse necesariamente antes de la estimación de velocidad

Supresión de ruido

  • Se aplica una técnica de control de ruido basada en parches (block matching), aprovechando activamente las texturas repetitivas de la superficie del tren
  • Se usan vectores de características de parches de 3×3 píxeles, y se reduce el ruido mediante promedios ponderados dentro de parches similares
  • Si antes de comparar se preprocesa según una distribución de Poisson (transformación raíz) de acuerdo con la intensidad de señal, el rendimiento mejora
  • Las técnicas existentes de total variation denoising no son adecuadas porque pierden demasiada textura
  • Esta técnica tiene la limitación de requerir mucho cómputo y ser lenta

Corrección de inclinación (skew)

  • Si la cámara no está vertical, toda la imagen aparece ligeramente torcida
  • La detección del skew debe hacerse después de la estimación de velocidad y antes del remuestreo final, para minimizar la pérdida de información
  • Es posible detectarlo automáticamente con la transformada de Hough y métodos similares basados en estructuras verticales

Corrección de color

  • Actualmente se ajusta el color con una matriz de corrección manual
  • Aun así, en la práctica la calidad es bastante buena, incluso en tonos de piel naturales

Detalles de implementación

  • Todo el pipeline está implementado en Python y numpy
  • Como el tamaño de los datos es grande (4096 filas × cientos de miles de columnas), se adoptó un procesamiento por bloques y por etapas para superar problemas de memoria insuficiente
  • Como no es viable asignar toda la memoria de una sola vez, en cada etapa se procesan y almacenan partes de los datos

Experiencia de implementación

  • Se intentó introducir herramientas de IA para implementar el código, pero los resultados fueron limitados
  • Con frecuencia la IA generaba código ineficiente, por ejemplo convirtiendo problemas lineales en complejidad temporal cuadrática innecesaria
  • También aparecían problemas de memoria, como la creación innecesaria de máscaras completas al procesar arreglos grandes
  • En cambio, la IA sí puede ayudar a hacer más eficiente parte del trabajo, como ciertas APIs, la estructuración del código y la visualización con Matplotlib

Casos de fotos de trenes line-scan de otras personas

Adam Magyar

  • [Adam Magyar] realizó los proyectos "Stainless" y "Urban Flow" con su propia cámara line-scan en blanco y negro
  • Ha logrado resultados muy limpios incluso en entornos de baja iluminación, como interiores de metro
  • Es necesario elegir cuidadosamente la ubicación de captura para evitar el flicker de la iluminación del metro

Blog KR64

  • [kr64.seesaa.net] publica una gran cantidad de fotografías line-scan de trenes diversos de todo Japón
  • Se estima que están hechas con una cámara slit-scan de película, y muestran una variedad y calidad muy altas
  • El sitio suele caerse por problemas técnicos y no ha sido posible contactar a sus responsables

Aún no hay comentarios.

Aún no hay comentarios.