Jakie techniki przetwarzania obrazu są idealne do tego konkretnego dopasowania niezmiennego przesunięcia / skali?

17

Problem, który pierwotnie tutaj omawiałem , ewoluował i mógł być nieco prostszy, gdy przestudiowałem go trochę i uzyskałem nowe informacje.

Podsumowując, chciałbym być w stanie wykryć pokazany tutaj wzór za pomocą technik komputerowych / przetwarzania obrazu. Jak widać, idealny wzór składa się z czterech „pingów”. Rozpoznawanie obiektów powinno być:

  • Shift Invariant
    • W poziomie obraz będzie cykliczny. (tzn. Pchnij w prawo, wychodzi po lewej i odwrotnie).
    • (Na szczęście) W pionie, to nie jest cykliczne. (tzn. naciśnij przycisk do góry lub do dołu, a zatrzyma się).
  • Skala niezmienna (pingi mogą się różnić „grubością”, jak widać).

Mógłbym o tym mówić, ale załączyłem zdjęcia obejmujące to, co mam na myśli, patrz poniżej:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Oczywiście mogą być również w innej „skali”, jak widać z tej rodziny:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

I na koniec, oto kilka „realistycznych” scenariuszy tego, co faktycznie mogę otrzymać, gdzie byłby hałas, rzędy mogą „zanikać” w miarę schodzenia w dół i oczywiście obraz będzie miał wiele fałszywych linii, artefaktów itp.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

I oczywiście jako wielki finał istnieje wyraźna możliwość tego „ekstremalnego” scenariusza:

wprowadź opis zdjęcia tutaj

Dlatego jeszcze raz chciałbym prosić o wskazówki dotyczące tego, jakie techniki widzenia z komputerem-maszyną powinienem tutaj zastosować, aby jak najlepiej wykryć występowanie mojego wzorca, gdzie muszę być niezmiennym przesunięciem i skalować, jak widać, i być również w stanie uzyskać przyzwoite wyniki dla realistycznych scenariuszy. (Dobra wiadomość jest taka, że ​​NIE potrzebuję, aby była rotacyjna niezmiennie). Jedynym pomysłem, jaki udało mi się do tej pory wymyślić, jest korelacja 2D.

Powinienem dodać, że w rzeczywistości NIE mam kolorowych obrazów - po prostu dostanę martix liczb, więc przypuszczam, że mówimy o „skali szarości”.

Z góry dziękuję!

PS Za jaką wartość będę prawdopodobnie używał otwartego C V.

EDYCJA 1:

W oparciu o komentarze dodałem tutaj szczegóły, o które prosiłeś:

W przypadku cech definiujących dane możemy założyć, co następuje:

  • Pozioma długość każdego ping może się różnić, ale znam jego górną i dolną granicę. TAK dla czegokolwiek w tym zakresie, NIE dla czegokolwiek na zewnątrz. (Przykład, wiem, że długość pingów może wynosić na przykład od 1 do 3 sekund).

  • Wszystkie pingi muszą być „widoczne” dla TAK, jednak ostatniego wiersza może brakować i nadal chcę powiedzieć „TAK”. W przeciwnym razie NIE.

  • Długość w pionie („grubość”) każdego pinga może się różnić, ale znowu, także znać górną i dolną granicę. (Podobne do tego, co widać na tych obrazach). TAK dla czegokolwiek w tym zakresie. NIE dla czegokolwiek na zewnątrz.

  • Wysokość między każdym pingiem powinna zawsze być taka sama dla TAK. Jeśli nie są, to NIE. (Przykład, możesz zobaczyć, jak wszystkie pingi mają taką samą wysokość względem siebie, ~ 110 na osi pionowej). Tak więc 110 +/- 5 może być TAK, wszystko inne musi być NIE.

Myślę, że o to chodzi - ale daj mi znać, co jeszcze mogę dodać ... (Wszystko pokazane tutaj powinno zostać zarejestrowane jako TAK, tak przy okazji).

Spacey
źródło
Co masz na myśli mówiąc detect this pattern shown here? Czy jesteś zainteresowany izolowaniem czerwonej / żółtej linii, czy rzeczywiście chcesz wyrażenia, które oblicza relacje między takimi liniami. Tylko wyszukiwanie linii może wymagać jedynie pewnego progowania lub segmentacji. Czego naprawdę chcesz?
Dipan Mehta
@DipanMehta Przepraszamy za zamieszanie. Chcę to zrobić: po pierwsze, nie zwracaj uwagi na kolory (to po prostu powiedz, że zostały wykreślone), to, co będę miał, to tylko matryca liczb, więc w skali szarości. Po drugie, ponieważ nie ma kolorów, dbam tylko o „wzór”, który widzisz tam przy 4 powtórzeniach. Zatem detektor zobaczy warianty tego szablonu obrazu, jak pokazano na powyższych obrazkach, i powie „tak, ten wzór istnieje”. Przepraszam za zamieszanie, daj mi znać, jeśli mogę wyjaśnić coś jeszcze. Dzięki!
Spacey,
Ok, więc jeśli dobrze rozumiem, biorąc pod uwagę, że na górze jest pierwsza linia, chcesz dowiedzieć się, czy saldo również jest w tym samym miejscu. jeśli tak, doszedłbyś do wniosku, że wzór istnieje! Dobrze?
Dipan Mehta
@DipanMehta Tak, w zasadzie, można wykryć, czy istnieje powyższy wzór, wystarczająco silny, aby poradzić sobie z niezmiennością skali i wystarczająco silny, aby poradzić sobie z niezmiennością zmiany. Czy to ma sens? Dzięki,
Spacey,
1
Dostaję to, czy masz dostęp do danych źródłowych w rzeczywistym systemie, nad którym pracujesz. Jeśli to zrobisz, może istnieć lepsze podejście, które działa bezpośrednio na oryginalnych danych zamiast pośredniego formatu spektrogramu, na którym wyzerowałeś.
Jason R

Odpowiedzi:

6

Ogólnie rzecz biorąc, istnieją dwa podstawowe podejścia do rozwiązania tego problemu:

za. dopasowanie szablonu lub
b. dopasowanie do sparametryzowanego modelu.

Osobiście, biorąc pod uwagę prostotę modelu, wolałbym drugie podejście do tego problemu.

Krok 1: Zidentyfikuj obiekty BLOB ping

W pierwszej kolejności wyodrębnij „Pudełka” - zasadniczo żółte / niebieskie kwadraty. Najprostszą metodą może być po prostu próg obrazu. Wydaje się, że w tle nie ma zbyt wielu zmian, z wyjątkiem tego, że wraz ze wzrostem szumów wydaje się być dość podobny do pingów. Dlatego próg może być globalny na całym obrazie - i myślę, że będziesz w stanie uzyskać przyzwoity próg, który działałby na wszystkich obrazach. Próg powinien być jednak sprytny, aby można było zastosować metodę podobną do metody Otsu. Zobacz to i to, aby uzyskać więcej informacji.

Ulepszenie bloków

Jedną z dobrych rzeczy, które możesz zrobić, aby usunąć fałszywe punkty, które wyglądają podobnie do pierwszego planu ping, gdzie niektóre piksele wewnątrz pingów są również niebieskie. Potrzebujesz tutaj operacji morfologicznej o nazwie „Otwarcie”. Oto jedna z referencji HIPR . Tego typu operacje wymagają inteligentnego kształtu, który pomaga zachować podobne kształty i usunąć inne. W twoim przypadku możesz wybrać linie poziome. Na koniec masz piksele tła i pierwszego planu starannie oddzielające ping bez dotykania się.

Krok 2: Zaznacz / Zarejestruj bloki

Teraz, gdy masz najczystsze możliwe obiekty BLOB, czas oznaczyć je jako 1,2,3,4 lub A, B, C, D itd. Zwykle osiąga się to za pomocą tak zwanego prostego algorytmu. Przebiegnij przez każdy piksel, a jeśli dotyka on dowolnego zaznaczonego regionu, a także jest na pierwszym planie, przypisz go do tego segmentu, aby utworzyć nowy. Jeśli znajdziesz więcej niż 4 ważne segmenty, musisz wybrać te najbardziej odpowiednie. Zastosuj tutaj trochę heurystyki zamiast jakiegokolwiek algorytmu teoretycznego.

Krok 3: Modelowanie parametrów

Teraz, gdy otrzymamy najbardziej prawdopodobne 4 najlepszych kandydatów z 4 odpowiednich pingów, możesz zidentyfikować ramki ograniczające - zasadniczo górny lewy i prawy dolny róg (lub lewą i prawą większość pikseli, a także górne i dolne rzędy obiektu blob) . Znajdź obwiednię, możesz ukarać grzywną środek ciężkości każdego pola ping.

doja gdzie ja{1,2),3),4}do1do1

stąd można teraz obliczyć odległości między centroidami:

do1ja[x,y]={do1[x]-doja[x],do1[y]-doja[y]}

L.ja gdzie ja{1,2),3),4}

Zasadniczo masz 8 parametrów vecoter:

1.{do1[x],do1[y]}2..4do1ja[x,y]5..8L.ja

Krok 4: Klasyfikacja
W ostatnim kroku musimy teraz dokonać klasyfikacji, czy istnieje wzorzec ping tak lub nie.

Aby uzyskać coś takiego, możesz mieć ładną strukturę klasyfikatora Bayesa.

Masz dwie hipotezy

H0: Istnieje wzorzec pingowania.
H1: Wzorzec ping nie istnieje

do1,ja[x]

Najpierw przestudiuj wiele obrazów, o których wiesz, że należą do obrazu. Teraz możesz wykreślić różne histogramy lub zastosować metodę szacowania gęstości. Przeczytaj klasyfikację wzorców autorstwa Dudy Hart.

do1,ja[x]μ=20,σ=.1

do1,jaH.0P.[do1,ja[x]|H.0]

Teraz z danych testowych

P.[H.0|do1,ja[x]=x1]do1[x]x1H.0

Dlatego możesz obliczyć

P.[H.0 |do1,ja[x]]=P.[do1,ja[x]|H.0]P.[H.0]P.[do1,ja[x]]

Musisz połączyć to wyrażenie z wyrażeniem wektorowym i musisz włożyć dużo wysiłku, aby dokładnie wykonać oszacowanie parametru. Ale pozostawiam wam tutaj podstawowe podejście.

Proszę, zróbcie własną matematykę, to będzie długie, ale powinno być dość intuicyjne.

P.[H.0|wszystkie parametry]>1/2)

EDYCJA
Ponieważ już definiujesz szczegółowe kryteria 110 +/- 5 pikseli, ostatni krok może być prostszy. Prawdopodobnie nie musisz obliczać wszystkich tych prawdopodobieństw, jeśli twoje kryteria klasyfikacji są ustalone.

Dipan Mehta
źródło
Dziękuję Ci bardzo! Będę musiał to przetrawić i oddzwonić.
Spacey,
3

Wydaje mi się, że ten problem przypomina wykrywanie interwału powtarzania impulsu + problem estymacji. Z czasem będę musiał opracować tę odpowiedź, ale algorytmy, które działają dobrze w tym problemie, mają maksymalne prawdopodobieństwo na sieci .

Peter K.
źródło
Dziękuję, tak, z przyjemnością usłyszę twoje przemyślenia na ten temat. W międzyczasie przejrzę twój link.
Spacey,
Peter, czy miałeś kiedyś czas na przemyślenie tego, jak wspomniałeś? Chciałbym usłyszeć twoje przemyślenia na ten temat.
Spacey,
Właśnie zaczął majsterkować (kwiecień był odpisem). Mogę się mylić: sposób, w jaki artykuł Clarksona formułuje problem, jest inny ... pozwólcie, że wykopię jeszcze trochę.
Peter K.