Улучшаем качество видео движения протист и нарезаем его на кадры
Это заметка из серии об анализе траектории движения протист. В ней поговорим, как улучшить качество видео и нарезать его на кадры.
Для фиксации движения протист используем фотоаппарат, соединенный с микроскопом. Несмотря на сильный свет, наш фотоаппарат снимает темное видео с низким контрастом.

Поэтому интересующие нас простейшие незначительно отличаются от фона.

Если в графическом редакторе автоматически улучшить контраст, получится хорошо.

Если подправить гистограмму, тоже выйдет неплохо.

Очевидно, что использовать графический редактор для исправления всех кадров — нереально. Поэтому нагрузим работой компьютер: улучшим видео с помощью FFmpeg.
Улучшаем видео с помощью ffmpeg
Фотоаппарат записыват видео в формате mov (мув). FFmpeg осветлит его и покадрово сохранит в заданном каталоге.
Осветляем видео
Следующая команда читает исходный видеофайл input.mov и исправляет гистограмму каждого кадра так, чтобы черная точка сдвинулась до 64 (0,25~64/255), а белая — до 120 (0,47~120/255).
ffmpeg -i input.mov
-vf "monochrome ,
colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,
smartblur=2.0:-0.7:-3.5:0.65:0.25:2.0"
output.avi
Опция -vf говорит, что мы применяем фильтры, влияющие на качество изображения.
- Фильтр monochrome делает видео черно-белым.
- Фильтр colorlevels выполняет коррекцию гистограммы. Его параметры:
- r|g|b|omin задают уровень красной, зеленой и синей компоненты минимальной (черной) точки,
- r|g|b|imax соответственно максимальной (белой);
- значения компонент лежат в диапазоне [0; 1], что соответствует уровням [0; 255].
- Фильтр smartblur немного шарпит границы — делает их более резкими.
Команда записывает результат в файл output.avi.
Чтобы фильтры обработали видео, выходной файл должен иметь иной формат, отличный от мув. В данном случае — это avi. Однако при конвертации в ави качество обработанного видео ухудшается. Поэтому поступим по иному.
Запишем каждый кадр обработанного видео в отдельный файл
Для этого заменим последнюю срочку команды на следующую:
-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif
Она сохранит каждый кадр обработанного видео в сжатом тиф-файле (-compression_algo lzw -pix_fmt rgb24) в каталоге enhanced. Тифы получат префикс frame_ и будут пронумерованы четырехзначным номером с ведущими нулями (%04d):
- frame_0001.tif, frame_0002.tif, frame_0003.tif, ....
Вся команда выглядит так:
ffmpeg -i input.mov
-vf "monochrome ,
colorlevels=romin=0.25:rimax=0.47:gomin=0.25:gimax=0.47:bomin=0.25:bimax=0.47 ,
smartblur=1.5:-0.35:-3.5:0.65:0.25:2.0"
-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif
Результат радует.



Резюме
Чтобы осветлить видео и покадрово сохранить его в заданном каталоге, используйте приведенную команду ffmpeg.
В дальнейшем тифы понадобятся для формирования многослойных тифов, которые будут использованы для выделения треков протист.
На сегодня все.