- A câmera line scan é muito adequada para fotografar objetos em movimento, como trens, em alta resolução e sem distorção
- O processamento de imagem exige vários algoritmos e técnicas, como detecção de região de interesse, estimativa de velocidade e reamostragem
- Trabalhos de melhoria de qualidade, como remoção de faixas horizontais e verticais e supressão de ruído, são importantes
- A implementação inclui processamento de grandes volumes de dados, uso de Python, numpy e várias melhorias experimentais
- Comparar com exemplos de fotos line scan de outros autores pode trazer insights adicionais
Visão geral da câmera line scan
- A câmera line scan varre a imagem em velocidade muito alta com uma linha (ou duas linhas) de pixels
- A câmera fica fixa, e o trem passa diante dela enquanto sua forma completa é registrada
- O fundo estático se repete em todas as colunas verticais da imagem, produzindo o efeito característico de faixas
- Esse método permite fotografar imagens de alta resolução sem distorção ao longo de todo o comprimento do trem, sendo útil também para hobbies como modelismo ferroviário
- Câmeras de tira baseadas em filme funcionam com princípio semelhante, mas diferem por exigir ajuste manual da velocidade do filme devido a problemas de sensibilidade
Equipamento de câmera
- É usado o modelo [Alkeria Necta N4K2-7C], com sensor de imagem de arranjo Bayer duplo de 4096×2
- Os dados brutos são armazenados como arranjos binários de 16 bits
- As capturas foram feitas em vários ambientes, como metrôs urbanos
Detecção de região de interesse (ROI)
- Como varreduras longas geram grande volume de dados de fundo, um algoritmo de detecção automática de trechos com objetos em movimento é indispensável
- Para distinguir estruturas verticais (movimento) de estruturas horizontais (fundo), combinam-se função de energia (baseada em gradiente) e valor máximo de pixel
- A imagem é dividida em vários chunks, e a pontuação é calculada pela energia no percentil 99 de cada chunk
- Chunks com pontuação 1,5 vez maior que a mínima são considerados áreas contendo objetos em movimento
- Métodos anteriores falharam em generalizar; o método atual funciona de forma mais eficiente em situações variadas
Estimativa de velocidade
- Quando o objeto está em movimento, falhas na estimativa de velocidade causam distorções em que a imagem fica esticada ou comprimida
- A velocidade de movimento de cada chunk é calculada comparando os dois canais verdes (Green) da câmera
- Para cada chunk, aplicam-se pequenos deslocamentos de -7 a +7 e calcula-se a soma das diferenças absolutas entre os dois canais para gerar um cost array
- Para encontrar o pico subpixel, usa-se uma interpolação no estilo [mean shift] baseada em Gaussiana, e uma spline corrige a variação total
- Os valores extraídos da spline representam o intervalo entre amostras na série temporal original e são usados para corrigir a distorção da imagem
Reamostragem
- Novas imagens são extraídas calculando as posições de amostragem de acordo com a spline
- Também são considerados casos excepcionais, como inversão horizontal quando a spline é negativa e erro quando ela fica próxima de 0
- Para cada posição de amostragem, também se armazena a largura da amostra, melhorando o antialiasing com funções de janela adequadas, como a janela de Hann
- Seleção simples de colunas ou janela retangular não são adequadas, pois geram artefatos grosseiros em upsampling
Demosaicing
- É necessário um demosaicing customizado com interpolação bilinear, levando em conta o deslocamento espacial do arranjo Bayer de 2 colunas
- Após a estimativa de velocidade, a interpolação linear é usada para corrigir efeitos como fringing
- Como há diferença entre os dados dos dois canais verdes, pode haver margem para reconstrução full-color melhor do que em um arranjo Bayer comum
Remoção de faixas verticais
- Jitter de clock (stripes) e variações no brilho do objeto causam faixas verticais na imagem
- As faixas são corrigidas com uma função de correção por coluna usando regressão linear e pesos gaussianos (
iteratively reweighted least squares)
- Essas funções de correção formam uma estrutura de grupo matemático; para evitar drift ao acumular correções, considera-se uma solução de sistema linear band-diagonal
- Na prática, também é possível suprimir ruído de alta frequência com métodos como filtro de suavização exponencial
- A correção das faixas deve ser feita obrigatoriamente antes da estimativa de velocidade
Supressão de ruído
- É aplicada uma técnica de controle de ruído baseada em patches (block matching), aproveitando ativamente as texturas repetitivas da superfície do trem
- Usa-se o vetor de características de cada patch de 3×3 pixels, reduzindo o ruído por média ponderada entre patches semelhantes
- O desempenho melhora ao pré-processar com distribuição de Poisson (transformação por raiz) conforme a intensidade do sinal antes da comparação
- A técnica tradicional de total variation denoising não é adequada, pois perde muita textura
- Este método tem a limitação de exigir muito processamento e ser lento
Correção de inclinação (skew)
- Se a câmera não estiver perfeitamente vertical, ocorre um leve desalinhamento em toda a imagem
- A detecção de skew deve ser feita após a estimativa de velocidade e antes da reamostragem final, para minimizar perda de informação
- A detecção automática pode ser feita com transformada de Hough e outras técnicas baseadas em estruturas verticais
Correção de cor
- Atualmente, o ajuste de cor é feito com uma matriz de correção manual
- Na prática, a qualidade é bastante boa, inclusive em tons de pele naturais
Detalhes de implementação
- Todo o pipeline foi implementado em Python e numpy
- Como o volume de dados é grande (4096 linhas × centenas de milhares de colunas), adotou-se um processamento em chunks por etapas para superar problemas de falta de memória
- Como a alocação total de memória de uma vez seria impraticável, os dados são processados e salvos parcialmente em cada etapa
Experiência de implementação
- Foi tentado o uso de ferramentas de IA para implementar o código, mas os resultados foram limitados
- Em muitos casos, a IA gera código ineficiente, como transformar problemas lineares em complexidade de tempo quadrática sem necessidade
- Também surgem problemas de memória em processamento de arrays grandes, como geração desnecessária de máscaras completas
- Por outro lado, alguns pontos como certas APIs, estruturação de código e visualização (Matplotlib) podem ser agilizados com ajuda de IA
Exemplos de fotos de trens line scan de outras pessoas
Adam Magyar
- [Adam Magyar] realizou os projetos "Stainless" e "Urban Flow" com uma câmera line scan própria em preto e branco
- Ele já produziu resultados muito limpos mesmo em ambientes de baixa luminosidade, como metrôs internos
- É necessário escolher bem o ponto de captura para evitar o flicker da iluminação do metrô
Blog KR64
- O [kr64.seesaa.net] publica uma grande quantidade de fotos line scan de trens variados por todo o Japão
- Aparentemente, usa uma câmera slit-scan em filme, com altíssima variedade e qualidade
- O site frequentemente fica fora do ar por problemas técnicos, e não é possível entrar em contato
Ainda não há comentários.