Круиз до Фиджи: разбираемся в софте для обработки изображений (Часть 1)
Автор: Артём Соминов
Редакция: Алиса Скнар
Оформление: Никита Родионов


Предисловие

Во время работы над диссертацией я пришел к научному руководителю для обсуждения дальнейшего курса. Работа шла гладко: литература досконально изучена, срезы готовы, РИФ позади. Дело за малым — анализ полученных на микроскопе снимков и сопоставление результатов с данными литературы. Словом, в кабинет не заходил, а въезжал на коне. Задавай, мол, вопросы, лысый, я готов. Лысый быстро доказал обратное, причем не отрываясь от монитора:
— Fiji владеешь?
— Нет.
— Плохо. А язык программирования какой предпочитаешь: javascript или python?
На этих словах я понял, что попал.
— Ясно. Качай fiji, приходи через неделю с анализом снимков. И коня своего забери.

Спойлер: следующие несколько встреч заканчивались примерно так: «Принес? А почему ты именно так обработал? Что значит такой-то параметр? Разберешься — приходи».

Уже на этом этапе я понял две вещи. Во-первых, программа — улет: функционал огромен и постоянно расширяется за счет open source, и научившись писать рабочие плагины, можно здорово экономить время. Во-вторых, освоение программы — тот ещё кошмар. Поначалу собираешь каждый подводный камень (тут это очень болезненно), мануал по базовым функциям занимает практически 200 страниц, обучающие видео тоже либо слишком базовые, либо, наоборот, чересчур специфичны, и все это, естественно, на английском.

Таким образом и родилась идея этих путевых заметок, в которых я постараюсь скомпенсировать последнее и, в идеале, вооружить читателя новым инструментом для научно-исследовательской работы.

Часть 1. Ориентация на местности

Для начала давайте разберемся, что же такое FIJI? Технически говоря, это open source программное обеспечение для обработки и анализа изображений, идейно — ImageJ на стероидах. И вообще, FIJI — Fiji Is Just ImageJ. Хотя название и утверждает, что «Fiji — просто ImageJ», это большое преуменьшение, поскольку первая включает в себя целую кучу объемных плагинов для биологических наук, многократно расширяющих функционал. Конечно, открытый код позволяет скачать голый ImageJ и поставить сверху только нужные вам плагины, но зачем ограничивать собственный арсенал?

Первым делом скачиваем архив с официального сайта: http://imagej.net/Fiji/Downloads. Там же можно ознакомится с историей разработки приложения, другими сборками, FAQ и видео-туториалы (простой поиск на YouTube).

Разнообразие актуальных open source версий ImageJ. Даже официальный сайт рекомендует сборку Fiji.

Устанавливать Fiji не нужно, достаточно распаковать архив и запустить .exe.
И раз у нас есть минутка, пока программа запускается, сообщаю, что в сообществе ImageJ есть важное правило — не забывать вклад коллег в развитие ПО. Делается это с помощью цитирования в библиографии. При использовании стандартной Fiji следует пользоваться следующей ссылкой: Schindelin, J.; Arganda-Carreras, I. & Frise, E. et al. (2012), "Fiji: an open-source platform for biological-image analysis", Nature methods 9(7): 676-682, PMID 22743772, doi:10.1038/nmeth.2019; если в работе вы использовали дополнительные плагины, следует также ссылаться на них.

Открыв Fiji, видим следующий интерфейс:

Краткий гайд по вкладкам:

  • Файл: тут все стандартно — новый, открыть, сохранить как… Раз уж речь зашла о сохранении, поговорим о форматах. Их Fiji знает очень много, упомяну три основных графических варианта, которые следует знать всем: .tiff, .png, .jpeg. Не буду вдаваться в технические аспекты, объясню доступно. Первый формат — самый тяжеловесный, но и потери информации в нем минимальны, т. к. он не использует никаких технологий сжатия. Рабочие снимки с микроскопов обычно сразу идут именно в этом формате. Советую все рабочие и промежуточные небинарные (где интенсивность не представлена исключительно минимальным и максимально допустимыми для выбранной кодировки – см. ниже) снимки хранить именно в нем, дабы избежать потерь информации при анализе. PNG — промежуточный вариант. Благодаря сжатию такие файлы весят меньше, но сжатие тут щадящее, и большая часть информации сохраняется. Этот формат подойдет для хранения бинарных изображений, и место сэкономите, и ничего не потеряете. Наконец, есть .jpeg — обеспечивает мощное сжатие, но с достоверностью информации можете попрощаться. При этом обращаю внимание на то, что ваше восприятие изображения и хранящаяся там информация — совершенно разные вещи! Визуально никаких потерь не увидеть! Таким образом, .jpeg подойдет исключительно для того, чтобы перевести в него уже проанализированное изображение и вставить в статью, для анализа он непригоден.
  • Правка: тоже ничего недоступного, стандартные «копировать»/ «вставить». И тут кроется, пожалуй, самый коварный, самый, чтоб его, гнусный подводный камень всего семейства ImageJ. Дело в том, что кнопка «Undo» — одна из важнейших кнопок, особенно на первых порах, когда нет готовых алгоритмов работы, тут особенная. В среднем половину действий в программе отменить нельзя. От слова совсем. Если вы запороли изображение – извольте начинать сначала. Но даже если отменить удалось, максимальное количество откатов — один шаг! Словом, это кромешный мрак и ужас. Для начала запомните, что отменять нельзя повторный выбор порогового значения (если вы сразу задали значение и закрыли окно — можно, если после первого значения без закрытия окна выбрать другое и нажать «Применить» — это необратимо) и результат функции «яркость/контраст». Да, я уже упомянул, что даже неудачное действие считается за шаг? Пример: изменили кодировку с 8-bit RGB на 8-bit greyscale. Этот шаг отменить можно. Если после этого попробовать перевести файл обратно, программа начнет ругаться, что так нельзя, и в этом она права. Не права она в том, что после этой неудачной попытки отменить изначальное конвертирование тоже станет невозможно. К счастью, есть надежный способ борьбы с этим. И расположен он в следующей вкладке…
  • Изображение: одна из трех основных вкладок, собравшая в себе необходимые для работы с цветом, пороговыми значениями и стопками изображений инструменты. Продолжая предыдущий пункт, сразу запоминаем комбинацию клавиш Ctrl+Shift+D — «Duplicate», создание копии открытого изображения. Чем раньше начнете вырабатывать привычку прожимать заветные клавиши после каждого шага, тем меньше горьких слез эти самые клавиши замочат. В процессе поиска подходящих значений советую дублировать промежуточные файлы по несколько раз, желательно с сохранением одного из них. И, да, готовьтесь видеть полный трей открытых изображений…
    Раньше я уже ссылался на кодировку — «битность» изображений, теперь поговорим о ней подробнее. Минимально различимая единица на изображении — пиксель или воксель (трехмерный брат пикселя, актуально для Z-стопок и 3D-реконструкций в рамках программы). Каждому из них присваивается определенное значение интенсивности, зависящее от «битности» изображения. Так, для 8-битных изображений это значение находится в диапазоне 0–255, а для 16-битных уже 0–65535. Выбрать кодировку можно при помощи вкладки «Type». Какую «битность» выбрать? Зависит от того, насколько вам важна глубина цвета. Для абсолютного большинства исследований подойдет 8-битная кодировка. Об остальных стоит задуматься только в случаях, когда вы пытаетесь разделить «вон тот зелененький от вот этого зелененького, а они одинаковые».Также здесь в подпункте «Adjust» расположились такие важные функции, как «Brightness/contrast» («яркость и контраст») и «Threshold» («пороговое значение», определение верхней и нижней границ допустимых значений; назвал бы «выборка», но тут нет варианта исключить значения между границами, поэтому будет некорректно). Анализировать изображение можно только после выполнения функции «пороговое значение» (или «цветовое пороговое значение»)! Лично я предпочитаю сначала настроить изображение с помощью «яркости/контраста», и уже потом задать «пороговое значение». Тому, как всем этим пользоваться, будет посвящен весь следующий выпуск.
  • Обработка: включает в себя все инструменты для, не поверите, обработки изображений. Этот пункт также заслуживает отдельного выпуска, поэтому упомяну лишь ключевые функции: «subtract background» — «вычитание фона», чертовски полезная функция, требующая, однако, постоянного контроля на тему «не вычел ли я пиксели со значимой информацией?»; «Find Edges» — «найти края», многие используют при подсчете клеток, полезно и популярно; «Smooth» — «Сглаживание», обычно применяется после анализа для получения более красивого изображения к статье, также полезно при наличии большого количества «шкалящих» пикселей (максимальной интенсивности); «Sharpen» — «резкость», антагонист предыдущей функции; «Enhance» — «усиление», замечательная функция, особенно для темных снимков и, как показывает опыт, при использовании темно-красных флюорофоров (см. ниже)

Функция «Enhance» в действии: теперь видно, что пора работать над удалением шумов

  • Анализ: инструменты для непосредственного извлечения информации из изображения. Как и в случае с предыдущими двумя пунктами меню, будет подробно рассмотрено в будущем. Сейчас достаточно знать, что тут есть две связанные функции — «Set Measurements» и «Measure»; первая позволяет выбрать, какие параметры необходимо проанализировать, вторая — проанализировать и вывести результаты. Здесь также расположена ключевая функция «Analyse Particles» — «Анализ частиц», позволяющая на основе предыдущего порогового значения посчитать количество отдельных частиц и вывести запрашиваемую информацию по каждой из них, а также построить функции распределения. А еще тут есть возможность строить различные гистограммы, которые не только полезны, но и хорошо украшают статью.
  • Плагины: тут тоже все понятно. В Fiji работу по подбору плагинов провели за вас: их так много, и они так разнообразны, что большую часть вы, скорее всего, никогда и не откроете. Также здесь находятся инструменты для подключения макросов и написания собственного кода. Для людей, плохо дружащих с программированием (я тоже к ним отношусь), есть удобная функция записи: включаете, вручную выполняете последовательность действий, смотрите на получившийся код, корректируете синтаксис в зависимости от предпочитаемого языка.
  • Окно: ничего стоящего, кроме функции «Cascade», позволяющей хоть немного облегчить работу в море открытых файлов (вы же не забыли про Ctrl+Shift+D, правда?)
  • Помощь: мне бы кто помог… Советую проверять только вкладку «Update» на наличие обновлений. Не советую выбирать экспериментальные свежие сборки — потенциально снижаете стабильность работы ПО, принципиальных различий между версиями 1.5xc и 1.5xg нет.

Теперь быстро пройдемся по нижней строке, благо, там все понятно:

Небольшая ремарка: ко всем следующим функциям, связанным с рисованием (кисти, карандаши, прямые…) даю следующий комментарий: «Учитывая работу кнопки «Отменить», крайне не советую что-то дорисовывать в Fiji. Лично я использую paint.net, но любой, реально любой редактор изображения сэкономит ваши нервы».

  • Первые четыре функции я объединил в одну — это просто разные формы выбора области;
  • Прямая/стрелка — подходит для выделения нужных элементов изображения для читателя будущей статьи;
  • Измерение угла — строите две прямые с углом между ними, узнаете угол;
  • Выбор нескольких точек — полезно, но, учитывая работу кнопки отменить…
  • Волшебная палочка — программа пытается вычленить объект на основании разности интенсивностей соседних пикселей/вокселей. Хорошо работает на четких изображениях, особенно после функции «Sharpen» и «Enhance contrast»;
  • Текстовое окно — итак все понятно, правда?
  • Масштабирование — колесико либо «+» и «-» на нумпаде делают эту кнопку лишней;
  • Перемещение — спорной полезности функция, т. к. обычно отдельные элементы увеличивают и вырезают в отдельное изображение, но тут кому как удобнее;
  • Пипетка, карандаш, кисть, заливка — привет из старого доброго пейнта. Учитывая работу кнопки «отменить»…
  • Меню разработчика — если вы не пишете макросы и не владеете программированием, о существовании этой кнопки можно забыть;
  • Работа со стопками — поговорим о ней, когда дойдем до стопок;
  • Волшебная палочка «сглаживание» — неплохой инструмент для срезания острых углов ваших изображений.
  • Другое — здесь притаился еще десяток разной полезности инструментов третьестепенной важности, часть которых повторяет упомянутые выше.

    Вот мы с вами и завершаем краткую экскурсию по достопримечательностям Фиджи. Надеюсь, получилось создать хотя бы примерное представление, где расположены основные функции. О том, как ими пользоваться, подробно поговорим в следующих выпусках, а сейчас советую заинтересовавшимся самостоятельно прогуляться по всем этим переулкам выпадающих меню.

И напоследок еще один совет. Лучше по минимуму обрабатывать изображения и стараться получать изначально хорошие снимки, ведь чем больше заметна обработка, тем больше возникнет подозрений по отношению к вашей работе: а не подогнали ли вы результаты под себя? А то, как можно извратить одно изображение с помощью предлагаемых инструментов, можете видеть ниже: