CellProfiler автоматизирует количественный анализ биологических изображений: в нём собирают последовательность модулей для загрузки микроскопических кадров, коррекции неравномерного освещения, сегментации ядер и клеток, измерения формы, интенсивности и текстуры, отслеживания объектов, контроля качества и экспорта результатов в таблицы или базы данных.
Работа строится вокруг pipeline — воспроизводимой последовательности операций. Сначала программа формирует наборы изображений и связывает каналы и метаданные, затем выполняет предобработку и выделение объектов, после чего вычисляет числовые признаки и записывает результаты. Такая схема особенно удобна для серий микроскопических снимков, где одинаковые правила должны применяться к сотням или тысячам полей зрения без ручной разметки каждого кадра.
Ключевой принцип CellProfiler — отделять подготовку изображения от определения биологических объектов и от измерений. Это позволяет отдельно проверять, не искажает ли коррекция фон, правильно ли разделяются соприкасающиеся ядра, и только после этого доверять таблице с площадями, интенсивностями, текстурой или соседством. В Test Mode можно прогонять выбранный набор изображений, менять параметры модулей и сразу смотреть, как эти изменения влияют на сегментацию.
Скачать CellProfiler
- Ретушь фото
- Русский интерфейс
- Просто для новичков
- Нет ручной ретуши
- Нужна настройка пайплайна
- Чувствителен к сегментации
Как устроен рабочий процесс CellProfiler
Pipeline в CellProfiler — это не макрос записи действий мышью, а последовательность аналитических модулей с явными входами и выходами. Модуль может получать исходное изображение, изображение после коррекции, набор уже найденных объектов или ранее вычисленное измерение. Результат одного шага становится доступен следующим шагам по имени. Поэтому понятные названия вроде DNA, Actin, Nuclei, Cells и Cytoplasm снижают риск случайно измерить не тот канал или не тот набор объектов.
В начале проекта формируется список файлов. Дальше Metadata при необходимости извлекает признаки из имени файла, пути либо внешней таблицы; NamesAndTypes присваивает каналам логические имена и объединяет изображения одного поля зрения в image set; Groups разбивает поток на независимые группы. После входных модулей располагаются операции обработки, сегментации и измерения. ExportToSpreadsheet, ExportToDatabase и SaveImages обычно ставят ближе к концу, когда все нужные признаки уже вычислены.

Порядок модулей имеет прямое значение. Например, MeasureObjectIntensity не сможет измерить клетки до того, как появились объекты Cells и нужный канал изображения. CorrectIlluminationApply требует заранее рассчитанную или загруженную функцию освещения. CalculateMath использует измерения, созданные более ранними модулями. Если зависимость нарушена, проблема проявляется либо при настройке списка доступных входов, либо во время выполнения.
Проект, pipeline и список изображений
Проект сохраняет не только параметры анализа, но и рабочий контекст, включая список изображений. Сам pipeline удобно экспортировать отдельно, когда нужен переносимый рецепт анализа без конкретного набора файлов. Практически полезно хранить исходные данные неизменными, результаты складывать в отдельный каталог, а pipeline и короткое описание условий эксперимента версионировать вместе. Тогда числовой результат можно связать с конкретными правилами сегментации и измерений.
При переносе проекта между компьютерами особенно внимательно проверяют пути ввода и вывода. Абсолютные пути легко ломаются, если структура дисков отличается. Метаданные, построенные из имени файла, также следует перепроверить после переименования серий: регулярное выражение может формально сработать, но разложить имя по неправильным полям. Перед длинным запуском полезно убедиться, что несколько контрольных строк соответствуют ожидаемым Plate, Well, Site, Channel или Timepoint.
Загрузка изображений и формирование image sets
Images: отбор файлов до анализа
Images определяет, какие файлы попадут в анализ. На практике это первая защита от случайного захвата лишних изображений, миниатюр, результатов предыдущего запуска или служебных файлов. Если каталог содержит несколько типов данных, правила фильтрации стоит делать достаточно строгими: использовать расширение, фрагмент имени, расположение или комбинацию условий. Чем раньше исключены посторонние файлы, тем проще диагностировать дальнейшие несовпадения каналов.

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

Metadata: извлечение экспериментальных признаков
Metadata связывает изображения с такими признаками, как номер пластины, лунка, сайт, канал, временная точка, обработка или повтор. Источником могут быть имя файла, путь и таблица. Для имени и пути обычно применяют регулярные выражения с именованными группами. Смысл хорошо настроенных метаданных шире простого удобства: они управляют связыванием каналов, группировкой, именованием выходных файлов и последующей агрегацией результатов.

Проверка метаданных должна быть явной. После обновления таблицы смотрят, заполнены ли все обязательные поля, нет ли неожиданных пустых значений и действительно ли одна комбинация Plate–Well–Site соответствует одному полю зрения. Если для одного ключа появляется два изображения одного канала, NamesAndTypes может столкнуться с неоднозначностью. Если изображения нет, набор окажется неполным. Такие проблемы лучше исправить на уровне имен и правил сопоставления, а не маскировать поздними модулями.
При объединении с внешней CSV-таблицей ключевые поля должны однозначно связывать строку таблицы с нужным изображением. Опасный случай — одинаковый номер лунки на нескольких пластинах при сопоставлении только по Well. Тогда данные разных пластин могут смешаться. Использование составного ключа Plate и Well либо другого уникального сочетания устраняет неоднозначность.
NamesAndTypes: имена каналов и их связи
NamesAndTypes обязателен в современном входном процессе. Он присваивает изображениям имена, которыми будут пользоваться остальные модули, и определяет отношения между каналами. Для многоканальной съёмки важно, чтобы DAPI, GFP, RFP или другие каналы одного поля зрения собирались в один image set по метаданным, а не по случайному порядку файлов. Там же задаётся способ интерпретации интенсивности, что влияет на последующие числовые значения.

Хорошая схема именования описывает биологический смысл, а не только техническое обозначение микроскопа. Например, DNA удобнее, чем w1, если этот канал действительно содержит окраску ядер. Но нельзя переименованием приписывать каналу биологический смысл, которого нет в протоколе: имена должны отражать фактическую съёмку. Когда pipeline используется повторно, именно понятные имена помогают заметить, что новый эксперимент поменял порядок каналов.
Groups: независимые группы изображений
Groups нужен, когда отдельные серии должны обрабатываться независимо. Классический пример — time-lapse: кадры одной временной последовательности относятся к одной группе, а другой экспериментальный объект не должен продолжать её треки. Аналогично группировка применяется при расчётах, которые агрегируют несколько изображений одной пластины или другой экспериментальной единицы. Группы строятся по одному или нескольким полям metadata.
Таблица групп служит полезной проверкой целостности. Если каждая временная серия должна иметь одинаковое число кадров, неожиданно короткая группа сразу указывает на отсутствующие изображения или неправильное извлечение метаданных. Если группа слишком большая, обычно одно из ключевых полей не участвует в группировке. До запуска TrackObjects следует убедиться, что границы групп совпадают с реальными границами последовательностей.
Сборка и тестирование pipeline
Модули добавляются через список категорий и выполняются сверху вниз. В большом pipeline полезно придерживаться функциональных блоков: входные данные, коррекция, сегментация, фильтрация объектов, измерения, вычисляемые показатели, контроль качества и экспорт. Это не обязательное формальное правило, но такой порядок делает зависимости читаемыми и облегчает поиск ошибки. Похожие операции можно дублировать с разными параметрами, если нужны альтернативные измерения или несколько каналов.

Test Mode предназначен для настройки анализа на отдельных наборах изображений. В нём можно перейти к конкретному image set или группе, запускать шаги последовательно и повторять модуль после изменения параметров. Настройка только на одном идеальном поле зрения почти всегда опасна: пороги и размеры следует проверять на типичных, тёмных, ярких, плотных и редких полях, а также на кадрах с артефактами. Цель — не получить безупречную картинку на одном примере, а выбрать правила, устойчивые к вариативности серии.
Если модуль создаёт промежуточное изображение, оно обычно остаётся внутри процесса и не записывается автоматически. Для сохранения конкретного результата добавляют SaveImages. Это важно учитывать при отладке: отсутствие промежуточного PNG или TIFF на диске не означает, что операция не выполнена. Напротив, без явного SaveImages поток не разрастается тысячами технических файлов.
Коррекция неравномерного освещения
Неравномерное освещение способно сдвинуть пороги сегментации и сделать интенсивность зависимой от положения объекта в поле зрения. CellProfiler разделяет задачу на расчёт функции освещения и её применение. CorrectIlluminationCalculate строит модель фонового или регулярного распределения интенсивности, а CorrectIlluminationApply использует её для вычитания или деления. Правильный выбор зависит от физики сигнала и способа расчёта функции.
В режиме Regular функция описывает пространственную вариацию сигнала и обычно сочетается с делением. В режиме Background оценивается фон, и часто уместно вычитание. Маска может исключить области, которые не должны участвовать в оценке, например край лунки. Критическая проверка — посмотреть функцию освещения и несколько исправленных изображений: она должна отражать медленно меняющееся поле, а не структуру самих клеток.
Для серии изображений функцию можно оценивать по отдельному кадру или по множеству кадров группы. Расчёт по большой репрезентативной выборке обычно устойчивее, когда объекты распределены по полю и не занимают одни и те же позиции. Но если освещение меняется между пластинами или сессиями съёмки, одна общая функция способна смешать разные режимы. Тогда метаданные и Groups помогают рассчитывать поправки внутри правильных экспериментальных единиц.
Подготовка каналов перед сегментацией
Преобразование цветных и многоканальных изображений
Большинство модулей сегментации ожидает осмысленный серый канал. ColorToGray используется, когда вход хранится как цветное изображение и требуется выделить или объединить компоненты. GrayToColor выполняет обратную задачу визуального объединения серых каналов. Для количественных измерений лучше сохранять исходные серые каналы раздельно и формировать цветовое представление только там, где оно действительно нужно для просмотра.
Если нужный объект тёмный на светлом фоне, ImageMath позволяет инвертировать интенсивность перед IdentifyPrimaryObjects. Тем же модулем выполняются арифметические операции: сложение, вычитание, умножение, деление, среднее, логарифмическое преобразование и масштабирование. После арифметики надо контролировать диапазон значений: последующие модули предполагают согласованную шкалу интенсивности, и неожиданный выход за ожидаемый диапазон может изменить порог.
Align, Crop и маскирование
Align совмещает изображения по сдвигу, что полезно при небольшом смещении каналов. Его нельзя воспринимать как универсальную регистрацию: сдвиг по координатам не исправляет произвольную деформацию, перспективу или сложное локальное несовпадение. Если каналы имеют систематическую оптическую ошибку, сначала проверяют, укладывается ли она в модель простого смещения. После выравнивания края могут потерять общую область, что надо учитывать при измерениях.
Crop ограничивает анализ заданной областью, а маски исключают пиксели без обязательного физического вырезания изображения. Маска полезна для удаления рамок, краёв лунок, областей вне ткани или других зон, где измерение не имеет биологического смысла. Важно различать маску изображения и набор объектов: маска определяет допустимые пиксели, объект представляет сегментированную сущность с меткой и собственными измерениями.
Сглаживание и усиление признаков
Smooth уменьшает локальный шум, но слишком сильное сглаживание способно стереть мелкие объекты или слить близкие структуры. EnhanceOrSuppressFeatures подчёркивает или подавляет признаки определённого пространственного масштаба и может использоваться перед сегментацией, если исходный контраст недостаточен. EnhanceEdges выделяет границы. Эти операции стоит оценивать по тому, улучшают ли они именно последующую сегментацию, а не по субъективной привлекательности изображения.
RescaleIntensity меняет диапазон интенсивностей и полезен после операций, которые существенно сжали или расширили шкалу. Threshold создаёт бинарное разделение по выбранному правилу и может быть самостоятельным этапом подготовки. Но бинаризация сама по себе ещё не гарантирует корректные объекты: для биологических сущностей важны разделение соприкасающихся областей, фильтрация по размеру и соответствие границ реальной морфологии.
Сегментация первичных объектов
IdentifyPrimaryObjects предназначен для объектов, которые можно обнаружить непосредственно по одному серому изображению, например хорошо окрашенных ядер. Это один из наиболее критичных модулей во всём pipeline: все последующие признаки объекта будут корректны только настолько, насколько корректна его граница. Модуль учитывает типичный размер, порог и правила разделения соприкасающихся областей, а также может отбрасывать объекты у края изображения.

Диапазон диаметра задаёт полезное биологическое ограничение. Слишком узкий диапазон удаляет реальную вариативность, а слишком широкий допускает шум и крупные слипшиеся области. Размер задают в пикселях, поэтому перенос pipeline между объективами, камерами или после ресэмплинга требует пересчёта. Если физический размер клетки не изменился, но пиксельный размер изменился вдвое, старые параметры сегментации уже не эквивалентны.

Порог может быть глобальным или адаптивным в зависимости от структуры фона. Глобальный подход проще и устойчив при однородном освещении; адаптивный полезен при пространственных изменениях, но добавляет параметры масштаба и может реагировать на локальные артефакты. Даже хороший численный порог следует проверять визуально: систематически обрезанные слабые ядра или захваченный фон искажают распределения интенсивности и размеров.
Разделение слипшихся объектов — отдельная задача. Если соседние ядра сливаются в одно, количество объектов занижается, площадь завышается, а все per-object признаки перестают соответствовать отдельным клеткам. Если алгоритм, наоборот, дробит одно ядро, количество растёт и появляются искусственно маленькие объекты. Поэтому настройку деклампинга проверяют на плотных областях, а не только на изолированных ядрах.

Окно результата показывает исходное изображение, метки объектов, контуры и служебные показатели. Цвета меток используются для различения соседних объектов и не являются биологическими классами. Особенно полезно смотреть объекты, исключённые по размеру или касанию края. Если большинство периферийных объектов обрезано, их удаление может быть оправдано для морфометрии; если область интереса специально включает край, такое правило способно внести систематическое смещение.
Вторичные и третичные объекты
IdentifySecondaryObjects строит объекты вокруг уже найденных первичных, например определяет тело клетки, используя ядро как начальную опору. Это помогает там, где граница всей клетки менее контрастна, чем ядро. Выбор изображения и способа распространения границы должен соответствовать реальному маркеру клетки. Если канал отражает только локальную органеллу, использовать его как карту всей клетки обычно неправильно.

IdentifyTertiaryObjects создаёт область как разность двух ранее найденных объектов. Типовой пример — цитоплазма: из Cells вычитаются Nuclei, и остаётся область клетки вне ядра. Такой объект удобен для отдельного измерения цитоплазматической интенсивности. Но качество третичного объекта наследует ошибки обеих исходных сегментаций: неверная граница клетки или ядра напрямую меняет площадь и среднюю интенсивность цитоплазмы.
Не каждую структуру надо принудительно описывать схемой ядро — клетка — цитоплазма. Для колоний, сосудистых сетей, пятен, волокон и других форм применяются другие комбинации Threshold, Watershed, морфологических операций и объектных преобразований. Важно формулировать, какая биологическая единица должна стать одной меткой, и подбирать алгоритм под эту единицу.
Фильтрация и преобразование найденных объектов
После сегментации объекты можно преобразовывать без повторного поиска границ. FilterObjects отбирает объекты по измерениям и полезен для удаления слишком маленьких, слишком крупных, слишком тусклых или иных явно нежелательных компонентов. Решение о фильтре лучше основывать на контролируемом критерии, а не на желании очистить картинку. Если фильтр удаляет биологически значимую часть распределения, итоговая статистика станет искусственно узкой.
ClassifyObjects распределяет объекты по классам на основе уже рассчитанных измерений. Это удобно для дискретизации по размеру, интенсивности или другому числовому признаку, когда границы классов заранее осмыслены. Модуль не заменяет обучение сложного классификатора: он использует заданные измерения и пороговые правила. Перед классификацией нужный показатель должен быть рассчитан более ранним измерительным модулем или CalculateMath.
ConvertObjectsToImage превращает метки объектов в изображение, а ConvertImageToObjects выполняет обратное преобразование для подходящих размеченных данных. ExpandOrShrinkObjects меняет границы объектов на заданное расстояние или по правилу соприкосновения. MaskObjects ограничивает объекты маской. RelateObjects создаёт отношения родитель — дочерний объект, что позволяет, например, связать ядра с клетками и агрегировать дочерние измерения по родителю.

Измерение размеров и формы
MeasureObjectSizeShape вычисляет геометрические признаки идентифицированных объектов. Для двумерных данных сюда относятся площадь, периметр и набор характеристик формы; для поддерживаемых трёхмерных объектов часть показателей имеет объёмные аналоги. Важно учитывать границы кадра: объект, обрезанный краем, не имеет полной формы, поэтому многие морфометрические признаки для него ненадёжны.
Площадь — число пикселей внутри объекта, поэтому для физической интерпретации требуется знать масштаб изображения. Сравнивать площади в пикселях между сериями с разным увеличением без нормализации нельзя. Периметр и производные показатели формы особенно чувствительны к шероховатости границы: шумная сегментация может почти не изменить площадь, но заметно увеличить периметр и связанные характеристики.
Ориентация, вытянутость, эксцентриситет и другие геометрические признаки полезны только при достаточном качестве сегментации. Если два объекта ошибочно слиплись, форма описывает искусственный конгломерат. Поэтому перед статистическим анализом разумно сохранять небольшую выборку контуров или использовать DisplayDataOnImage для визуальной проверки экстремальных значений.
Измерение интенсивности
MeasureObjectIntensity рассчитывает интенсивностные признаки внутри каждого объекта для выбранных серых изображений. Среди типичных результатов — интегральная, средняя, минимальная, максимальная и вариабельная интенсивность, а также показатели по краю объекта и координаты центра интенсивности. Один набор объектов можно измерять в нескольких каналах, например использовать Nuclei как геометрию и оценивать сигнал DNA и другого маркера в тех же границах.
Средняя и интегральная интенсивности отвечают на разные вопросы. Средняя нормирует сумму на площадь и удобна для концентрационного сигнала, тогда как интегральная растёт и при повышении яркости, и при увеличении площади объекта. При сравнении условий следует заранее решить, какая величина соответствует биологическому вопросу. Использование обоих показателей допустимо, но их нельзя трактовать как взаимозаменяемые.
CellProfiler нормализует обычные изображения в внутреннюю шкалу интенсивности, и настройка диапазона в NamesAndTypes влияет на интерпретацию пиксельных значений. Поэтому при анализе количественной флуоресценции важно не менять способы загрузки и масштабирования между сравниваемыми сериями. Насыщенные пиксели также не восстанавливают потерянную информацию: если детектор достиг предела, никакая последующая арифметика не сделает сигнал снова количественным.
Текстура, гранулярность и пространственное распределение
MeasureTexture оценивает структуру вариаций интенсивности на заданном масштабе и рассчитывает признаки на основе матриц совместной встречаемости уровней серого. Эти признаки описывают не просто среднюю яркость, а организацию ярких и тёмных пикселей. Результат зависит от масштаба, числа уровней квантования и качества сегментации, поэтому параметры текстуры должны быть одинаковыми для сравниваемых условий.
MeasureGranularity описывает распределение текстурных элементов по масштабу. Такой подход полезен, когда фенотип связан с появлением мелких или крупных пятнистых структур, но выбор диапазона масштабов должен соответствовать разрешению изображения. Если структура меньше эффективного разрешения оптики или сильно зависит от сглаживания, численный профиль гранулярности может отражать обработку, а не биологию.
MeasureObjectIntensityDistribution оценивает, как сигнал распределён внутри объекта относительно его геометрии. Это позволяет отличать, например, периферическое накопление от центрального при близкой средней интенсивности. Подобные признаки особенно чувствительны к правильности границы и центру объекта. Для вытянутых или неправильных форм следует проверить, соответствует ли выбранная модель пространственного разбиения реальному вопросу.
Соседство, колокализация и связи между объектами
MeasureObjectNeighbors измеряет отношения соседства между объектами. Оно позволяет получить число соседей и характеристики пространственного окружения, если расстояние и определение соседства заданы осмысленно. Плотность клеток сильно влияет на такие показатели, поэтому сравнение условий требует сопоставимых правил выделения объектов и одинаковой геометрической области анализа.
MeasureColocalization оценивает совместное распределение интенсивностей между каналами. Колокализация чувствительна к фону, насыщению, смещению каналов и выбору области измерения. Перед расчётом следует убедиться, что каналы действительно зарегистрированы, фон обработан согласованно, а маска или объекты задают биологически релевантную область. Высокая корреляция интенсивностей сама по себе не доказывает физическое взаимодействие молекул.
RelateObjects полезен, когда нужно связать разные уровни сегментации. Например, каждое ядро можно отнести к клетке-родителю, а затем анализировать число дочерних объектов и их агрегированные характеристики. Наличие отношений делает выходные таблицы богаче, но требует непротиворечивых границ: если ядро лежит вне ошибочно сегментированной клетки, связь может быть потеряна или назначена неверно.
Контроль качества изображений
MeasureImageQuality рассчитывает показатели, которые помогают обнаруживать кадры с фокусировочными, интенсивностными и другими проблемами. Такие измерения полезно включать до массового анализа, чтобы не смешивать технически плохие поля зрения с нормальными. Порог исключения должен быть обоснован на реальных контрольных изображениях: слишком агрессивный QC способен удалить сложные, но биологически важные примеры.
FlagImage формирует флаг по выбранным измерениям и может помечать изображения или влиять на дальнейшее выполнение. Практическая схема — сначала собрать QC-метрики на репрезентативной серии, изучить их распределения, визуально проверить хвосты, а затем задать критерий. Если порог выбран только по одному эксперименту, перенос на другую сессию съёмки требует повторной проверки.
Контроль качества не ограничивается одним числом. Для фокуса, фона, насыщения и количества найденных объектов причины отклонений различны. Неожиданно низкое число объектов может быть следствием пустого поля, плохой фокусировки, слабой окраски или слишком высокого порога сегментации. Поэтому QC удобнее строить как несколько независимых признаков с понятной интерпретацией.
Отслеживание объектов во времени
TrackObjects связывает объекты между последовательными кадрами так, чтобы сохранялась их идентичность. Для корректной работы кадры каждой последовательности должны идти в правильном порядке и образовывать отдельную группу. Метаданные времени нужно извлекать как числовой или однозначно сортируемый признак; строковая сортировка t1, t10, t2 создаёт неправильную временную последовательность, если её не нормализовать.
Качество трекинга начинается с качества сегментации. Если объект пропадает на одном кадре из-за порога, трек может оборваться; если два объекта временно сливаются, соответствия становятся неоднозначными. Настройки расстояния и модели связывания выбирают по реальной скорости перемещения и частоте кадров. Слишком большой радиус повышает шанс ошибочной связи с соседом, слишком маленький разрывает быстрые движения.
Для экспериментов с делением клеток важно отдельно проверять, как интерпретируются события появления, исчезновения и ветвления. Числовые идентификаторы треков удобны для дальнейшего анализа, но автоматическая связь не является доказательством родословной без визуального контроля. На плотных культурах, при сильной миграции или частых слияниях сегментации трудность трекинга резко возрастает.
Работа с трёхмерными данными
Часть модулей CellProfiler поддерживает 3D, но поддержка не одинакова для всей библиотеки. Перед построением объёмного pipeline следует проверять отметку Supports 3D для каждого выбранного модуля. Нельзя предполагать, что операция, работающая на двумерном кадре, автоматически имеет эквивалентную трёхмерную реализацию. Например, для объёмной сегментации первичных объектов документация рекомендует Watershed вместо двумерного IdentifyPrimaryObjects.
Для 3D особенно важна физическая анизотропия: шаг по Z часто отличается от размера пикселя по X и Y. Геометрические измерения и морфологические операции должны учитывать эту разницу там, где модуль поддерживает соответствующие параметры. Если стек предварительно ресэмплируется, это должно быть частью воспроизводимого процесса, поскольку ресэмплинг меняет число вокселей, границы и текстурные признаки.
Объёмные данные требуют больше памяти и времени. Неудачная стратегия — начинать с полного многогигабайтного набора и одновременно настраивать параметры. Практичнее вырезать репрезентативный небольшой стек, проверить совместимость всех модулей, сохранить pipeline и только затем масштабировать. При массовом запуске также следует ограничить ненужные окна отображения, поскольку визуализация добавляет накладные расходы.
CalculateMath и производные показатели
CalculateMath объединяет ранее рассчитанные измерения арифметическими операциями. Это позволяет получать отношения сигналов, разности, суммы и другие производные признаки внутри pipeline. Главная опасность — потерять смысл единиц и знаменателя. Если рассчитывается отношение двух интенсивностей, нулевые или почти нулевые значения могут создать выбросы, поэтому диапазон исходных признаков следует изучить заранее.

Производные показатели стоит давать понятным именам, отражающим формулу. Имя Ratio без указания числителя и знаменателя плохо переносится между проектами. Если формула меняется, старое название способно создать скрытую ошибку интерпретации. Для сложных статистических моделей лучше экспортировать первичные измерения и выполнять анализ во внешней среде, сохраняя в CellProfiler только прозрачные преобразования, непосредственно связанные с обработкой изображений.
Экспорт числовых результатов
ExportToSpreadsheet записывает измерения в текстовые таблицы с разделителями, которые можно открыть в табличных и статистических программах. Экспорт можно ограничивать выбранными категориями, а имена и пути формировать с использованием metadata. Обычно отдельные таблицы содержат показатели на уровне изображений и на уровне разных типов объектов. Для соединения таких таблиц важно сохранять идентификаторы изображений и объектов.

При большом числе объектов таблица может содержать миллионы строк и сотни столбцов. Экспортировать все измерения на всякий случай не всегда рационально: файлы растут, а анализ становится менее прозрачным. Лучше заранее определить признаки, необходимые для гипотезы, и отдельно сохранить QC. Однако на этапе разработки pipeline широкий экспорт может быть полезен для диагностики, если затем набор признаков сокращается осознанно.
ExportToDatabase предназначен для записи результатов в базу данных и может формировать структуру, совместимую с дальнейшим анализом. Для больших высокопроизводительных экспериментов база данных удобнее множества CSV, но добавляет требования к схеме, соединению и администрированию. Перед запуском проверяют имена таблиц, типы данных, права записи и уникальность экспериментальных идентификаторов.
Сохранение обработанных изображений
SaveImages требуется, когда нужно получить файл промежуточного или конечного изображения. Без него изображения, созданные модулями обработки, не записываются автоматически. Можно сохранять выбранный результат на каждом цикле либо в определённый момент, что важно для агрегатных изображений и функций освещения. Формат и битность выбирают с учётом дальнейшего использования и диапазона данных.
Сохранять каждую промежуточную стадию большого pipeline обычно избыточно. Лучше выбрать несколько диагностических результатов: исправленное изображение, контуры сегментации или маску, которые действительно нужны для контроля. Для визуальной проверки измерений также полезен DisplayDataOnImage: он накладывает числовые значения на изображение и помогает быстро увидеть, соответствуют ли экстремальные измерения реальным объектам.
Если выходные имена строятся из metadata, их шаблон проверяют на уникальность. Недостаточный набор тегов способен заставить разные поля зрения записываться под одинаковым именем. Настройка перезаписи определяет, будет ли существующий файл заменён; при автоматическом пакетном анализе случайное совпадение имён особенно опасно, потому что итоговый каталог может выглядеть полным, хотя часть файлов была перезаписана.
Интерфейс и логика настройки модулей
Главное окно разделяет список pipeline и область настроек выбранного модуля. В модуле обычно видны входное изображение или объекты, имя результата и параметры алгоритма. Нижние элементы управления дают доступ к справке и действиям с pipeline. При тестировании результат отдельного модуля открывается в собственном окне визуализации, что позволяет сравнивать исходник, найденные объекты, контуры и служебные значения.

Большое число параметров IdentifyPrimaryObjects не следует менять одновременно. Эффективнее начать с типичного размера и базового порога, получить приемлемое разделение фона и объектов, затем разбирать слипшиеся области и только после этого тонкие ограничения. Когда несколько настроек меняются разом, невозможно понять, какая из них улучшила или ухудшила результат. Test Mode позволяет применять такую поэтапную стратегию без запуска всей серии.

Меню Add Module сгруппировано по назначению, поэтому новый пользователь быстрее находит нужный инструмент через категорию: обработка изображений, работа с объектами, измерения, вывод. По мере роста pipeline полезно сворачивать уже настроенные участки и давать результатам согласованные имена. Это уменьшает вероятность выбрать в выпадающем списке похожий, но неправильный объект или канал.


Сравнение CellProfiler с аналогами
| Программа | Лучше подходит для | Главное ограничение |
|---|---|---|
| CellProfiler | Воспроизводимые модульные pipeline для количественного анализа серий биологических изображений | Качество результата сильно зависит от настройки сегментации |
| Fiji / ImageJ | Интерактивная обработка, плагины, макросы и широкий спектр научных операций с изображениями | Сложные высокопроизводительные workflow часто требуют макросов и плагинов |
| ilastik | Интерактивная машинно-обучаемая классификация пикселей и объектов по размеченным примерам | Для полного набора морфометрии и отчётности часто нужен следующий инструмент |
| QuPath | Анализ цифровой патологии, целых слайдов, аннотаций и клеток в тканях | Ориентирован прежде всего на патологические и тканевые изображения |
| Icy | Визуальная научная обработка изображений, плагины и построение workflow | Экосистема и логика pipeline отличаются, перенос рецептов не прямой |
CellProfiler рациональнее выбирать, когда главная задача — один раз настроить воспроизводимый pipeline и одинаково измерить большое число полей зрения. Fiji удобнее для широкого спектра интерактивных операций и специализированных плагинов; ilastik полезен, когда классическая сегментация плохо отделяет классы пикселей и нужен обучаемый этап; QuPath особенно силён на гистологических whole-slide изображениях; Icy предлагает собственную расширяемую среду научной обработки. На практике инструменты могут дополнять друг друга: например, обучаемая карта вероятностей из ilastik может стать входом для последующей количественной обработки в CellProfiler.
Типовые ошибки и способы их исправить
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Каналы одного поля зрения не объединяются | Неправильные metadata или правила NamesAndTypes | Поля Plate, Well, Site, Channel и таблицу image sets |
| Одно изображение попадает в несколько наборов | Правило сопоставления недостаточно специфично | Фильтры имени и уникальность ключей metadata |
| Часть полей пропала | Фильтр Images исключил нужные файлы или набор неполный | Список файлов и число наборов по группам |
| Ядра массово сливаются | Недостаточное разделение соприкасающихся объектов | Типичный диаметр, порог и параметры declumping |
| Одно ядро дробится на несколько объектов | Слишком агрессивное разделение или шум | Сглаживание, минимальный размер и параметры разделения |
| Слабые ядра не находятся | Порог слишком высокий или фон неоднороден | Коррекцию освещения и стратегию threshold |
| Фон определяется как объект | Порог слишком низкий или есть яркие артефакты | Маскирование, фильтры и распределение интенсивности |
| Интенсивность зависит от края кадра | Неравномерное освещение | Функцию CorrectIlluminationCalculate и способ Apply |
| Площадь отличается между сериями без видимой причины | Изменился масштаб пикселя или сегментация | Увеличение, ресэмплинг и диапазон размеров |
| В таблице неожиданно много столбцов | Экспортируются все измерения и комбинации каналов/объектов | Список выбранных признаков и повторные Measure-модули |
| CSV слишком велик для обычной таблицы | Миллионы объектов и широкий набор признаков | Сокращение признаков или экспорт в базу данных |
| Треки перескакивают между клетками | Слишком большой радиус связи или плотная культура | Порядок кадров, группы, скорость и качество сегментации |
| Треки обрываются | Объект пропадает при сегментации или слишком мал радиус | Кадры вокруг разрыва и параметры TrackObjects |
| Цитоплазма имеет странную форму | Ошибочны Cells или Nuclei | Обе исходные сегментации до IdentifyTertiaryObjects |
| После ImageMath порог ведёт себя иначе | Изменился диапазон интенсивностей | Математическую операцию и RescaleIntensity |
| После Align появились пустые края | Каналы сдвинуты и общая область уменьшилась | Стратегию кадрирования и область измерения |
| 3D pipeline падает на отдельном модуле | Модуль не поддерживает объёмные данные | Отметку Supports 3D и альтернативный модуль |
| Выходные изображения перезаписываются | Недостаточно уникальный шаблон имени | Metadata в имени и настройку overwrite |
| Pipeline работает на тесте, но нестабилен на серии | Настройка сделана на одном удобном кадре | Разные пластины, плотности, яркости и поля с артефактами |
| Экстремальные признаки выглядят неправдоподобно | Ошибка сегментации или насыщение | DisplayDataOnImage и исходные пиксели экстремальных объектов |
Совместимость и практические ограничения
CellProfiler поддерживает Windows 10 и 11, современные macOS на Intel и ARM и Linux через Flatpak. Pipeline между системами переносим в пределах совместимых модулей, но пути к файлам, внешние зависимости и особенности форматов всё равно следует проверять. Для массовых рабочих процессов также важны доступная оперативная память, размер изображений и число одновременно открываемых окон результатов.
Форматы входных микроскопических данных могут содержать многоканальные и многомерные структуры, но конкретная интерпретация серии зависит от считывателя и метаданных. Надёжная стратегия — открыть несколько файлов, проверить размерность, каналы, диапазон интенсивности и порядок плоскостей, прежде чем строить весь pipeline. Если производитель микроскопа использует сложный контейнер, иногда практичнее предварительно стандартизировать данные в поддерживаемый научный формат, сохранив исходники и метаданные.
Главное ограничение программы не сводится к скорости или набору кнопок: количественный анализ требует валидировать биологический смысл сегментации. Автоматизация быстро воспроизводит и хорошее правило, и ошибочное. Поэтому обязательны репрезентативные контрольные изображения, проверка границ объектов, анализ распределений QC и документирование параметров. Для новой окраски или другого увеличения старый pipeline следует считать отправной точкой, а не автоматически доказанной моделью.
Практический справочник по модулям
Ниже собраны не все возможные комбинации, а наиболее полезные роли модулей в реальном pipeline. При выборе модуля важнее понимать его вход и выход, чем запоминать категорию меню. Один и тот же инструмент может быть уместен в разных биологических задачах, но параметры всегда следует валидировать на своих изображениях.
| Модуль | Для чего используется | Критическая проверка |
|---|---|---|
| Images | Формирует исходный список файлов и применяет правила включения/исключения. | Проверьте, что фильтр не захватывает результаты предыдущего запуска и не исключает один из каналов. |
| Metadata | Извлекает экспериментальные признаки из имени, пути или таблицы и присоединяет их к изображениям. | Проверьте уникальность ключей и пустые поля до формирования image sets. |
| NamesAndTypes | Даёт каналам имена, определяет их тип и связывает изображения одного поля зрения. | Связывайте каналы по metadata, а не по случайному порядку файлов. |
| Groups | Разделяет наборы изображений на независимые группы по одному или нескольким полям metadata. | Сверьте число наборов в каждой группе с ожидаемым числом кадров или полей. |
| ColorToGray | Преобразует цветное изображение в один или несколько серых каналов. | Не смешивайте каналы, если количественный анализ требует измерять их отдельно. |
| GrayToColor | Собирает серые изображения в цветовое представление с настраиваемыми весами. | Используйте прежде всего для визуализации; исходные серые каналы сохраняйте для измерений. |
| ImageMath | Выполняет арифметику интенсивностей, включая сложение, вычитание, деление, масштабирование и инверсию. | После операции проверьте диапазон и при необходимости примените RescaleIntensity. |
| RescaleIntensity | Переносит интенсивности в заданный диапазон или нормирует их по выбранному правилу. | Не меняйте схему масштабирования между сравниваемыми экспериментами без причины. |
| Smooth | Снижает высокочастотный шум сглаживанием. | Радиус не должен быть сопоставим с размером мелких объектов, которые требуется сохранить. |
| EnhanceOrSuppressFeatures | Усиливает или подавляет структуры заданного типа и масштаба. | Размер признака задавайте исходя из пиксельного масштаба реальной структуры. |
| EnhanceEdges | Подчёркивает границы на изображении выбранным оператором. | Оценивайте не красоту границ, а влияние на последующую сегментацию. |
| CorrectIlluminationCalculate | Строит функцию неравномерности освещения по отдельным изображениям или группе. | Функция должна отражать медленное поле освещения, а не силуэты объектов. |
| CorrectIlluminationApply | Исправляет изображение функцией освещения с помощью деления или вычитания. | Способ Apply согласуйте с методом, которым рассчитана функция. |
| Align | Смещает изображения для пространственного совмещения. | Не используйте как замену нелинейной регистрации при деформациях или вращении. |
| Crop | Обрезает изображение до заданной области интереса. | Убедитесь, что одинаковое правило не удаляет биологически важные зоны в части серии. |
| MaskImage | Ограничивает допустимые пиксели изображения маской. | Проверьте направление маски, чтобы не оставить только исключаемую область. |
| Threshold | Разделяет пиксели на фон и передний план по выбранной стратегии порога. | Сравнивайте глобальный и адаптивный порог на неоднородных полях. |
| IdentifyPrimaryObjects | Выделяет первичные объекты, которые можно найти напрямую на сером изображении. | Главные проверки — размер, порог, разделение слипшихся объектов и поведение у края. |
| IdentifySecondaryObjects | Строит вторичный объект вокруг ранее найденного первичного. | Выберите канал, реально описывающий границу вторичного объекта. |
| IdentifyTertiaryObjects | Получает область как разность вложенных объектов, например цитоплазму из клетки и ядра. | Качество результата зависит сразу от двух исходных сегментаций. |
| Watershed | Разделяет области методом водораздела и применяется в том числе для объёмной сегментации. | Маркеры и ландшафт должны соответствовать ожидаемому числу и форме объектов. |
| ConvertImageToObjects | Преобразует подходящее размеченное изображение в набор объектов CellProfiler. | Проверьте, что метки действительно представляют отдельные объекты, а не произвольную шкалу яркости. |
| ConvertObjectsToImage | Создаёт изображение из набора объектов или их меток. | Выберите представление, соответствующее следующему модулю или задаче контроля. |
| ExpandOrShrinkObjects | Расширяет или сжимает границы уже найденных объектов. | Не допускайте, чтобы геометрическая операция подменяла реальную сегментацию границы клетки. |
| MaskObjects | Ограничивает объекты заданной маской или другим набором объектов. | После маскирования проверьте, как обрабатываются частично пересекающиеся объекты. |
| FilterObjects | Оставляет или удаляет объекты по измерениям и заданным критериям. | Фильтр должен исключать артефакты, а не удобную для гипотезы часть биологического распределения. |
| ClassifyObjects | Разбивает объекты на классы по значениям измерений. | Границы классов должны иметь интерпретацию и опираться на уже рассчитанный признак. |
| RelateObjects | Создаёт отношения родительских и дочерних объектов и связанные измерения. | Проверьте вложенность объектов и случаи, когда дочерний объект выходит за границу родителя. |
| MeasureObjectSizeShape | Вычисляет размеры, периметры и характеристики формы объектов. | Исключайте или отдельно учитывайте обрезанные краем объекты для морфометрии. |
| MeasureObjectIntensity | Измеряет статистики интенсивности выбранных каналов внутри каждого объекта. | Различайте среднюю и интегральную интенсивность и контролируйте насыщение. |
| MeasureImageIntensity | Считает интенсивностные показатели для всего изображения или выбранной области. | При наличии маски убедитесь, что исключённые пиксели соответствуют замыслу. |
| MeasureTexture | Вычисляет текстурные признаки по вариациям серых уровней на заданном масштабе. | Масштаб и число уровней должны быть одинаковыми для сравниваемых серий. |
| MeasureGranularity | Оценивает вклад структур разных пространственных размеров. | Диапазон масштабов связывайте с разрешением оптики и ожидаемым размером структуры. |
| MeasureObjectIntensityDistribution | Описывает пространственное распределение интенсивности внутри объектов. | Погрешность границы и центра объекта непосредственно влияет на радиальные показатели. |
| MeasureObjectNeighbors | Считает соседей и пространственные отношения между объектами. | Параметр расстояния должен иметь биологически осмысленный масштаб. |
| MeasureColocalization | Оценивает совместное распределение интенсивностей нескольких каналов. | Сначала проверьте фон, регистрацию каналов, насыщение и область измерения. |
| MeasureImageQuality | Формирует числовые признаки качества изображения. | Порог браковки валидируйте визуально на примерах по обе стороны порога. |
| MeasureImageAreaOccupied | Оценивает площадь или объём, занятые бинарным изображением либо объектами. | Проверьте маски и единицы перед сравнением серий разного масштаба. |
| MeasureImageOverlap | Сравнивает две бинарные разметки и рассчитывает метрики перекрытия. | Используйте сопоставимые маски и одинаковую область изображения. |
| MeasureObjectOverlap | Оценивает соответствие наборов объектов. | Согласуйте, что считается истинным объектом и как трактуются разделения и слияния. |
| MeasureObjectSkeleton | Измеряет ветви и другие свойства скелетизированных объектов. | Скелетизация должна быть стабильной к шуму и мелким разрывам исходной маски. |
| MeasureImageSkeleton | Считает ветви и конечные точки скелета на уровне изображения. | Проверьте, что морфологический скелет не содержит паразитных ответвлений от шума. |
| TrackObjects | Связывает объекты между последовательными кадрами и создаёт идентификаторы треков. | Порядок времени, Groups и качество сегментации критичны для корректной связи. |
| CalculateMath | Создаёт новое измерение арифметикой над ранее рассчитанными показателями. | Защититесь от деления на ноль и дайте формуле однозначное имя. |
| DisplayDataOnImage | Накладывает выбранные измерения на изображение для визуального контроля. | Используйте для проверки экстремальных значений и соответствия номера объекту. |
| OverlayOutlines | Рисует контуры найденных объектов поверх изображения. | Сохраняйте такие кадры как QC, но не используйте визуализацию вместо исходных количественных данных. |
| SaveImages | Записывает выбранные изображения, маски или другие визуальные результаты в файлы. | Шаблон имени должен быть уникальным, а формат и битность — подходить для дальнейшей задачи. |
| SaveCroppedObjects | Экспортирует отдельные объекты как изображения. | Учитывайте резкий рост числа файлов при тысячах объектов. |
| ExportToSpreadsheet | Экспортирует измерения в текстовые таблицы с разделителями. | Сохраняйте идентификаторы и metadata, необходимые для последующего объединения таблиц. |
| ExportToDatabase | Записывает результаты в структуру базы данных. | Проверьте соединение, имена таблиц, типы полей и права до длинного запуска. |
| CreateBatchFiles | Подготавливает данные для пакетной обработки на другой вычислительной среде. | Проверьте пути и доступность входных данных на целевой системе. |
| FlagImage | Помечает изображения по условиям, построенным на измерениях. | Не задавайте порог по единичному эксперименту без проверки распределения на новой серии. |
| MakeProjection | Создаёт проекцию группы изображений выбранной статистикой по пикселям. | Помните, что агрегат становится завершённым только после обработки нужной группы. |
| MorphologicalSkeleton | Строит морфологический скелет бинарной структуры. | Предварительно удалите шум и заполните критические разрывы, иначе ветвление будет искусственным. |
| MedianFilter | Уменьшает импульсный шум медианным фильтром, сохраняя резкие границы лучше простого усреднения. | Размер окна не должен стирать мелкие структуры, важные для последующей сегментации. |
Практические сценарии
Подсчёт ядер и измерение ядерного сигнала
Минимальный воспроизводимый сценарий начинается с Images, при необходимости Metadata, затем NamesAndTypes. Каналу с окраской ядер дают понятное имя DNA. Если фон неоднороден, добавляют коррекцию освещения. IdentifyPrimaryObjects выделяет Nuclei, после чего MeasureObjectSizeShape считает морфологию, а MeasureObjectIntensity — сигнал DNA или другого канала в тех же границах. В конце ExportToSpreadsheet сохраняет per-image количество и per-object признаки.
Настройку такого pipeline проверяют как минимум на четырёх типах полей: нормальная плотность, высокая плотность, низкая интенсивность и наличие яркого артефакта. Если один набор параметров уверенно разделяет ядра во всех этих случаях, он гораздо надёжнее настройки по красивому полю. Для анализа размера исключают ядра, обрезанные краем, если полная форма необходима для интерпретации.
Измерение клетки и цитоплазмы вокруг ядра
Сначала IdentifyPrimaryObjects выделяет Nuclei. IdentifySecondaryObjects использует эти ядра как начальные объекты и канал, который действительно показывает тело клетки, чтобы сформировать Cells. IdentifyTertiaryObjects вычитает Nuclei из Cells и создаёт Cytoplasm. Далее MeasureObjectIntensity можно запускать для Nuclei, Cells и Cytoplasm на одном или нескольких каналах, получая раздельные показатели компартментов.
Перед расчётом отношения ядро/цитоплазма проверяют две вещи: корректность границ Cells и отсутствие почти нулевых знаменателей. CalculateMath может вычислить простое отношение, но биологическую интерпретацию определяет не модуль, а валидность сегментации и выбранного сигнала. Для контроля полезно наложить контуры обоих типов объектов и посмотреть клетки с экстремальными отношениями.
Высокопроизводительная многолуночная серия
В многолуночном эксперименте metadata обычно включает Plate, Well, Site и Channel. NamesAndTypes связывает каналы по Plate–Well–Site. Groups может разделять анализ по пластине, если коррекция освещения или другая агрегатная операция должна выполняться внутри каждой пластины. После сегментации и измерений сохраняются метаданные, позволяющие агрегировать клетки сначала по полю, затем по лунке и биологическому повтору.
Ключевая ошибка здесь — псевдорепликация: миллионы клеток не превращают один биологический повтор в миллионы независимых повторов. CellProfiler выдаёт измерения объектов, но статистическую единицу эксперимента нужно определить отдельно. Поэтому metadata должны позволять восстановить иерархию Plate–Well–Site–Object, а экспорт не должен терять идентификаторы верхнего уровня.
Time-lapse с отслеживанием объектов
Имя или таблица должны давать идентификатор серии и номер кадра. Groups отделяет разные последовательности, а порядок внутри группы должен соответствовать времени. На каждом кадре выполняется одинаковая сегментация, затем TrackObjects связывает объекты. Для динамического анализа особенно полезен QC количества объектов по кадру: резкий скачок часто указывает на провал сегментации, а не на мгновенное биологическое событие.
Если освещение или фокус меняются со временем, параметры сегментации могут работать неравномерно. Прежде чем увеличивать радиус TrackObjects, надо убедиться, что объект действительно найден на обоих соседних кадрах. Трекинг не может восстановить идентичность объекта, которого сегментация систематически не видит. Для сложных случаев временная устойчивость порога важнее косметической точности границы на одном кадре.
Оценка текстурного фенотипа
После устойчивой сегментации выбирают канал, где текстура связана с исследуемым фенотипом, и запускают MeasureTexture на нескольких заранее обоснованных масштабах. При необходимости добавляют MeasureGranularity. Перед статистикой проверяют, не объясняются ли изменения текстуры размером объекта, фокусом или общей интенсивностью. Одни и те же уровни квантования и масштабы должны применяться ко всем сравниваемым группам.
Текстурные признаки часто коррелируют друг с другом. CellProfiler корректно рассчитает их, но отбор информативных признаков, контроль множественных сравнений и построение предсказательной модели относятся к следующему этапу анализа. В pipeline разумно сохранить только те настройки измерения, которые можно воспроизвести и объяснить, а не бесконтрольно увеличивать число признаков.
Сравнение автоматической сегментации с эталонной маской
Если имеется эталонная бинарная разметка или набор объектов, её можно загрузить и сопоставить с автоматическим результатом. MeasureImageOverlap и MeasureObjectOverlap помогают количественно оценить совпадение, но метрика должна соответствовать типу ошибки, важной для задачи. Высокое пиксельное перекрытие не всегда гарантирует правильное число объектов: два соседних ядра могут быть слиты в одну область с большой общей площадью перекрытия.
Поэтому оценку сегментации полезно разделять на качество границы и качество идентичности объектов. Для подсчёта клеток критичны слияния и дробления; для площади ткани может быть важнее общая маска. Валидационный набор должен включать сложные поля, а не только легко сегментируемые примеры. После изменения порога или declumping метрики пересчитывают на том же фиксированном наборе.
Как подбирать порог сегментации без подгонки под один кадр
Порог следует настраивать как часть измерительного протокола, а не как косметическую коррекцию. Сначала выбирают несколько полей, представляющих реальный диапазон яркости и плотности. На них сравнивают фон, слабые положительные объекты и яркие структуры. Если глобальный порог отделяет эти классы одинаково по всему кадру, усложнять метод нет необходимости. Если фон заметно меняется по пространству, сначала проверяют коррекцию освещения и только затем переходят к адаптивной стратегии.
При оценке порога полезно смотреть не только контуры, но и распределение размеров и числа объектов. Повышение порога может незаметно уменьшать каждое ядро, даже если число ядер остаётся прежним. Снижение порога может соединять близкие объекты тонкими мостиками. Поэтому визуальная проверка должна включать увеличенные фрагменты границ и числовые сводки Count, Area и интенсивности. Стабильный порог сохраняет биологически ожидаемую структуру этих показателей на разных полях.
Если используются адаптивные пороги, масштаб локальной области должен быть крупнее характерной структуры, которую сегментируют. Слишком малая область заставляет алгоритм сравнивать объект почти с самим собой и делает результат зависимым от локального шума; слишком большая постепенно приближает метод к глобальному. Масштаб выбирают в пикселях с учётом увеличения. После смены объектива или биннинга прежнее число пикселей уже описывает другую физическую область.

Как валидировать границы объектов
Надёжная валидация сегментации состоит из нескольких разных проверок. Первая — объектная: одна биологическая сущность должна соответствовать одной метке. Вторая — геометрическая: граница должна проходить по обоснованной структуре, а не систематически обрезать или захватывать фон. Третья — статистическая: распределения площади, интенсивности и количества не должны иметь искусственных пиков, возникающих из минимального размера, максимального размера или другого жёсткого ограничения.
Особое внимание уделяют трудным случаям: касающиеся ядра, очень слабые объекты, яркие агрегаты, объекты у края, участки с низким контрастом и локальными дефектами. Если pipeline корректно работает только на средней части распределения, итоговый набор измерений будет смещён. Часть редких объектов можно сознательно исключить, но критерий исключения должен быть записан и одинаково применяться ко всем сравниваемым условиям.

Для численной проверки полезно взять фиксированный небольшой набор изображений и не менять его во время настройки. После каждого существенного изменения pipeline на этом наборе сравнивают число объектов, долю объектов у края, медиану площади и несколько вручную просмотренных примеров. Такой подход снижает риск незаметно улучшить один тип кадра за счёт ухудшения другого. Если есть ручная эталонная разметка, её держат отдельно от изображений, на которых первоначально подбирались параметры.
Метаданные как основа воспроизводимого эксперимента
В сложном эксперименте metadata лучше проектировать до запуска анализа. Минимальный набор полей должен позволять однозначно восстановить источник каждого объекта: эксперимент, пластину или образец, лунку, поле зрения, временную точку и канал там, где они применимы. Если часть этих сведений существует только в имени папки, её тоже следует извлечь. Идентификатор ObjectNumber без идентификатора изображения не уникален на уровне всего эксперимента.
Регулярные выражения удобны, но чувствительны к изменению соглашения об именах. Хорошая практика — проверить таблицу Metadata после добавления первой серии новой партии. Если микроскоп добавил дополнительный суффикс или сменил число цифр, выражение может начать возвращать пустые значения. Ошибка особенно опасна, когда выражение продолжает совпадать частично: pipeline запускается, но связывает каналы не так, как ожидалось.
Для числовых полей важно различать строку и число. Временные точки 1, 2, 10 должны сортироваться численно. Аналогично Site 1 и Site 01 могут означать одну и ту же позицию для исследователя, но быть разными строками при сопоставлении. Нормализацию соглашений об именах лучше выполнить до массового запуска, чтобы не строить исключения внутри каждого следующего модуля.
Память, скорость и пакетная обработка
Время выполнения определяется не только количеством файлов, но и размером изображений, числом каналов, сложностью сегментации, количеством объектов и объёмом визуализации. Текстурные признаки на нескольких масштабах и операции над большими 3D-стеками заметно тяжелее простого подсчёта объектов. Во время разработки лучше сначала измерить время на небольшой репрезентативной части серии и понять, какой модуль является узким местом.
Окна отображения результатов полезны при настройке, но при массовой обработке сотен тысяч изображений они не нужны для каждого цикла. После валидации pipeline визуализацию ограничивают теми контрольными результатами, которые реально сохраняются или инспектируются. Это не меняет аналитический смысл модулей, но уменьшает накладные расходы интерфейса и число открываемых окон.
Для больших задач CellProfiler предусматривает пакетный режим и подготовку batch-данных. При переносе вычислений главное проверить доступность исходных файлов и корректность путей в целевой среде. Если абсолютный путь с рабочей станции не существует на вычислительном узле, алгоритм может быть полностью корректен, но не найдёт данные. Перед полным запуском делают короткую пробу на нескольких image sets именно в той среде, где будет выполняться партия.
Если процесс упирается в память, первым делом оценивают размер одного image set после загрузки всех каналов и промежуточных изображений. Несколько копий большого float-изображения требуют существенно больше памяти, чем исходный сжатый TIFF на диске. Неиспользуемые ветви pipeline и сохранение лишних промежуточных данных стоит убрать. Для 3D объём памяти растёт особенно быстро из-за числа вокселей.
Как читать выходные таблицы
CellProfiler хранит измерения на разных уровнях. Image-измерения описывают поле зрения: количество объектов, QC, значения threshold и другие сводки. Object-измерения содержат одну строку на объект определённого типа. Experiment-уровень относится к запуску или общей совокупности там, где модуль создаёт такие данные. При экспорте важно не смешивать уровни: среднее по всем строкам объектов не равно среднему по биологическим повторам.
Названия столбцов кодируют категорию, измеряемую величину, объект или изображение и дополнительные параметры. При широком pipeline это создаёт длинные имена, но они полезны для трассировки происхождения показателя. Перед статистическим анализом рекомендуется составить словарь выбранных признаков: что измерено, в каком канале, для какого объекта и в каких единицах или нормировке. Это особенно важно для нескольких копий одного Measure-модуля.
Связь таблиц обычно опирается на ImageNumber и идентификаторы объектов, а metadata позволяют агрегировать по экспериментальным единицам. Если отдельные таблицы импортируются в R, Python или другую среду, объединение сначала проверяют на небольшом наборе: число строк до и после join, уникальность ключей и наличие пропусков. Ошибочный many-to-many join способен многократно размножить строки и создать правдоподобные, но неверные статистики.
Сохранение воспроизводимости pipeline
Воспроизводимость означает возможность восстановить не только список модулей, но и входные данные, правила сопоставления, параметры и контекст эксперимента. Полезно сохранять pipeline вместе с коротким описанием биологического объекта, каналов, масштаба и причины ключевых порогов. Если параметры менялись после визуальной проверки, фиксируют, на каком валидационном наборе принято решение.
Изменение одного модуля может повлиять на десятки последующих столбцов. Например, новая сегментация меняет площадь, интенсивность, текстуру, соседство и треки одновременно. Поэтому нельзя считать новый результат эквивалентным старому только потому, что экспорт имеет те же имена столбцов. При существенном изменении сегментации новую конфигурацию проверяют как отдельный аналитический вариант.
Для длительных проектов полезно хранить неизменяемые копии pipeline, использованных для опубликованных или переданных результатов. Рабочую копию можно продолжать улучшать, но она не должна незаметно заменять рецепт, по которому уже получены числа. Имена файлов pipeline лучше дополнять осмысленным идентификатором эксперимента или ревизии, а не полагаться только на дату изменения файла.
Проверочный список перед массовым запуском
| Этап | Что проверить | Зачем |
|---|---|---|
| Входные файлы | В списке Images есть только исходные изображения нужной серии. | Исключает повторный анализ выходных TIFF, PNG и служебных файлов. |
| Входные файлы | Количество файлов соответствует ожидаемому числу полей и каналов. | Помогает заметить пропущенную съёмку или лишнюю копию до связывания каналов. |
| Входные файлы | Расширения и регистр имён учтены правилами фильтра. | Предотвращает незаметное исключение части файлов на другой системе. |
| Метаданные | Plate извлекается одинаково для всех пластин. | Не даёт смешать независимые экспериментальные единицы. |
| Метаданные | Well содержит ряд и столбец в одном стандарте. | Устраняет неоднозначность A1 и A01 при объединении. |
| Метаданные | Site имеет числовую или однозначно сортируемую форму. | Сохраняет правильное соответствие полей зрения. |
| Метаданные | Timepoint сортируется по времени, а не лексикографически. | Критично для TrackObjects и других последовательных операций. |
| Метаданные | Channel однозначно различает все каналы съёмки. | Не позволяет двум изображениям претендовать на одно логическое имя. |
| Метаданные | В таблице предварительного просмотра нет неожиданных пустых значений. | Пустой ключ часто превращается в ошибочную большую группу. |
| Метаданные | Составной ключ image set уникален. | Исключает дубли и неоднозначное связывание каналов. |
| NamesAndTypes | Каждый логический канал получает именно своё изображение. | Защищает от измерения сигнала в перепутанном канале. |
| NamesAndTypes | Диапазон интенсивности задан согласованно для всей сравниваемой серии. | Сохраняет сопоставимость числовых интенсивностей. |
| Groups | Граница группы совпадает с реальной независимой серией. | Не позволяет трекам или агрегатам переходить между экспериментами. |
| Groups | Число image sets в каждой группе правдоподобно. | Быстро показывает потерянные или лишние кадры. |
| Освещение | Функция коррекции плавная и не содержит контуров клеток. | Иначе коррекция частично удаляет биологический сигнал. |
| Освещение | Метод деления или вычитания соответствует рассчитанной функции. | Неверная пара меняет фон и масштаб сигнала. |
| Освещение | Края лунок или другие запрещённые зоны исключены маской, если нужно. | Не даёт тёмной рамке искажать фон. |
| Предобработка | Сглаживание не уничтожает самые мелкие нужные объекты. | Иначе чувствительность падает ещё до threshold. |
| Предобработка | Усиление признаков использует биологически разумный масштаб. | Снижает риск искусственно создавать структуру из шума. |
| Предобработка | После ImageMath проверен диапазон интенсивностей. | Предотвращает неожиданную работу порога на изменённой шкале. |
| Регистрация | После Align каналы совпадают на контрольных структурах. | Колокализация и per-object intensity требуют пространственного соответствия. |
| Регистрация | Пустые края после сдвига не попадают в область измерения. | Исключает искусственные низкие интенсивности. |
| Первичная сегментация | Диапазон диаметра соответствует текущему пиксельному масштабу. | Параметр из другого увеличения не переносится напрямую. |
| Первичная сегментация | Слабые положительные объекты не исчезают систематически. | Слишком высокий threshold создаёт смещение по интенсивности. |
| Первичная сегментация | Фоновые структуры не становятся массовыми объектами. | Слишком низкий threshold завышает Count и площадь. |
| Первичная сегментация | Соприкасающиеся объекты разделяются без чрезмерного дробления. | Балансирует ошибки merge и split. |
| Первичная сегментация | Поведение объектов у края соответствует плану анализа. | Морфометрия обрезанных объектов часто ненадёжна. |
| Вторичная сегментация | Канал действительно содержит границу клетки или нужной области. | Seed от ядра не компенсирует отсутствие информативной границы. |
| Вторичная сегментация | Cells не захватывают соседние клетки в плотных областях. | Предотвращает смешение per-cell интенсивностей. |
| Третичные объекты | Cytoplasm не имеет отрицательной или логически невозможной геометрии. | Ошибки Nuclei и Cells наследуются третичным объектом. |
| Фильтрация | Критерий FilterObjects заранее интерпретирован. | Исключение объектов не должно подгонять распределение под ожидания. |
| Фильтрация | Доля удалённых объектов контролируется по изображениям и условиям. | Разная доля удаления может сама стать источником смещения. |
| Форма | Обрезанные объекты не смешиваются с полными при анализе формы. | Периметр и форма неполного объекта не отражают реальную морфологию. |
| Интенсивность | Нет насыщения в каналах, используемых количественно. | Насыщенный пиксель теряет информацию о реальной яркости. |
| Интенсивность | Выбрано осмысленное различие mean и integrated intensity. | Эти показатели по-разному зависят от площади. |
| Интенсивность | Фон обрабатывается одинаково во всех условиях. | Разная коррекция способна имитировать изменение сигнала. |
| Текстура | Масштабы текстуры одинаковы для сравниваемых серий. | Иначе признаки описывают разные пространственные структуры. |
| Текстура | Число уровней квантования не меняется между группами. | Haralick-признаки зависят от дискретизации интенсивности. |
| Соседство | Радиус соседства имеет смысл в текущем пиксельном масштабе. | Одинаковое число пикселей при другом увеличении означает другую дистанцию. |
| Колокализация | Каналы зарегистрированы до вычисления совместных признаков. | Систематический сдвиг снижает или меняет метрики. |
| Колокализация | Область измерения исключает нерелевантный фон. | Обширный общий фон может искусственно влиять на корреляцию. |
| QC | Показатели качества просмотрены на реальных хороших и плохих кадрах. | Числовой порог должен иметь визуально подтверждённый смысл. |
| QC | Критерий FlagImage не удаляет целое биологическое условие. | Технический фильтр не должен превращаться в селективное исключение данных. |
| Трекинг | Кадры внутри группы идут в правильном временном порядке. | Неверный порядок делает любые связи объектов бессмысленными. |
| Трекинг | Радиус связи соответствует максимальному правдоподобному перемещению. | Слишком большой радиус повышает число перескоков между соседями. |
| Трекинг | Разрывы треков сопоставлены с кадрами сегментации. | Часто причина находится в исчезнувшем объекте, а не в алгоритме связи. |
| 3D | Каждый модуль pipeline явно поддерживает 3D. | Двумерная операция не обязана иметь объёмный аналог. |
| 3D | Шаг Z и размер пикселя известны и учтены там, где нужно. | Анизотропия влияет на геометрию и морфологические масштабы. |
| CalculateMath | Знаменатель отношения не содержит опасных нулевых значений. | Предотвращает бесконечности и искусственные выбросы. |
| CalculateMath | Имя производного признака однозначно описывает формулу. | Снижает риск перепутать направление отношения при анализе. |
| Экспорт | Сохраняются ImageNumber и нужные metadata. | Без ключей невозможно надёжно объединить таблицы и исходные изображения. |
| Экспорт | Набор столбцов ограничен нужными измерениями или осознанно оставлен полным. | Контролирует размер и интерпретируемость результата. |
| Экспорт | Шаблоны имён файлов уникальны для всех групп. | Исключает перезапись результатов разных полей или пластин. |
| Экспорт | Пробный CSV корректно открывается и содержит ожидаемые строки. | Проверяет разделитель, кодировку и завершённость экспорта до большой серии. |
| База данных | Соединение и права записи проверены на коротком запуске. | Ошибку инфраструктуры лучше обнаружить до многочасовой обработки. |
| SaveImages | Сохраняются только диагностически нужные стадии. | Ограничивает объём диска без потери контрольной информации. |
| SaveImages | Битность соответствует типу сохраняемого сигнала. | Не допускает ненужного снижения точности при дальнейшей обработке. |
| Производительность | На репрезентативном поднаборе известно время одного image set. | Позволяет оценить масштаб и найти медленный модуль. |
| Производительность | Неиспользуемые окна отображения отключены для массового запуска. | Уменьшает накладные расходы интерфейса. |
| Производительность | Для больших 3D данных проверен запас памяти. | Предотвращает падение после загрузки нескольких объёмных промежуточных изображений. |
| Пакетная обработка | Пути ввода доступны в целевой вычислительной среде. | Рабочий путь на одном компьютере может отсутствовать на другом. |
| Пакетная обработка | Короткий batch-запуск выполнен на тех же настройках, что и полный. | Проверяет среду и экспорт до запуска всей очереди. |
| Валидация | Настройки проверены не только на идеальном поле зрения. | Повышает устойчивость к вариативности реальной серии. |
| Валидация | Есть фиксированный набор сложных контрольных кадров. | Позволяет объективно сравнивать ревизии pipeline. |
| Валидация | Экстремальные значения измерений просмотрены на изображениях. | Выявляет артефакты сегментации, которые не видны по таблице. |
| Валидация | Изменение сегментации сопровождается повторной проверкой downstream-признаков. | Новые границы меняют форму, интенсивность, текстуру и соседство одновременно. |
| Документация | Записан масштаб изображения или увеличение, к которому относятся параметры. | Позволяет правильно переносить размеры и расстояния. |
| Документация | Зафиксирован смысл каждого логического имени канала и объекта. | Сохраняет биологическую интерпретацию при повторном использовании. |
| Документация | Сохранена копия pipeline, которой получен итоговый набор данных. | Не позволяет поздней правке незаметно изменить происхождение результатов. |
| Статистика | Определена реальная экспериментальная единица для агрегирования. | Множество клеток из одной лунки не являются независимыми биологическими повторами. |
| Статистика | Join таблиц проверен на уникальность ключей. | Предотвращает размножение строк при many-to-many объединении. |
| Статистика | QC-исключения применяются до сравнения условий по одному правилу. | Сохраняет одинаковое качество данных без селективной фильтрации. |
Когда CellProfiler подходит, а когда нужен другой подход
CellProfiler особенно силён, когда биологический объект можно надёжно определить правилами обработки и сегментации, а затем массово измерять одинаковым pipeline. Он хорошо подходит для клеточных и субклеточных объектов, многоканальной микроскопии, высокопроизводительных серий, морфометрии, интенсивностных и текстурных фенотипов. Его сильная сторона — прозрачная цепочка модулей, где можно увидеть, какое изображение и какой объект породили конкретное измерение.
Если задача требует сложной ручной ретуши фотографии, художественной коррекции или макетирования, это другой класс программ. Если границу объекта невозможно устойчиво выразить классическими правилами, обучаемая сегментация может быть более подходящим первым этапом; её результат затем можно передать в CellProfiler для измерений. Для whole-slide цифровой патологии специализированная среда может удобнее работать с гигантскими слайдами и аннотациями.
Выбор инструмента не отменяет валидацию. Даже нейросетевая маска остаётся гипотезой о границах объекта, пока её качество не проверено на репрезентативных данных. CellProfiler полезен и в комбинированном workflow: он может принять подготовленные изображения или разметки, выполнить прозрачные измерения и сохранить структурированные результаты с metadata.
Итоговый рабочий алгоритм
- Сформулируйте биологическую единицу измерения: ядро, клетка, цитоплазма, колония, пятно, сеть или другая структура.
- Проверьте исходные каналы, масштаб и диапазон интенсивности на нескольких файлах до настройки pipeline.
- Настройте Images и Metadata так, чтобы каждый файл имел однозначные экспериментальные признаки.
- Соберите image sets в NamesAndTypes и проверьте несколько комбинаций каналов вручную.
- Создайте Groups только там, где операции действительно должны быть независимы между сериями.
- Исправьте систематический фон или освещение до сегментации, если это требуется данными.
- Настройте сегментацию на репрезентативном наборе, включая слабые, плотные и артефактные поля.
- Отдельно проверьте ошибки слияния и дробления объектов и поведение у края изображения.
- Добавляйте измерения только после того, как границы объектов получили приемлемую валидацию.
- Для интенсивности различайте средние и интегральные показатели и контролируйте насыщение.
- Для текстуры, соседства и 3D связывайте масштабы параметров с физическим разрешением данных.
- Используйте Test Mode для отладки зависимостей и визуальной проверки промежуточных результатов.
- Сохраните несколько диагностических изображений, а не каждую техническую стадию без необходимости.
- Экспортируйте идентификаторы и metadata вместе с измерениями, чтобы сохранялась трассировка до исходного изображения.
- Перед полной серией выполните короткий запуск, откройте выходные таблицы и проверьте ключи объединения.
- Зафиксируйте pipeline и условия, к которым относятся его параметры, прежде чем переходить к статистическому анализу.
Выбор измерений под биологический вопрос

При нескольких каналах и типах объектов число комбинаций быстро растёт. MeasureObjectIntensity применяет выбранные изображения ко всем указанным объектам, поэтому лишняя комбинация может создавать столбцы, которые трудно интерпретировать. Разделение измерений на несколько экземпляров модуля полезно, если ядра требуется измерять только в ядерном канале, а клетки — только в канале мембраны. Так provenance каждого столбца остаётся очевидным.
Как разбирать неудачный pipeline по шагам
Диагностику лучше вести от входа к выходу. Сначала подтверждают, что в image set попали правильные файлы, затем проверяют метаданные и каналы, потом каждую стадию предобработки, сегментацию и только после этого измерения. Попытка исправлять странный CSV, не открыв соответствующее изображение и контуры, часто приводит к лишним фильтрам. В CellProfiler большинство причин можно локализовать по первому модулю, после которого визуальный или числовой результат перестаёт быть ожидаемым.
Если pipeline выдаёт ошибку о неизвестном изображении или объектах, проверяют последовательность и имена выходов. Переименование результата в раннем модуле требует обновить все downstream-ссылки. Если доступный список входов не содержит нужного объекта, вероятно, он ещё не создан к этому месту pipeline. Дублирование модуля также может создавать почти одинаковые имена, поэтому согласованная схема Nuclei, Cells, Cytoplasm, CorrectedDNA и подобных названий практичнее технических Image1 и Objects2.
Если ошибка возникает только на части серии, сравнивают проблемный image set с нормальным: размер изображения, число каналов, наличие пустых metadata, диапазон интенсивности, фактическое наличие объектов и группировку. Модуль, который устойчив на обычном поле, может столкнуться с полностью пустым изображением, необычно крупным объектом или отсутствующим каналом. Такой случай следует либо корректно поддержать правилами, либо явно исключить как технически недопустимый через QC, а не игнорировать молча.
Проверка результатов перед статистикой
Перед передачей таблиц в статистический анализ полезно сделать три уровня проверки. На уровне файлов сверяют число обработанных image sets с ожидаемым. На уровне изображений смотрят распределения Count и QC, выявляя нулевые, экстремальные и аномальные поля. На уровне объектов изучают площадь, интенсивность и ключевые фенотипические показатели, а затем визуально находят несколько объектов из обоих хвостов распределения. Это связывает абстрактные числа с реальными изображениями.
Любое исключение должно оставаться трассируемым. Если плохое поле удалено по QC, его идентификатор и причина должны быть известны. Если фильтруются объекты, полезно сохранить число объектов до и после фильтрации. Тогда можно увидеть, не удаляет ли правило непропорционально много объектов в одном экспериментальном условии. Сам факт автоматического применения одинакового порога ещё не гарантирует отсутствия смещения, если качество исходных изображений различается между условиями.
При агрегации важно сохранить иерархию данных. Среднее по клеткам одного поля, затем по полям лунки и по независимым повторам отвечает на другой статистический вопрос, чем одно среднее по всем клеткам сразу. CellProfiler предоставляет детальные измерения, но не определяет дизайн эксперимента за исследователя. Поля metadata должны позволять выполнить именно ту агрегацию, которая соответствует экспериментальной единице и схеме повторов.
Что делать после изменения протокола съёмки
Смена объектива, камеры, биннинга, экспозиции, окраски или способа подготовки образца требует повторной проверки pipeline. Изменение пиксельного масштаба влияет на диаметры объектов, радиусы сглаживания, текстурные масштабы и дистанции соседства. Изменение экспозиции влияет на распределение интенсивности и может потребовать другой проверки порога или насыщения. Даже если изображения визуально похожи, числовая эквивалентность параметров не гарантируется.
Перенос лучше проводить контролируемо: открыть несколько новых изображений старым pipeline, зафиксировать, какие этапы остаются корректными, и менять только необходимые параметры. Если проблема начинается уже на коррекции освещения, нет смысла одновременно перестраивать измерения. После адаптации те же контрольные метрики сегментации и QC сравнивают с предыдущим валидационным набором, но не требуют искусственно получить идентичные распределения, если биология или оптика действительно изменились.
Если новый протокол создаёт другой класс изображения, например вместо хорошо разделённых флуоресцентных ядер появляется слабоконтрастная фазово-контрастная структура, старый IdentifyPrimaryObjects может перестать быть подходящей отправной точкой. В таком случае корректнее пересмотреть предобработку или использовать обучаемую сегментацию, чем всё сильнее подстраивать порог классического модуля под данные, для которых его предпосылки плохо выполняются.
Краткая памятка по интерпретации
- Count — результат правил сегментации, а не прямое наблюдение; его проверяют на слияния, дробления и край изображения.
- Area в пикселях сопоставима только при одинаковом масштабе либо после корректного перевода в физические единицы.
- MeanIntensity описывает средний уровень сигнала внутри области, IntegratedIntensity дополнительно зависит от её площади.
- Texture зависит от масштаба и дискретизации серых уровней, поэтому её параметры являются частью определения признака.
- Neighbors зависит от пространственного масштаба и плотности объектов, а не только от индивидуального фенотипа клетки.
- Colocalization требует зарегистрированных каналов и контролируемого фона; корреляция не равна доказательству взаимодействия.
- TrackObjects наследует ошибки сегментации каждого кадра и требует правильного порядка времени внутри группы.
- QC-порог должен отделять технический дефект, а не удобным образом удалять неудобные биологические данные.
- Любая производная формула CalculateMath сохраняет смысл только при понятных исходных единицах и допустимом знаменателе.
- Экспорт считается завершённым только после проверки числа строк, ключей, metadata и нескольких визуально подтверждённых объектов.
Контроль завершения анализа — проверены входные файлы; сверены метаданные; сопоставлены каналы; проверены группы; оценена коррекция освещения; просмотрены контуры; проверены слабые объекты; проверены слипшиеся объекты; проверены объекты у края; сверен масштаб; исключено насыщение; проверены маски; сверены измерения интенсивности; сверены размеры и форма; проверены текстурные масштабы; проверены отношения объектов; проверены QC-метрики; сверен порядок кадров; проверена схема экспорта.