Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Алгоритм нахождения [Delphi, C++ Builder, Windows]


Страницы:   1 2 3

Pavelius ©   (2004-04-14 16:42:00) 

Так как этот форум был раньше и по алгоритмам, то вопрос такой.

Существует следующая задача.


Есть у меня на изображении закрашенная окружность.
Мне необходимо найти ее приблизительный радиус и центр.
Окружность может быть плохого качества (копия на копире),
недостаточная закрашенность всей окружности.


Помогите пожалуйста с алгоритмами для этой задачи.


Pavelius   (2004-04-15 08:02:00) [41]

Марканец пришли мне пожалуйста.

wiz, а ты не мог бы еще и алгоритмы описать:
а) Метод деформируемого многоугольника (Нелдера-Мида)
б) Метод покоординатного спуска (Хука-Дживса)

Буду премного благодарен


wiz   (2004-04-14 20:43:00) [42]

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

Ты представляешь свою картинку как функцию яркости от двух координат g(x,y) и задашь теоретическую функцию как:

      | A, sqrt(sqr(x-B)+sqr(y-C))<D
f(x,y)=|
      | 0, иначе

итого, у тебя четыре неизвестных (A,B,C,D).

функция ошибки стандартная: S = summ( sqr( f(x,y) - g(x,y) ) );
(сумма по всем x и y);

все эти входные данные подсовываешь какому-нибудь классическому алгоритму:
а) Метод деформируемого многоугольника (Нелдера-Мида)
(этот почти наверняка сработает)

или
б) Метод покоординатного спуска (Хука-Дживса)
(этот тоже наверное сработает, хоть он и проще)

(что-либо более навороченное брать imho не имеет смысла)


Мараканец   (2004-04-14 20:16:00) [43]

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


TButton   (2004-04-14 20:13:00) [44]

>а если края не четкие, т.е. чать пикселов обозночающих край отсутствует???
>и круг хоть и обозначен но закрашен с погрешностью.

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

но в целом алгоритм, имхо, правильный.


Мараканец   (2004-04-14 18:29:00) [45]

а если края не четкие, т.е. чать пикселов обозночающих край отсутствует???
и круг хоть и обозначен но закрашен с погрешностью.

может стоит написать код? я не думаю что он будет слишком сложным....

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


TButton   (2004-04-14 18:24:00) [46]

1. спрашиваем у пользователя цвет окружности. например предлагаем тыкнуть по ней.

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

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

3. сканируем строки сверху вниз, ищем первую и последнюю строку в которой есть пикселы принадлежащие окружности.

4. сканируем столбцы слева направо, ищем первый и последний столбец в котором есть пикселы принадлежащие окружности.

радиус - есть половина от среднего двух чисел
1 = последний столбец - первый
2 = последняя строка - первая

координаты центра
X = (последний столбец - первый)/2 + первый столбец
Y = (последняя строка - первая)/2 + первая строка


Мараканец   (2004-04-14 17:09:00) [47]

может так получится:
for r = 1 to X do
 begin
     находить количество точек имеющих преобладающий цвет %)
     ну можно собрать все точки и отсортировать и выбрать
     преобладающий цвет
     и так на каждом новом проходе сверять с преидущим
     значением пока не произойдет резкое изменение
     преобладающего цветацвета  
 end;

%)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо