9

Mam listę punktów. Każdy punkt jest współrzędną x i y (obie są liczbami całkowitymi). Teraz próbuję znaleźć znane wzorce, takie jak linie, łuki lub okręgi, wiedząc, że punkty nie są idealnie dopasowane do wzorca.Jak znaleźć wzory (linie, okręgi, ...) z listy punktów?

Jaki jest najlepszy sposób na zrobienie tego? Nie mam wielu wskazówek, aby zacząć.

Edytuj: punkty są uporządkowane. Użytkownik rysuje coś, a program powinien wykryć najlepsze wzorce. Na przykład, jeśli trójkąt jest narysowany, powinien wykryć trzy linie.

+0

Czy wszystkie punkty składają się na jeden wzór? A może szukasz wielu wzorów na tej samej liście punktów? – Nosredna

+0

Szukam wielu wzorców z tej samej listy – Burkhard

+0

Po prostu przeczytaj swoją edycję. Użytkownik rysuje. Czy to jest rysunek w pikselach i masz listę pikseli? Czy jest to rysunek linii i masz listę punktów końcowych? – Nosredna

Odpowiedz

9

spójrz na Hough Transformation. to, co robisz, to: przekształcasz swój obraz na "okrąg", a następnie musisz tylko znaleźć jasne piksele.

znajdowanie pikseli świetlnych na obrazie jest dość łatwe, wystarczy zastosować odcięcie.

liczba jasnych regionów pikseli to liczba okręgów. możesz odtworzyć swoją oryginalną pozycję na obrazie, stosując funkcję odwrotną.

+0

+1. Transformacja Hough jest zwykłym rozwiązaniem tego problemu. – erickson

+0

+1. Używał tego w przeszłości do wykrywania kuli za pomocą lasera SICK i działał świetnie. – rofrankel

+0

Można również użyć odmiany transformacji Hough do wykrywania linii, trójkątów itp. Może być trochę trudne do opracowania szczegółów, ale można to zrobić. – rofrankel

3

Klasycznym urządzeniem rozpoznającym jest sieć neuronowa. Sieci neuronowe działają "w porządku" i wymagają szkolenia w pewien sposób.

Techniki matematyczne i zasady leżące u podstaw sieci neuronowych można przenieść (z odpowiednią modyfikacją) do większości innych czytników, o których czytałem; np. łańcuchy Markowa, modele bayesowskie.

1

Dopóki ograniczysz ją do podstawowych kształtów, możesz obliczyć uśredniony "kierunek" bieżącego skoku i utworzyć z nich sekwencję "pociągnięć".

To chyba łatwiej rozpoznać kształt na podstawie tej informacji:

  • okrąg ma dość stała druga pochodna
  • a 'siedem' ma skok w prawo, a następnie przez stroke lewy dolny
  • ...
1

I spojrzeć w takiej odległości od pewnym momencie P do każdego z pozostałych punktów, niż gdyby P jest ośrodkiem CI rcle, dostaniesz bardzo wyraźne efekty statystyczne.

Może być możliwe odwrócenie tego stanu i znalezienie punktów, które mają te właściwości. W pierwszym przebiegu może się sprawdzić coś w rodzaju odchylenia standardowego odległości i znaleźć lokalizację, z której można by wyprowadzić pochodną w odniesieniu do lokalizacji i podjąć próbę jej zminimalizowania. Po znalezieniu minimum spróbuj znaleźć zestaw> 3 punktów w równej odległości od niego.

Oczekuję, że będziesz potrzebować czegoś innego niż standardowe odchylenie, coś, co jest mniej zainteresowane wartościami odstającymi i bardziej zainteresowanymi zblokowaniem.

Co więcej, nie zrobi ci to wiele dobrego dla linii.

1

Ponieważ otrzymujesz piksele i są one w porządku, możesz zacząć od sprawdzenia nachylenia między, powiedzmy, co 10 pikselem i zobaczyć, jak zmienia się nachylenie. Nieciągłości dostarczają pewnych informacji.