С ++ Биологический подсчет клеток с помощью OpenCV

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

Некоторые из методов, которые я использовал:

  1. Нахождение контуров отфильтрованного изображения. (плохо работает с клетками, которые находятся близко друг к другу)
  2. Размытие по Гауссу и поиск локальных максимумов на изображении. (та же проблема, что и 1)
  3. Обнаружение Canny Edge (выходной результат обнаруживает не сегмент ячеек)

Это пример изображения, которое мне нужно, чтобы подсчитать общее количество ячеек.

введите описание изображения здесь

Мой текущий алгоритм подсчета работает лучше, если клетки не находятся близко друг к другу. Например, вот так:

введите описание изображения здесь

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

Итак, что я могу сделать, чтобы определить общее количество ячеек на изображении с наименьшим ложным отрицательным / положительным?

8

Решение

Ваш подход почти в порядке. Однако для этого нужны некоторые дополнительные шаги.
Вам нужно что-то под названием Морфологические операции.

  1. Отфильтруйте свое изображение так, как вам нравится.
  2. Примените пороговое значение в зависимости от цвета или преобразуйте его в серый, затем пороговое значение. Постскриптум из приведенных вами примеров кажется, что цвет вашей ячейки слишком насыщенный. Таким образом, вы можете преобразовать его в HSV Space, а затем портировать его, используя S-канал (скажите, если вам нужна помощь здесь).
  3. Применить открытие Морфологические операторы на пороговом изображении. Постскриптум Вы можете попробовать несколько размеров кернала и выбрать лучший.
  4. Возьмите контуры и делайте то, что вы делали.

Открытие:

cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5), cv::Point(1, 1));
cv::morphologyEx(img, img, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1);
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector