Как да намеря модели (линии, кръгове) от списък с точки?

Имам списък с точки. Всяка точка е x и y координата (и двете са цели числа). Сега се опитвам да намеря известни модели, като линии, дъги или кръгове, знаейки, че точките не са идеално върху шаблона.

Кой е най-добрият начин да го направите? Нямам много улики, за да започна.

Редактиране: точките са подредени. Потребителят рисува нещо и програмата трябва да открие най-добрите модели. Например, ако е начертан триъгълник, той трябва да открие три линии.


person Burkhard    schedule 02.06.2009    source източник
comment
Всички точки съставляват ли един модел? Или търсите множество модели в един и същи списък с точки?   -  person Nosredna    schedule 02.06.2009
comment
Търся няколко модела в един и същи списък   -  person Burkhard    schedule 02.06.2009
comment
Просто прочетете редакцията си. Потребителят рисува. Това пикселна рисунка ли е и имате списък с пиксели? Или това е чертеж на линеен сегмент и имате списък с крайни точки?   -  person Nosredna    schedule 02.06.2009


Отговори (5)


разгледайте Transformation на Hough. това, което правите е: трансформирате изображението си в "кръгово" пространство и след това трябва само да намерите светлинни пиксели.

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

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

person Andreas Petersson    schedule 02.06.2009
comment
+1. Използвах това в миналото за откриване на топка с лазер SICK и работеше страхотно. - person rofrankel; 03.06.2009
comment
Освен това можете да използвате вариант на Hough Transform за откриване на линии, триъгълници и т.н. Може да е малко трудно да се изработят детайлите, но може да се направи. - person rofrankel; 05.06.2009
comment
Аз съм фен на Hough, но друга често срещана опция е да използвам RANSAC. Няколко системи за индустриално зрение разчитат на RANSAC или комбинация от RANSAC и Hough. (en.wikipedia.org/wiki/RANSAC) - person Rethunk; 16.01.2012

Класическият разпознавач е невронна мрежа. Невронните мрежи работят "добре" и изискват обучение по някакъв начин.

Математическите техники и принципи, лежащи в основата на невронните мрежи, могат да бъдат прехвърлени (с подходяща модификация) към повечето други разпознаватели, за които съм чел; например вериги на Марков, байесови модели.

person Paul Nathan    schedule 02.06.2009

Докато го ограничавате до основни форми, можете да изчислите усреднена „посока“ на текущия щрих и да създадете последователност от „щрихи“ от тях.

Вероятно е по-лесно да разпознаете форма въз основа на тази информация:

  • кръг има доста постоянна втора производна
  • „седем“ има черта вдясно, последвана от черта в долния ляв ъгъл
  • ...
person xtofl    schedule 02.06.2009

Ако погледнете разстоянието от някаква точка P до всяка от другите точки, отколкото ако P е центърът на кръг, ще получите някои много различни статистически ефекти.

Може да успеете да обърнете това и да намерите точки, които имат тези свойства. Като първо преминаване нещо като стандартното отклонение на разстоянията може да работи и за да намерите местоположението, можете да вземете производната на това по отношение на местоположението и да се опитате да го минимизирате. След като намерите минимум, опитайте да намерите набор от >3 точки, еднакво отдалечени от него.

Предполагам, че ще ви трябва нещо различно от стандартното отклонение, нещо, което се интересува по-малко от отклонения и повече от струпване.

Освен това, това няма да ви помогне много за линиите.

person BCS    schedule 02.06.2009

Тъй като получавате пиксели и те идват в ред, можете да започнете, като проверите наклона между, да речем, всеки 10-ти изчертан пиксел и да видите как се променя наклонът. Прекъсванията ви дават известна информация.

person Nosredna    schedule 02.06.2009