Здравствуйте, Vintik_69, Вы писали:
V_>Здравствуйте, unreg_flex, Вы писали:
_>>На самом деле все решается очень просто (буквально в 10 строк)
V_>Чем-то напоминает randomized Hough. Устойчивость к шуму достигается тем же методом.
Вероятностный или иерархический или прогрессивный или ... (еще штук 10) Hough
имеет принципиальное отличие: он работает в пространстве счетчиков объектов.
Если это не так, то это не Hough.
Если полно шума то это пространство будет больше похоже на барханы в сахаре
чем на эверест. И все ухищирения которые применяют авторы этих
псевдохороших алгоритмов для поиска максимумов более походят на залатывание дыр.
Просто людям надо гранты получать, вот и развелось этих Hough.
А то что я там написал придумали в 60-х годах, причем сразу как понадобилось
решение подобных задач, и до нашего времени там никто ничего толком не улучшил,
поскольку улучшать уже нечего.
Здравствуйте, Micker, Вы писали:
M>Здравствуйте, Wasilij, Вы писали:
W>>Здравствуйте, Все!
W>>Кто-нибудь может подсказать решение вот такой задачи или где можно почитать...
W>>Есть картинка, на ней изображены круглые объекты. W>>Объекты примерно одинаковых размеров +/- 20%, форма приблизительно круглая. W>>Картинку можно считать черно-белой. W>>Фон светло серый, объекты темно-серые. W>>Закраска объектов неоднородная, то есть имеются светлые вкрапления и разрывы в границах. W>>Нужно подсчитать количество круглых объектов и выделить их как-нибудь на картинке.
W>>Заранее благодарю!
M>Ну задачка, даже в такой постановке не тривиальная M>Соответственно все её решения — достаточно приближённые.
M>Например, можно пойти таким путем: M>1) Выделить контуры на изображении (последовательности точек перепада яркости), векторизовать их. M>2) к координатам выделенных контуров применить приеобразование, которое даст из круга прямую (желательно, что бы по её коэффициентам определелялись однозначно радиус и координаты центра исходного круга). M>3) Сообственно, по количеству прямых (а алгоритмы их обнаружения достсточно известны) в новых координатах можно судить о количестве кругов у тебя на картинке.
M>Преобразование, приводящее из круга в прямую существует, но я его сейчас не помню. M>Определение того, что все точки лежат на одной прямой — считаеш k и b по двум точкам — проверяешь, удовлетворяют ли остальные точки этому уравнению.
Упомянутое преобразование переводящее ОКРУЖНОСТЬ в прямую это конформное отображение
комплексной функцией 1/Z с началом в точке лежащей на дуге окружности.
Только его не прикрутишь к этой задаче поскольку придется провести N преобразований по N точек (всего N*N)
а полученные прямые будут напоминать сдвоенные веники (гиперболический рост шума).
Выделить потом эти веники гораздо сложней чем исходные окружности.
Здравствуйте, unreg_flex, Вы писали:
_>>>По идее необходимо минимизировать функционал по параметрам a,b,r _>>>F(a,b,r)=Sqrt(Sum(Rho(P[i],C(a,b,r))^2,i=1..N)) _>>>C(a,b,r) — окружность (a,b — центр, r — радиус) _>>>P[i] — i-я точка _>>>N — число точек _>>>Rho(P,C) — некоторая мера 'расстояния' м/у точкой и окружностью _>>>Для большинства приложений подойдет обычный лоренциан _>>>Rho — должна быстро стремиться к 1 при удалении точки от окружности _>>>и равняться 0 если точка лежит на дуге.
А что означает "лоренциан" и "дуга"?
Т.е. как считать расстояние Rho() ?
Здравствуйте, piAnd, Вы писали:
A>Здравствуйте, unreg_flex, Вы писали:
_>>>>По идее необходимо минимизировать функционал по параметрам a,b,r _>>>>F(a,b,r)=Sqrt(Sum(Rho(P[i],C(a,b,r))^2,i=1..N)) _>>>>C(a,b,r) — окружность (a,b — центр, r — радиус) _>>>>P[i] — i-я точка _>>>>N — число точек _>>>>Rho(P,C) — некоторая мера 'расстояния' м/у точкой и окружностью _>>>>Для большинства приложений подойдет обычный лоренциан _>>>>Rho — должна быстро стремиться к 1 при удалении точки от окружности _>>>>и равняться 0 если точка лежит на дуге. A>А что означает "лоренциан" и "дуга"? A>Т.е. как считать расстояние Rho() ?
Есть стандартный метод наименьших квадратов МНК
(минимизируется сумма квадратов расстояний от всех точек до кривой),
а это так сказать "метод наименьших Rho".
Для МНК Rho=Distance(P[i],C[...])^2, те чем ближе точка к кривой
тем Rho меньше, вплоть до нуля (когда точка на кривой).
Rho может быть любой функцией в тч и не выпуклой.
Если есть хоть одна шумовая точка расположенная далеко от кривой то МНК не годится
тк квадрат расстояния от нее до кривой будет давать огромный вклад.
Однако определив расстояние до кривой например так:
/
| 0 если Distance(P[i],C[...])<=Epsilon
Rho(P[i],C[...]) = |
| 1 если Distance(P[i],C[...])>Epsilon
\
где Distance — обычное геометрическое расстояние
получим что сколь угодно далекие от искомой кривой шумовые точки будут вносить
лишь единичный вклад, а точки лежащие близко — нулевой
Лоренциан это функция вида f(x)=t+p/(x^n+q) (непрерывный аналог функции выше)
Под дугой в тексте выше подразумевалось множество таких (x,y) что (x-a)^2+(y-b)^2=r^2