работает как ведро с краской в ​​приложении для редактирования фотографий - поэтому, если не будет полного разделения ячеек, оно продолжит рисовать.

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

Эта тема подходит довольно близко к тому, чего я хочу достичь, и, на мой взгляд, использует изображение, которое должно быть еще сложнее анализировать, чем мое. Мне было бы интересно узнать размер этих цветных капель, а не их расстояние от верхнего левого угла. Я также следилэтот кодхотя я не особенно заинтересован в эталонном объекте (размеров в пикселях на данный момент будет достаточно, и их можно будет впоследствии преобразовать).

Вот входное изображение:

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

Изображение в RGB импортируется и преобразуется в 8-битный серый (32 лучше на основании моего тестирования в ImageJ, но я пока не выяснил, как это сделать в OpenCV).Края необязательно размыты по Гауссу для удаления шумаДетектор краев Canny улавливает линииМорфологические преобразования (эрозия + расширение) сделаны, чтобы попытаться закрыть границы немного дальше.

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

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

Я еще не совсем сгладил все пороги, и, следовательно, некоторые из кристаллов пропущены, но, поскольку они усредняются, это не представляет большой проблемы в данный момент.

Сценарий сохраняет обработанные изображения по мере их продвижения, поэтому я также хотел бы, чтобы конечное выходное изображение было похоже на изображение «помеченных BLOB-объектов» в связанном SO-потоке, но, возможно, для каждого BLOB-объекта были указаны его размеры.

Вот как будет выглядеть (неполный) идеализированный результат: каждый кристалл идентифицирован, аннотирован и измерен (я уверен, что смогу заняться измерением, когда доберусь до этого места).

Сокращены изображения и предыдущие попытки кода, так как они делают поток слишком длинным и более не актуальны.Редактировать III:

Согласно комментариям, алгоритм водораздела выглядит очень близко к достижению того, что я хочу. Проблема здесь в том, что очень сложно назначить области маркеров, которые требуются алгоритму (http://docs.opencv.org/3.2.0/d3/db4/tutorial_py_watershed.html).

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

Редактировать IV

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

Вот 1, слева направо и снизу справа соответствуют изображениям, выводимым в шагах Алекса ниже.

А вот и второй с большими кристаллами.

Вы заметите, что они имеют тенденцию быть более однородными по цвету, но с более трудными различить края. Что-то, что я обнаружил немного удивительным, это то, что заливка по краям немного переусердствовала с некоторыми изображениями, я бы подумал, что это будет особенно актуально для изображения с очень крошечными кристаллами, но на самом деле оно, кажется, имеет больший эффект на больших. Вероятно, есть много возможностей для улучшения качества входных изображений из нашей реальной микроскопии, но чем больше «слабины» программирование может извлечь из системы, тем легче будет наша жизнь!

Ответы на вопрос(1)

Ваш ответ на вопрос