Перейти к содержимому
Compvision.ru
mrgloom

подсчёт клеток крови

Recommended Posts

вроде уже спрашивал, но потерял тему.

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

пример

OYa7e.jpg

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

но хотелось бы как то учитывать круглую форму, пробовал watershed для разделения, не разделяет там где слипаются 3 - центры образуют треугольник.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может курватуры изофоты использовать, там ведь границы, в большинстве случаев близки к окружности:

http://www.science.uva.nl/research/publications/2008/ValentiCVPR2008/CVPR%2008.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что то я не понял как это использовать?

изолинии если найдем, то это будут как обычные границы.

мне кажется нужен метод, чтобы вписывать круги в фигуру и если их центры расходятся больше чем на какое то расстояние, то разъединять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там находятся центры кривизны границ.

Это больше напоминает преобразовние Хафа для окружностей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Предлагаю считать интегрально. Общую площадь клеток(черный цвет после порога) поделить на площадь средней клетки (средняя площадь блобса с отбросом резко выделяющихся по размеру).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Там находятся центры кривизны границ.

и что найдет если у нас 2 сильно пересекающиеся окружности?

может тупо хафом попробовать окружности находить? или так много лишних найдет?

Предлагаю считать интегрально. Общую площадь клеток(черный цвет после порога) поделить на площадь средней клетки (средняя площадь блобса с отбросом резко выделяющихся по размеру).

это я уже в первом посте написал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно провести операцию морфологического размыкания ( возможно, лучше даже просто эрозии). Таким образом уберем слипание и просто подсчитаем количество клеток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

посмотрите те моменты которые не обработал водораздел, вы думаете тут поможет размыкание?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте поэксперементировать)

а насчет окружностей, можно очевидные случаи выбросить(где один объект), а там где возможно слипание, натравливать функцию, которая вписывает как раз окружности(там должна быть задача оптимизации, края закидвыаем в МНК, получаем возможные центры, а потом варируем центра и пробуем еще вписать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
натравливать функцию, которая вписывает как раз окружности(там должна быть задача оптимизации, края закидвыаем в МНК, получаем возможные центры, а потом варируем центра и пробуем еще вписать)

а поподробнее?

допустим у меня есть контур из точек как мне находить предполагаемые центры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

но это никакой не МНК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не обязательно от непосредственных соседей. Просто нормали, принадлежащие контуру близкому к окружности будут пересекаться в центре этой окружности (или в центре кривизны кривой)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну а как нормали то сами считаются? мне нужно практическое руководство к действию )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нормаль в данном случае - направление градиента яркости.

Находим при помощи дифференциального оператора (Кэнни например) dx и dy и углы нормалей будут atan2(dy,dx);

Кстати для пакетной обработки (нахождения углов касательных для всего изображения) подходит cv::phase (с точным названием могу ошибаться). Есть еще полезная команда cv::magnitude

Ну а пересечение прямых я думаю найти проблем не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кстати, посмотрел на Ваш дистанс мап пришла одна мысль, на картинке (там где алгоритм не справился с разделением), наблюдаются вполне узнаваемые элементарные куски (крестообразной формы, которые имеют по 3 или 4 луча и равный угловой интервал между лучами - 90 или 120 градусов) может их по шаблону распознавать, и заменять на что то более разборчивое ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а поподробнее?

допустим у меня есть контур из точек как мне находить предполагаемые центры?

мнк окружностью

В пдф написано,как по наборам точек, найти предполагаемый центр окружности и радиус. Для получения более точных данных, мне кажется, надо брать координаты контуров не целочисленными. (т.е. между значениями построить функции, и обрезать на каком-нибуть яркости, чтобы вместо координат (30,30) было (29.3,29.5)).

http://www.rsdn.ru/forum/alg/607578.hot.aspx - вот здесь еще похожую тему обсуждают

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Полезная статейка, но в ней предполагается, что все точки принадлежат одной окружности.

Это не поможет нам разделить "слипшиеся" экземпляры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сомнения вот в этом: " по формуле находим окружности, которые там могут быть", ведь эта формула дает параметры только одной окружности.

Можно попробовать представить контур а полярных координатах, и найти минимумы, по минимумам нарезать (примерно равные) куски и их подставлять в МНК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

внешние которые круги их не просто одной кучей брать, а к примеру у нас внешних N точек. Берем одну (начальную)точку, желательно на перегибе. От нее берем следующие n1, строим окружность, смотрим еще сколько можем построить, подбираем варианты, потом берем другие n, то есть как задача оптимизации. Можно и без начальной обойтись, но тогда много лишних вариантов, а еще лучше придумать алгоритм для "характерных" точек(чтобы не разбивать на две дуги кривую,которая точно принадлежит одной окружности), которые описывают внешний контур,например: точки перегиба брать,либо если такая точка пропадает, просто смотреть максимальную длину окружности которая получиться и ее площадь(чтобы она максимально входила, то есть здесь снова оптимизационная задача возникает).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Берем одну (начальную)точку, желательно на перегибе.

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

тут теоретически можно и RANSAC наверно приспособить, только непонятно как выбирать кол-во точек, чтобы попытаться вписать в них окружность.

т.е. можно и в 2 точки вписать, но это не правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×