<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Математик среди биологов: заметки с тегом анализ траекторий движения</title>
<link>https://antonlyakh.ru/blog/tags/analiz-traektoriy-dvizheniya/</link>
<description>Я немного умею складывать, но от вычитания у меня всегда кружится голова</description>
<author>Антон Лях</author>
<language>ru</language>
<generator>E2 (v3559; Aegea)</generator>

<itunes:owner>
<itunes:name>Антон Лях</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Я немного умею складывать, но от вычитания у меня всегда кружится голова</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Написал скрипт для бинаризации видео движения микроорганизмов</title>
<guid isPermaLink="false">468</guid>
<link>https://antonlyakh.ru/blog/all/napisal-skript-binarizacii-video-dvizheniya-microorganismov/</link>
<pubDate>Sun, 28 May 2023 15:49:31 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/napisal-skript-binarizacii-video-dvizheniya-microorganismov/</comments>
<description>
&lt;div style="width:400px; overflow:hidden; display:inline-block;"&gt;&lt;p&gt;&lt;video autoplay="" loop="" style="position: relative; left:-120px"&gt;&lt;source src="https://antonlyakh.ru/done/mov2bin/i/dsc_0945--clr-640.mp4" type="video/mp4"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="width:400px; overflow:hidden; display:inline-block;"&gt;&lt;p&gt;&lt;video autoplay="" loop="" style="position: relative; left:-120px"&gt;&lt;source src="https://antonlyakh.ru/done/mov2bin/i/dsc_0945--bw-640.mp4" type="video/mp4"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Траектории движения микроорганизмов — легко доступный источник данных об их реакции на внешние условия. Траектории изучают по видеозаписям, которые обрабатывают специализированные программы трекинга.&lt;/p&gt;
&lt;p&gt;К сожалению наши видео получаются низкоконтастными, поэтому программы трекинга не могут корректно выделить подвижные объекты.&lt;/p&gt;
&lt;p&gt;По этой причине я написал скрипт, который переводит видео в черно-белый (бинарный) формат, что существенно улучшает заметность подвижных объектов.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href="https://antonlyakh.ru/done/mov2bin/"&gt;Узнать больше и скачать скрипт&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Провал первой попытки прослеживания путей перемещения протист</title>
<guid isPermaLink="false">466</guid>
<link>https://antonlyakh.ru/blog/all/proval-pervoy-popytki-proslezhivaniya-putey-peremescheniya-proti/</link>
<pubDate>Fri, 10 Mar 2023 20:50:45 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/proval-pervoy-popytki-proslezhivaniya-putey-peremescheniya-proti/</comments>
<description>
&lt;p&gt;&lt;i&gt;Профессор Плейшнер шел по улице. Проходя мимо явочной квартиры, он мельком взглянул на окно. Занавеска была отодвинута. На подоконнике стояло семнадцать утюгов и один цветок. «Явка провалена», — понял Плейшнер.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Это третья, аналитическая заметка из &lt;a href="https://antonlyakh.ru/blog/all/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist/"&gt;серии об анализе траектории движения протист&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://antonlyakh.ru/blog/all/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na/"&gt;В первой заметке&lt;/a&gt; объяснил, как с помощью ffmpeg осветлить видео снятое на фотоаппарат,  соединенный с микроскопом.&lt;/p&gt;
&lt;p&gt;Здесь рассказываю, что полученное видео не подошло для прослеживания траекторий, нужно дальше работать над его качеством и, хоть немного, разобраться в методах анализа изображений и прослеживания траекторий.&lt;/p&gt;
&lt;p&gt;Напомню, что видео необходимо для построения траекторий движения микроорганизмов.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Для решения задачи использую Трекмейт (&lt;a href="https://imagej.net/plugins/trackmate/"&gt;TrackMate&lt;/a&gt;).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/trackmate-logo.png" width="402" height="236" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Трекмейт — это плагин к Фи-джи (Fiji), который предназначен для прослеживания, визуализации, редактирования и анализа траекторий движения объектов, снятых на видео. Интерфейс Трекмейта состоит из последовательности диалоговых окон, в которых необходимо выбрать алгоритмы обработки видеоизображений и указать параметры этих алгоритмов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/trackmate-ui-s.png" width="1026" height="553" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;big&gt;Мои попытки научить Трекмейт проследить траектории микроорганизмов провалились.&lt;/big&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Так вышло потому, что Трекмейт неверно выделил объекты предустановленными методами, то есть неверно выполнил &lt;i&gt;сегментацию изображений.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Пробовал &lt;i&gt;пороговую сегментацию&lt;/i&gt; (tresholding detector) и &lt;i&gt;методы сегментации по инвариантным точкам&lt;/i&gt; (invariant feature detectors): LoG (Laplassian of Gaussian, Лапласиан Гаусиана :), DoG (differences of Gaussians, разница Гаусианов), Hessian (детектор Гессе).&lt;/p&gt;
&lt;p&gt;Пороговая сегментация нашла всего один объект, а алгоритмы сегментации по инвариантным точкам приняли за объект каждое пятнышко.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/hessian-detect-every-spot.png" width="819" height="566" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Детектор Гессе приметил каждое пятнышко&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Другие доступные методы сегментации не попробовал.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Далее взял результаты сегментации изображения детектором Гессе и, путем интуитивно-случайного подбора параметров (не записал их значения), оставил выделенными только нужные организмы и несколько мусорных пятен.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/hessian-detector-optimized.png" width="1000" height="476" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Однако их траектории проследить не удалось.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/found-tracks.png" width="1000" height="476" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Трекинг построил слишком короткие пути и не все относятся к протистам.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/too-many-tracks.png" width="1000" height="476" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Много коротких, частично некорректных треков — это провал&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Cделал следующие выводы:&lt;/b&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Необходимо хотя бы в общих чертах понимать, как работают алгоритмы сегментации и трекинга, как на них влияют параметры и когда их стоит применять, а когда нет.&lt;/li&gt;
&lt;li&gt;Качество видеоизображений следует еще более улучшить: повысить контраст между подвижными организмами и статичным фоном, фон сгладить или вообще удалить.&lt;/li&gt;
&lt;li&gt;Желательно автоматически создать маску, на которой организмы будут отмечены цветом, а фон будет белым.&lt;/li&gt;
&lt;li&gt;Следует попробовать иные способы сегментации или другие программы выделения треков.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Об этом расскажу в другой раз.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Всем прочитавшим — Лаплассиана Гауссинана :)&lt;/p&gt;
</description>
</item>

<item>
<title>Комбинируем кадры движения протист в многослойные тифы</title>
<guid isPermaLink="false">465</guid>
<link>https://antonlyakh.ru/blog/all/kombiniruem-kadry-dvizheniya-protist-v-mnogosloynye-tify/</link>
<pubDate>Fri, 24 Feb 2023 22:59:48 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/kombiniruem-kadry-dvizheniya-protist-v-mnogosloynye-tify/</comments>
<description>
&lt;p&gt;В первой заметке рассказал, &lt;a href="/blog/all/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na/"&gt;как улучшить качество видео и нарезать его на кадры&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Это вторая техническая заметка из &lt;a href="/blog/all/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist/"&gt;серии об анализе траектории движения протист&lt;/a&gt;. В ней поговорим, как объединить кадры видео в пакеты по сто кадров и сохранить их в многослойных &lt;abbr&gt;тифах&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;Напомню, что шаманю над видео по двум причинам: из-за скрипта для выделения траекторий, который плохо понимает видеоформаты, но отлично работает с &lt;abbr&gt;тифами&lt;/abbr&gt;, а также из-за небольшой оперативки, которой не хватает для обработки тяжелых &lt;abbr&gt;тифов&lt;/abbr&gt;. Поэтому приходится их резать.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;big&gt;В конце заметки приведена ссылка на скрипт, который преобразует &lt;abbr&gt;mov&lt;/abbr&gt; в многослойные &lt;abbr&gt;tif&lt;abbr&gt;&lt;/big&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;Последовательность действий&lt;/h3&gt;
&lt;p&gt;Буду использовать &lt;abbr&gt;&lt;a href="https://imagemagick.org/"&gt;ИмеджМаджик&lt;/a&gt;&lt;/abbr&gt; и &lt;a href="https://ss64.com/nt/"&gt;батч-скрипт Виндоус&lt;/a&gt;. (Вместо последнего можно взять &lt;abbr&gt;Поверскрипт&lt;/abbr&gt;, для Линукса — &lt;abbr&gt;баш&lt;/abbr&gt;, но это вы уже сами :).&lt;/p&gt;
&lt;p&gt;Скрипт разделяет &lt;abbr&gt;тифы&lt;/abbr&gt; на группы: 1...100, 100...200, 200...300, ... и объединяет файлы из каждой группы  в многослойный &lt;abbr&gt;тиф&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;Последний &lt;abbr&gt;тиф&lt;/abbr&gt; группы совпадает с первым &lt;abbr&gt;тифов&lt;/abbr&gt; седующей группы: 1...100≡100...200≡200... Так сделано для того, чтобы потом программа смогла правильно соединить кусочки траекторий, выделенные в группах, в целые траектории.&lt;/p&gt;
&lt;h4&gt;Инициализируем вспомогательные переменные&lt;/h4&gt;
&lt;p&gt;Итак, мы получили серию &lt;abbr&gt;тифов&lt;/abbr&gt;, каждый из которых хранит один кадр. &lt;abbr&gt;Тифы&lt;/abbr&gt; лежат в отдельном каталоге и шаблонно пронумерованы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;kbd&gt;frame_0001.tif, frame_0002.tif, frame_0003.tiff, ...&lt;/kbd&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Укажем в батч-скрипте название каталога, префикс &lt;abbr&gt;тиф&lt;/abbr&gt;-файлов и префикс многослойных &lt;abbr&gt;тифов&lt;/abbr&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;rem Инициализируем вспомогательные переменные
:initialization
    set tif_file_prefix=frame_
    set group_file_prefix=merged_
    set tifs_dir=tifs&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;Посчитаем число тифов&lt;/h4&gt;
&lt;p&gt;Мы не знаем, сколько файлов у нас есть. Поэтому воспользуемся &lt;a href="https://superuser.com/a/1530244/521108"&gt;советом&lt;/a&gt; и напишем скрипт:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;rem Считает число тифов в заданном каталоге
:calc-tifs-number
    cd %tifs_dir%
    dir *.tif /A:-D /B 2&amp;gt;nul | find /c /v &amp;quot;&amp;quot; &amp;gt; tmp
    set /p tifs_numb=&amp;lt;tmp
    set /a tifs_numb+=0
    del tmp
    cd ..&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Скрипт переходит в каталог с тифами, записанном в переменной &lt;kbd&gt;tifs_dir&lt;/kbd&gt;, считает число тифов и запоминает его в файле &lt;kbd&gt;tmp&lt;/kbd&gt;, загружает значение из этого файла в переменную &lt;kbd&gt;tifs_numb&lt;/kbd&gt; и удаляет &lt;kbd&gt;tmp&lt;/kbd&gt;-файл.&lt;/p&gt;
&lt;p&gt;Подсчет и сохранение числа в файл выполняет команда&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;dir *.tif /A:-D /B 2&amp;gt;nul | find /c /v &amp;quot;&amp;quot; &amp;gt; tmp&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где опция&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;kbd&gt;*.tif&lt;/kbd&gt; выбирает только &lt;abbr&gt;тиф&lt;/abbr&gt;-файлы;&lt;br /&gt;
&lt;kbd&gt;/A:-D&lt;/kbd&gt; убирает из подсчета каталоги и оставляет только файлы;&lt;br /&gt;
&lt;kbd&gt;/B&lt;/kbd&gt; выводит только названия файлов;&lt;br /&gt;
&lt;kbd&gt;2&gt;nul&lt;/kbd&gt; не выводит строки с ошибками;&lt;br /&gt;
&lt;kbd&gt;|&lt;/kbd&gt; передает полученный список файлов следующей команде;&lt;br /&gt;
&lt;kbd&gt;find /c /v &amp;quot;&amp;quot;&lt;/kbd&gt; считает число строк в списке файлов;&lt;br /&gt;
&lt;kbd&gt;&gt; tmp&lt;/kbd&gt; запоминает полученное число в файл &lt;kbd&gt;tmp&lt;/kbd&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Прочие команды скрипта очевидны.&lt;/p&gt;
&lt;h4&gt;Вычисляем количество групп файлов и число файлов в последней группе&lt;/h4&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;set /a num_groups=1+(%tifs_numb%-1)/100
set /a numb_in_last_group=(%tifs_numb%)%%100&lt;/code&gt;&lt;/pre&gt;&lt;h4&gt;Объединяем тифы каждой группы в один многослойный тиф&lt;/h4&gt;
&lt;p&gt;В &lt;abbr&gt;Имеджмаджик&lt;/abbr&gt; есть утилита &lt;kbd&gt;convert&lt;/kbd&gt;, которая с ключом &lt;kbd&gt;-adjoin&lt;/kbd&gt; объединяет &lt;abbr&gt;тифы&lt;/abbr&gt; в один многослойный.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;kbd&gt;convert 0001.tif 0002.tif ... 100.tif -adjoin merged_1-100.tif &lt;/kbd&gt;&lt;br /&gt;
&lt;kbd&gt;convert 0100.tif 0101.tif ... 200.tif -adjoin merged_100-200.tif &lt;/kbd&gt;&lt;br /&gt;
...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Параметрами команды служат названия файлов. В первой группе у нас сто тифов, во всех остальных, кроме последней, сто один тиф, в последней — оставшиеся файлы.&lt;/p&gt;
&lt;p&gt;Для формирования cписка файлов используем цикл, после завершения которого все &lt;abbr&gt;тифы&lt;/abbr&gt; будут объединены в многослоные &lt;abbr&gt;тифы&lt;/abbr&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;set /a file_index=0
set /a group_index=0

cd %tifs_dir%
    rem Пробегаем по каждой группе
    for /l %%G in (1,1,%num_groups%) do call :loop_groups %%G
cd ..

echo All tifs have been merged into multilayered tifs
pause

goto :eof&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Цикл вызывает подпрограмму &lt;kbd&gt;:loop_groups&lt;/kbd&gt;, где и происходит слияние. Подпрограмма принимает номер группы, вычисляет для нее номера первого и последнего файла, формирует список файлов с этими номерами и, в итоге, объединяет их в многослойный &lt;abbr&gt;тиф&lt;/abbr&gt;.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;
:loop_groups

rem Определям начальный и конечный номер файла в группе
set /a start_index=group_index*100

if %1 EQU %num_groups% (
    rem Это последняя группа
    set /a finish_index=start_index+%numb_in_last_group%
) else (
    rem Это не последняя группа
    set /a finish_index=start_index+100
)

if %start_index% EQU 0 set /a start_index=1


rem Формируем список файлов.
rem Для этого перебираем номера файлов от start_index до finish_index
rem и конструируем название файла с каждым номером в пп loop_files
set file_list=
for /l %%H in (%start_index%,1,%finish_index%) do call :loop_files %%H


rem Задаем имя результирующего многослойного тифа
set merged_file=%group_file_prefix%_%start_index%-%finish_index%.tif


rem Конвертируем
convert %file_list% -adjoin %merged_file%


rem Переходим к следующей группе
set /a group_index=group_index+1

goto :eof
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Сам список файлов поэлементно строится в подпрограмме &lt;kbd&gt;:loop_files&lt;/kbd&gt;. Она принимает номер файла, дополняет его нулями, добавляет к нему префикс и помещает в конец списка (строки).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;:loop_files
rem Добавляет ведущие нули к индексу файла
set &amp;quot;file_index=0000%1&amp;quot;
set &amp;quot;file_index=%file_index:~-4%&amp;quot;

rem Дополняет файл префиксом
set file_name=%tif_file_prefix%_%file_index%.tif

rem Добавляет название файла в конец списка
set &amp;quot;file_list=%file_list%%file_name% &amp;quot;
	
goto :eof&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;Итоговый скрипт&lt;/h3&gt;
&lt;p&gt;Готовый батч-скрипт пробразует &lt;abbr&gt;mov&lt;/abbr&gt; в многослойные &lt;abbr&gt;tiff&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;Он использует код из двух заметок и:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;спрашивает название &lt;abbr&gt;мув&lt;/abbr&gt;-файла с видео;&lt;/li&gt;
&lt;li&gt;спрашивает, нужно ли осветлить видео;&lt;/li&gt;
&lt;li&gt;спрашивает название каталога, куда следует поместить многослойные тифы;&lt;/li&gt;
&lt;li&gt;спрашивает, нужно ли удалить тифы с отдельными кадрами после завершения работы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="display:inline-block; background-color:#40BA9B; padding:8px 12px; border-radius:2px"&gt;&lt;a href="/download/?mov-to-tifs" style="color:#fff; font-weight:bold"&gt;Скачать скрипт mov-to-tifs&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:cadetblue"&gt;Скрипт распространяется бесплатно, как есть и может быть запущен на любом количестве машин. Вы соглашаетесь с ипользованием скрипта на свой страх и риск. Автор скрипта не несет ответственности ни за какие сбои, неверную работу, удаление или изменение пользовательских данных.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Для работы скрипта необходимо установить &lt;a href="https://imagemagick.org/"&gt;ImageMagick&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Вопросы, связанные с функционирование скрипта, задавайте в комментариях.&lt;/p&gt;
</description>
</item>

<item>
<title>Улучшаем качество видео движения протист и нарезаем его на кадры</title>
<guid isPermaLink="false">464</guid>
<link>https://antonlyakh.ru/blog/all/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na/</link>
<pubDate>Wed, 22 Feb 2023 19:43:22 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na/</comments>
<description>
&lt;p&gt;Это заметка из &lt;a href="https://antonlyakh.ru/blog/all/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist/"&gt;серии об анализе траектории движения протист&lt;/a&gt;. В ней поговорим, как улучшить качество видео и нарезать его на кадры.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Для фиксации движения протист используем фотоаппарат, соединенный с микроскопом. Несмотря на сильный свет, наш фотоаппарат снимает темное видео с низким контрастом.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/some-frames.png" width="1000" height="333" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Темное низкоконтрастное видео&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Поэтому интересующие нас простейшие незначительно отличаются от фона.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/frame__0001.png" width="800" height="450" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Кадр исходного видео&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Если в графическом редакторе автоматически улучшить контраст, получится хорошо.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/frame__0001----contrast-enhance-example.png" width="799" height="450" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Автоматическое осветление&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Если подправить гистограмму, тоже выйдет неплохо.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/frame__0001----hist-adjustmen-example.png" width="800" height="449" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Коррекция гистограммы улучшает заметность живых объектов и грязи на стекле; грязь мешает, но она неподвижна, поэтому после прослеживания траекторий, мы ее уберем&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Очевидно, что использовать графический редактор для исправления всех кадров — нереально. Поэтому нагрузим работой компьютер: улучшим видео с помощью &lt;a href="https://ffmpeg.org/"&gt;FFmpeg&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Улучшаем видео с помощью ffmpeg&lt;/h3&gt;
&lt;p&gt;Фотоаппарат записыват видео в формате &lt;kbd&gt;mov&lt;/kbd&gt; (мув). &lt;kbd&gt;FFmpeg&lt;/kbd&gt; осветлит его и покадрово сохранит в заданном каталоге.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Осветляем видео&lt;/b&gt;&lt;br /&gt;
Следующая команда читает исходный видеофайл &lt;kbd&gt;input.mov&lt;/kbd&gt; и исправляет гистограмму каждого кадра так, чтобы черная точка сдвинулась до 64 (0,25~64/255), а белая — до 120 (0,47~120/255).&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ffmpeg -i input.mov 
-vf &amp;quot;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&amp;quot;
output.avi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Опция &lt;kbd&gt;-vf&lt;/kbd&gt; говорит, что мы применяем фильтры, влияющие на качество изображения.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Фильтр &lt;kbd&gt;monochrome&lt;/kbd&gt; делает видео черно-белым.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Фильтр &lt;kbd&gt;colorlevels&lt;/kbd&gt; выполняет коррекцию гистограммы. Его параметры:
&lt;ul&gt;
  &lt;li&gt;&lt;kbd&gt;r|g|b|omin&lt;/kbd&gt; задают уровень красной, зеленой и синей компоненты минимальной (черной) точки,&lt;/li&gt;
  &lt;li&gt;&lt;kbd&gt;r|g|b|imax&lt;/kbd&gt; соответственно максимальной (белой);&lt;/li&gt;
  &lt;li&gt;значения компонент лежат в диапазоне [0; 1], что соответствует уровням [0; 255].&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Фильтр &lt;kbd&gt;smartblur&lt;/kbd&gt; немного шарпит границы — делает их более резкими.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Команда записывает результат в файл &lt;kbd&gt;output.avi&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;Чтобы фильтры обработали видео, выходной файл должен иметь иной формат, отличный от &lt;abbr&gt;мув&lt;/abbr&gt;. В данном случае — это &lt;abbr&gt;avi&lt;/abbr&gt;. Однако при конвертации в &lt;abbr&gt;ави&lt;/abbr&gt; качество обработанного видео ухудшается. Поэтому поступим по иному.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Запишем каждый кадр обработанного видео в отдельный файл&lt;/b&gt;&lt;br /&gt;
Для этого заменим последнюю срочку команды на следующую:&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Она сохранит каждый кадр обработанного видео в сжатом тиф-файле (&lt;kbd&gt;-compression_algo lzw -pix_fmt rgb24&lt;/kbd&gt;) в каталоге &lt;kbd&gt;enhanced&lt;/kbd&gt;. Тифы получат префикс &lt;kbd&gt;frame_&lt;/kbd&gt; и будут пронумерованы четырехзначным номером с ведущими нулями (&lt;kbd&gt;%04d&lt;/kbd&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;kbd&gt;frame_0001.tif, frame_0002.tif, frame_0003.tif, ...&lt;kbd&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вся команда выглядит так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ffmpeg -i input.mov 
-vf &amp;quot;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&amp;quot;
-compression_algo lzw -pix_fmt rgb24 enhanced/frame_%04d.tif&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Результат радует.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/some-frames_enhanced.png" width="1000" height="340" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Осветленные кадры видео&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="800" data-ratio="1.7777777777778"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/frame__0001-enhanced.png" width="800" height="450" alt="" /&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/frame__0001.png" width="800" height="450" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Резюме&lt;/h3&gt;
&lt;p&gt;Чтобы осветлить видео и покадрово сохранить его в заданном каталоге, используйте приведенную команду &lt;kbd&gt;ffmpeg&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;В дальнейшем тифы понадобятся для формирования многослойных тифов, которые будут использованы для выделения треков протист.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;На сегодня все.&lt;/p&gt;
</description>
</item>

<item>
<title>Серия заметок об анализе траекторий движения протист</title>
<guid isPermaLink="false">463</guid>
<link>https://antonlyakh.ru/blog/all/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist/</link>
<pubDate>Wed, 22 Feb 2023 18:18:28 +0300</pubDate>
<author>Антон Лях</author>
<comments>https://antonlyakh.ru/blog/all/seriya-zametok-ob-analize-traektoriy-dvizheniya-protist/</comments>
<description>
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p class="foot"&gt;Последнее обновление &lt;i&gt;5 янв. 2024 года&lt;/i&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://antonlyakh.ru/blog/pictures/intro-pict.png" width="800" height="639" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Планирую выпустить серию заметок про обработку видео с подвижными живыми микрообъектами. Мы хотим понять, как двигаются одноклеточные организмы (протисты) определенного вида при разных условиях, меняется ли что-то в их движении и что именно. Это наша задача.&lt;/p&gt;
&lt;p&gt;&lt;big&gt;&lt;i&gt;Задача:&lt;/i&gt; определить, что меняется в движении протист при разных условиях&lt;/big&gt;&lt;/p&gt;
&lt;p&gt;Решение задачи состоит из нескольких шагов: подготовки культуры, съемки видео, обработки видео, выделения траекторий движения, анализа траекторий, общего анализа результатов, интерпретации, выводов.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h3&gt;Оглавление серии&lt;/h3&gt;
&lt;p&gt;Ниже приведен список шагов, оформленный в виде оглавления, и даны ссылки на готовые заметки с подробным описанием каждого шага. Шаги предварительные, они будут появляться и, иногда, исчезать. О том, как выращивать и поддерживать культуры одноклеточных и как снимать видео через микроскоп рассказывать не буду.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Оглавление, введение, софт. &lt;nobr style="color: silver"&gt;&amp;larr; Вы здесь&lt;/nobr&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Готовим видео&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/blog/all/uluchshaem-kachestvo-video-dvizheniya-protist-i-narezaem-ego-na//"&gt;Улучшаем качество и нарезаем видео на кадры&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="/blog/all/kombiniruem-kadry-dvizheniya-protist-v-mnogosloynye-tify/"&gt;Комбинируем кадры в многослойные тифы&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="/blog/all/proval-pervoy-popytki-proslezhivaniya-putey-peremescheniya-proti/"&gt;Провал попытки прослеживания перемещения протист&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="/done/mov2bin/"&gt;mov2bin — скрипт для бинаризации видео движения микроорганизмов&lt;/a&gt;.&lt;br /&gt;
&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Обрабатываем видео&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: gray"&gt;Выделяем траектории.&lt;/span&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: gray"&gt;Анализируем траектории.&lt;/span&gt;&lt;br /&gt;
&lt;br/&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Серию заметок выпускаю прежде всего для себя, чтобы не забыть, что, как и когда делать. Также она будет полезна тем читателям, кто планирует или выполняет похожие эксперименты.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h3&gt;Немного о рутине&lt;/h3&gt;
&lt;p&gt;Обычно для выполнения рутинной работы берется (один) аспирант или инженер, который своим (еще не растраченным) упорством добивает этот этап до более-менее приемлемого результата. В худшем случае рутиной занимаются сами идеологи или один из них, который, впоследствии, еще и отхватывает пинков за ошибки. (О времена, о нравы!) Я же, по возможности, буду автоматизировать рутинные этапы, заставляя потеть машину.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h3&gt;Необходимый софт&lt;/h3&gt;
&lt;p&gt;Для автоматизации рутины использую:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strike&gt;&lt;a href="https://ss64.com/nt/"&gt;Пакетный файл Виндоус&lt;/a&gt; (батч-файл, bat-файл)&lt;/strike&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://habr.com/ru/articles/47163/"&gt;Баш (bash) Юникса&lt;/a&gt; для исполнения алгоритмов обработки видео и изображений;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ffmpeg.org/"&gt;FFmpeg&lt;/a&gt; для автоматической работы с видео;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://imagemagick.org"&gt;ImageMagick&lt;/a&gt; для автоматической обработки изображений кадров;&lt;/li&gt;
&lt;li&gt;&lt;strike&gt;&lt;a href="https://imagej.net/software/fiji/"&gt;Fiji&lt;/a&gt; для построения траекторий.&lt;/strike&gt;&lt;/li&gt;
&lt;li&gt;&lt;kbd&gt;Эр&lt;/kbd&gt; для выделения объектов на кадрах и построения траекторий движения объектов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Заметил, что многие естествоиспытатели просто не умеют нагружать компьютер работой. Одну из заметок посвящу инструментам автоматизации, облегчающим научную жизнь.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Занесите заметку в закладки, чтобы не потерять.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
</description>
</item>


</channel>
</rss>