2015-11-16 2 views
7

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

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

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

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

enter image description here

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

enter image description here

Однако алгоритм еще не разделены друг от друга на 3 клетки, которые наклеить вместе в центре изображения.

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

+2

Посмотрите на эту страницу: http://stackoverflow.com/questions/5298884/finding-number-of-colored-shapes-from-picture-using -python и http://codegolf.stackexchange.com/questions/40831/counting-grains-of-rice Может быть похож на то, что вы ищете! –

+0

- размер каждой ячейки похож? – Micka

+0

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

ответ

2

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

  1. Отфильтруйте свое изображение так, как будто вы хорошо.
  2. Примените пороговое значение в зависимости от цвета или преобразуйте его в серый, затем установите пороговое значение. Постскриптум из приведенных вами примеров, кажется, что ваш цвет ячейки слишком насыщен. Таким образом, вы можете преобразовать его в HSV Space, а затем установить его по каналу S (скажите, нужна ли вам помощь здесь).
  3. Применить Opening Морфологические операторы на пороговом изображении. Постскриптум вы можете попробовать несколько размеров ядра и выбрать лучшее.
  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); 
+0

Как выполнить операции открытия на изображении? – Woody

+0

@woody отредактировал с кодом –

+0

Я пробовал ваш оператор открытия, и я меняю MORPH_RECT на MORPH_ELLIPSE, обнаружение лучше, чем раньше! Но есть еще ложные отрицательные значения, когда ячейка не обнаружена. – Woody

Смежные вопросы