У этой камеры одна строка пикселей — вторую координату дал поезд
Обычная камера получает плоскость кадра сразу: матрица видит высоту и ширину сцены одновременно. У линейной камеры есть только один ряд фотодиодов. Ей приходится ждать, пока объект либо сама камера проедет мимо строки. Именно этот принцип Philomena Gray превратила в дорожную фотокамеру: промышленный Basler ruL2048-19gm смотрит через боковое окно, а поезд, паром или автомобиль постепенно рисует изображение в направлении движения.
Опубликованный кадр с парома между Сан-Франциско и Оклендом имеет 56 894 × 2 048 пикселей. Его ширину даёт линейный монохромный CCD, длину — последовательность строк, захваченных за поездку. Такой метод знаком спутниковой съёмке push-broom: спутник летит над Землёй, и линия сенсора последовательно сканирует полосу поверхности. Здесь та же геометрия развернулась на 90 градусов, а носителем сенсора стала железнодорожная сеть.
В рабочем режиме установка записывала около 4 000 строк в секунду. Камера передавала их по Gigabit Ethernet на ноутбук; к ней через переходник Pentax K—C-mount подключён объектив Vivitar 28 mm f/2.8. Внутри ruL2048-19gm стоит 2 048-пиксельный CCD с пикселем 10 × 10 мкм и 12-битным АЦП. Паспорт допускает до 18.7 кстрок/с, но для этой истории существенна достигнутая полевая частота: поток строк успевает сделать движение транспорта непрерывной пространственной осью.
Самая трудная часть начинается после захвата. Равные интервалы между строками должны соответствовать равным отрезкам пути, иначе дома и деревья растягиваются или сжимаются. Шестикоординатный IMU, GPS и SAMD21 дают оценку движения. Скорость восстанавливается интегрированием ускорения, поэтому ошибка начальной скорости и шум IMU постепенно уводят масштаб. GPS обновлялся примерно 10 раз в секунду либо вовсе пропадал; при 4 000 строках/с один его отсчёт приходится примерно на 400 строк изображения.
И даже идеальная оценка скорости не сделает такую панораму геометрически правильной. Ближний столб пролетает перед строкой быстрее далёкого здания: параллакс заставляет разные планы требовать разного масштаба по оси маршрута. Автор выбирает начальную скорость и параметр distance per pixel для отдельных сегментов вручную, затем сшивает их. Вибрация, повороты, изменение скорости и перспектива здесь записываются прямо в форму изображения, словно камера превратилась в измеритель траектории собственного носителя.
Поэтому результат ценен не только необычной панорамой. Линейный сенсор обычно ассоциируется с инспекцией рулонных материалов, сортировкой и промышленным конвейером, где движение стабильно и известно. Проект переносит эту камеру в непредсказуемый мир поездов и паромов. Вместо энкодера конвейера приходится собирать цепочку из инерциальной навигации, оптики, ручной геометрической коррекции и быстрого сетевого захвата. Исходники захвата и постобработки опубликованы; репозиторий grindstone доступен по лицензии MIT.
У этой идеи есть особенно красивый предок. В 2011 году японский инженер Elm-Chan собрал переносную line-scan камеру вокруг одномерного CCD: пиксель был размером 14 × 14 мкм, а сенсор работал с частотой 500–2000 строк/с. Для фокусировки камера показывала не только яркость вдоль строки, но и модуль её производной — максимум высокочастотной составляющей отмечал резкость. Отдельный waterfall-режим помогал подобрать line rate под скорость движения. Свежий железнодорожный проект меняет масштаб и добавляет IMU с GPS, но физика та же: одна координата приходит от CCD, вторую буквально приносит движение.