
Рассматривать предметный образец под микроскопом — всё равно что пытаться увидеть концертный зал через замочную скважину: в поле зрения попадает только небольшой фрагмент, а общей картины не видно.
Поэтому предметное стекло постепенно перемещают под камерой, а система записывает видео и собирает отдельные кадры в одно большое изображение, которое можно сохранить и использовать для исследования.
Сделать это простым наложением кадров нельзя: во время движения они могут смазываться, освещение меняется, а похожие участки легко перепутать.
Мы с коллегами сравнили несколько подходов к совмещению соседних кадров. Один подход лучше учитывал сложное движение, а другой быстрее обрабатывал кадры, но не учитывал вращение. Но обо всём по порядку.
Задача
Заказчику нужен был инструмент, который позволяет сканировать предметное стекло с помощью камеры микроскопа и получать цельное изображение всей исследуемой области.
Целевой сценарий выглядел так:
-
пользователь подключает камеру микроскопа или использует мобильное устройство;
-
перемещает образец под камерой и видит, какие участки уже отсканированы;
-
после завершения сохраняет изображение всей исследуемой области в нужном формате.
Главная задача заключалась в том, чтобы собрать единое изображение из видеопотока и подготовить его для дальнейшего анализа и исследовательской работы.
Ранее похожий функционал был доступен в приложении из App Store. После его удаления заказчик решил разработать собственное решение. Проект мы реализовали в составе команды Singularis.

Почему кадры нельзя было просто склеить
На первый взгляд задача напоминает сборку панорамы: нужно найти общие области на соседних кадрах, определить их взаимное положение и соединить в одно изображение. Но при работе с микроскопическим видео условия заметно сложнее.
Некоторые области почти не содержат выраженных деталей, по которым можно определить смещение. Камера видит только небольшой участок образца. Во время движения кадры могут смазываться, освещение меняется, а разные фрагменты изображения оказываются похожими друг на друга.
Итоговое изображение получается очень большим. При разработке нужно было учитывать расход памяти, стабильность обработки и особенности форматов хранения.
Система должна была работать не с заранее подготовленными фотографиями, а с реальным видеопотоком, в котором качество кадров, скорость движения и освещение меняются прямо во время съёмки.
Решение
Это скрипт, который получает видеопоток с камеры микроскопа и по мере перемещения образца собирает отдельные кадры в одно большое изображение:
-
анализирует кадры из видеопотока;
-
определяет их взаимное положение;
-
восстанавливает траекторию движения камеры относительно образца;
-
размещает кадры на единой рабочей плоскости;
-
уменьшает видимость швов между фрагментами;
-
выравнивает различия в яркости и цветопередаче;
-
сохраняет готовое изображение в форматах GeoTIFF и DICOM.
В результате из неупорядоченного видео получается цельное изображение всей отсканированной области.
Какие подходы проверили
Во многих CV-задачах изображения совмещают с помощью ключевых точек. Алгоритм ищет характерные детали на соседних кадрах, сопоставляет их и на основе найденных совпадений вычисляет смещение.
Для микроскопических изображений этот подход оказался недостаточно надёжным. В кадре могло быть мало устойчивых ориентиров, а разные участки образца иногда выглядели слишком похожими. Из-за ошибочных совпадений кадры размещались неправильно, и итоговое изображение собиралось с искажениями.
Поэтому мы проверили два альтернативных подхода к оценке движения между соседними кадрами.
Оптический поток
Оптический поток лучше подходил для более сложного движения и потенциально позволял учитывать вращение образца. На наших данных он работал примерно на 40 FPS, но оказался чувствительным к размытию.
Когда пользователь перемещал образец слишком быстро и кадр терял резкость, точность определения движения снижалась.
Фазовая корреляция
Фазовая корреляция быстрее оценивала сдвиг кадра и могла работать до 200 FPS. При этом она могла определять только смещение кадра без учёта вращения.
Для выбранного сценария это ограничение было приемлемым: важнее было быстро и устойчиво определять смещение между кадрами.
По величине корреляционного отклика система могла оценивать надёжность найденного смещения. Это помогало выявлять сильно размытые кадры и не использовать их при построении траектории.
Как решали проблему швов
При соединении кадров соседние фрагменты должны были выглядеть как единое изображение.
Если просто наложить кадры друг на друга, становятся заметны границы, перепады яркости и участки с разной резкостью.
Стандартное смешивание изображений сглаживало переходы, но давало нежелательный эффект: итоговое изображение становилось более размытым. Для микроскопии это критично, поскольку вместе со швами могут исчезнуть полезные детали образца.
Поэтому мы выбрали использовать преимущественно пиксели из центральных областей кадров.
Центральная часть кадра обычно меньше страдает от оптических искажений, потемнения по краям и снижения резкости. Это помогло уменьшить видимость швов без дополнительного размытия итогового изображения.

Также нам нужно было учитывать накопление ошибок. Если размещать каждый следующий кадр только относительно предыдущего, небольшие неточности постепенно складываются и становятся заметны на большом изображении.
Поэтому система одновременно уточняла положение всех кадров, чтобы небольшие ошибки не накапливались по мере движения по образцу.
Отдельно мы экспериментировали с обработкой дефокуса и устранением размытия, но эти решения не вошли в финальную версию.
Как выравнивали цвет
Яркость и цветопередача могли меняться при съемке. Соседние участки итогового изображения выглядели неодинаково: одна область становилась светлее, другая — темнее, а на некоторых участках менялся оттенок.
Мы добавили цветокоррекцию, чтобы сделать итоговое изображение визуально более равномерным. Алгоритм анализировал различия между соседними областями и корректировал цветовые сдвиги.
Это помогало уменьшить перепады на границах и получить более цельное изображение. Для исследовательского сценария это важно: итоговый файл должен быть удобен не только для хранения, но и для последующего просмотра и анализа.

Результат и ограничения
В результате заказчик получил скрипт, который собирает цельное изображение микроскопического образца из видеопотока.
Система обрабатывает кадры с камеры микроскопа, определяет их положение, строит и сохраняет траекторию движения, размещает фрагменты на единой рабочей плоскости, уменьшает видимость швов и выравнивает цвет между участками. Готовое изображение можно сохранить в форматах GeoTIFF и DICOM.
Основное ограничение выбранного подхода заключается в том, что фазовая корреляция рассчитана на поступательное движение и не учитывает вращение образца. Для целевого сценария заказчика это ограничение было допустимым.
Выводы
-
В прикладных узкопрофильных задачах недостаточно взять готовый алгоритм и применить его к данным. Всегда при выборе решения нужно учитывать качество видеопотока, особенности движения камеры, схожесть фрагментов, слабую контрастность, оптические искажения, ограничения по памяти и требования к формату результата.
-
Выбор между оптическим потоком и фазовой корреляцией зависит от задачи: один метод лучше работает со сложным движением, другой — быстрее. Точная скорость при этом зависит от размера изображения, мощности процессора и других условий.
-
Где применимо? Не только в микроскопии, но и в медицине, промышленной инспекции, лабораторных исследованиях, робототехнике и других задачах, где большое изображение или карта собираются из отдельных кадров.
ссылка на оригинал статьи https://habr.com/ru/articles/1067168/