mrgloom 242 Жалоба Опубликовано August 8, 2012 вроде уже спрашивал, но потерял тему. нужно подсчитать кол-во клеток крови на изображении, проблема в том, что они слипшиеся. пример что можно сделать, выделить все контуры, понять какие близки к кругу и подсчитать среднюю площадь, потом исходя из площади остальных слипшихся блобов, вынести усредненный вердикт о том из скольких эл-ов они состоят. но хотелось бы как то учитывать круглую форму, пробовал watershed для разделения, не разделяет там где слипаются 3 - центры образуют треугольник. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 8, 2012 watershed дает можно еще посмотреть дистанс мэп Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 8, 2012 http://imagejdocu.tudor.lu/doku.php?id=gui:process:binary#ultimate_points может быть стоит как то по другому выращивать области из точек? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 8, 2012 Может курватуры изофоты использовать, там ведь границы, в большинстве случаев близки к окружности: http://www.science.uva.nl/research/publications/2008/ValentiCVPR2008/CVPR%2008.pdf Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 8, 2012 что то я не понял как это использовать? изолинии если найдем, то это будут как обычные границы. мне кажется нужен метод, чтобы вписывать круги в фигуру и если их центры расходятся больше чем на какое то расстояние, то разъединять. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 8, 2012 Там находятся центры кривизны границ. Это больше напоминает преобразовние Хафа для окружностей. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pavia00 32 Жалоба Опубликовано August 8, 2012 Предлагаю считать интегрально. Общую площадь клеток(черный цвет после порога) поделить на площадь средней клетки (средняя площадь блобса с отбросом резко выделяющихся по размеру). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 9, 2012 Там находятся центры кривизны границ. и что найдет если у нас 2 сильно пересекающиеся окружности? может тупо хафом попробовать окружности находить? или так много лишних найдет? Предлагаю считать интегрально. Общую площадь клеток(черный цвет после порога) поделить на площадь средней клетки (средняя площадь блобса с отбросом резко выделяющихся по размеру). это я уже в первом посте написал. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано August 9, 2012 Можно провести операцию морфологического размыкания ( возможно, лучше даже просто эрозии). Таким образом уберем слипание и просто подсчитаем количество клеток. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 9, 2012 посмотрите те моменты которые не обработал водораздел, вы думаете тут поможет размыкание? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 9, 2012 я вообще думаю, что надо начинать с краёв вписывать круги, в самые вероятные позиции, а потом это место как бы вычитать, если после вычитания останется, что то в центре, то такая задача скорее всего не решаема или можно прикинуть только по площади. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано August 9, 2012 попробуйте поэксперементировать) а насчет окружностей, можно очевидные случаи выбросить(где один объект), а там где возможно слипание, натравливать функцию, которая вписывает как раз окружности(там должна быть задача оптимизации, края закидвыаем в МНК, получаем возможные центры, а потом варируем центра и пробуем еще вписать) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 9, 2012 натравливать функцию, которая вписывает как раз окружности(там должна быть задача оптимизации, края закидвыаем в МНК, получаем возможные центры, а потом варируем центра и пробуем еще вписать) а поподробнее? допустим у меня есть контур из точек как мне находить предполагаемые центры? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 9, 2012 Берем попарно нормали, пресекаем их, в наиболее вероятных местах центров будут повышенная концентрация пересечений, дальше можно скормить эти данные кластеризатору, но это никакой не МНК. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 10, 2012 нормали от соседних пар точек контура? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 10, 2012 Не обязательно от непосредственных соседей. Просто нормали, принадлежащие контуру близкому к окружности будут пересекаться в центре этой окружности (или в центре кривизны кривой) Из-за неровности границ может потребоваться размытие картинки, или вычисление нормалей при помощи фильтра с большим ядром. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 10, 2012 ну а как нормали то сами считаются? мне нужно практическое руководство к действию ) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 10, 2012 Нормаль в данном случае - направление градиента яркости. Находим при помощи дифференциального оператора (Кэнни например) dx и dy и углы нормалей будут atan2(dy,dx); Кстати для пакетной обработки (нахождения углов касательных для всего изображения) подходит cv::phase (с точным названием могу ошибаться). Есть еще полезная команда cv::magnitude Ну а пересечение прямых я думаю найти проблем не будет. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 10, 2012 Кстати, посмотрел на Ваш дистанс мап пришла одна мысль, на картинке (там где алгоритм не справился с разделением), наблюдаются вполне узнаваемые элементарные куски (крестообразной формы, которые имеют по 3 или 4 луча и равный угловой интервал между лучами - 90 или 120 градусов) может их по шаблону распознавать, и заменять на что то более разборчивое ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано August 11, 2012 а поподробнее? допустим у меня есть контур из точек как мне находить предполагаемые центры? мнк окружностью В пдф написано,как по наборам точек, найти предполагаемый центр окружности и радиус. Для получения более точных данных, мне кажется, надо брать координаты контуров не целочисленными. (т.е. между значениями построить функции, и обрезать на каком-нибуть яркости, чтобы вместо координат (30,30) было (29.3,29.5)). http://www.rsdn.ru/forum/alg/607578.hot.aspx - вот здесь еще похожую тему обсуждают 2 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 11, 2012 Полезная статейка, но в ней предполагается, что все точки принадлежат одной окружности. Это не поможет нам разделить "слипшиеся" экземпляры. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано August 11, 2012 я хотел сказать, что допусти нам дам контур (мы знаем, что он состоит из слипшихся окружностей). Берем сначала внешние контуры, по формуле находим окружности, которые там могут быть. Если внутри есть окружности, которые пересекаются с внешними, значит останется непокрытая площадь. И тогда в эту площадь будем вписывать еще окружности. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 11, 2012 Сомнения вот в этом: " по формуле находим окружности, которые там могут быть", ведь эта формула дает параметры только одной окружности. Можно попробовать представить контур а полярных координатах, и найти минимумы, по минимумам нарезать (примерно равные) куски и их подставлять в МНК. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано August 11, 2012 внешние которые круги их не просто одной кучей брать, а к примеру у нас внешних N точек. Берем одну (начальную)точку, желательно на перегибе. От нее берем следующие n1, строим окружность, смотрим еще сколько можем построить, подбираем варианты, потом берем другие n, то есть как задача оптимизации. Можно и без начальной обойтись, но тогда много лишних вариантов, а еще лучше придумать алгоритм для "характерных" точек(чтобы не разбивать на две дуги кривую,которая точно принадлежит одной окружности), которые описывают внешний контур,например: точки перегиба брать,либо если такая точка пропадает, просто смотреть максимальную длину окружности которая получиться и ее площадь(чтобы она максимально входила, то есть здесь снова оптимизационная задача возникает). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 13, 2012 Берем одну (начальную)точку, желательно на перегибе. определение перегиба, это такая же нетривиальная задача как определения угла. во всяком случае зависит от масштаба, т.е. получается от настроек алгоритма. тут теоретически можно и RANSAC наверно приспособить, только непонятно как выбирать кол-во точек, чтобы попытаться вписать в них окружность. т.е. можно и в 2 точки вписать, но это не правильно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах