2010-02-27 20 views
5

Mam dość prostą sytuację. Po prostu nie znam żadnych konkretnych terminów do wyszukania. Mam jeden obraz, w tym obrazie mam kilka innych obrazów, które podążają za podstawowym wzorem. Są to prostokąty i prawdopodobnie będą mieć obraz punktu orientacyjnego, na którym można polegać. Ważną częścią jest to, że muszę wykryć obrócone/pomniejszone pod-obrazy.Znajdowanie podobrazów na obrazku

Zasadniczo potrzebuję tego, aby podzielić "wizytówki" z jednego obrazu na odpowiednio wyrównane pojedyncze obrazy.

Proszę wybaczyć moje złe umiejętności malowania! http://yfrog.com/eaproblemjj Ponieważ projektuję również karty do skanowania, mogę wstawić dowolny symbol lub coś, co ułatwiłoby wykrywanie (tak jak powiedziałem punkt orientacyjny)

+0

Czy są to jednolite kafelki lub czy próbujesz wykryć mniej więcej prostokątne obrazy o różnych rozmiarach i współczynnikach kształtu? – Josh

+1

Proszę dodać przykładowy obraz do swojego pytania! Również - czy poprawnie rozumiem, że masz już te podobieństwa znane? Jeśli nie, co o nich wiesz? – AVB

+0

Próbowałem wyjaśnić moje pytanie i dodałem straszny przykład bólu, proszę wybaczyć bzdury. Nie znam dokładnie tego, co w podobrazi, ponieważ będą mieć pewne modyfikacje użytkownika, które będę musiał pragmatycznie przetworzyć. Ale to jest łatwe, po tym, jak je rozdzieliłem i właściwie zorientowałem. – Lex

Odpowiedz

2

Jeśli twój przykład jest reprezentatywny (co z jakiegoś powodu wątpię), Transformacja Hough jest twoim przyjacielem (google to, jest mnóstwo objaśnień i kodu). Dzięki niemu będziesz w stanie wykryć prostokąty.

Niektóre przykłady Hough przekształcać w C# są http://www.koders.com/csharp/fid3A88BC1FF95FCA9D6A182698263A40EE7883CF26.aspx i http://www.shedletsky.com/hough/index.html

Jeśli to, co rzeczywiście się dzieje, że można skanować kilka kart i masz pewną kontrolę nad procesem, następnie sugeruję, aby upewnić się tam nie jest pokrywają się między kartami i zapewniają kontrastowe tło (coś bardzo odmiennego od kart). Wtedy każda detekcja krawędzi przybliży nas do tego, co narysowałeś w swoim przykładzie, a potem możesz użyć transformacji Hough.

Alternatywnie można zaimplementować papier http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.4239, który wykorzystuje transformację Hough do bezpośredniego wykrycia prostokątów bez wykrywania krawędzi.

Jeśli nie rozumiem Twojego problemu lub potrzebujesz wyjaśnienia, edytuj dalej swoje pytanie i publikuj komentarz na temat tej odpowiedzi.

+0

Muszę mieć naprawdę pecha, ale nie mogę znaleźć żadnego przykładowego kodu przy użyciu transformacji Hough, oczywiście znalazłem artykuł wiki, ale nie wydawałem się nim owijać. Rzeczywiście nie będę w stanie kontrolować procesu skanowania, z wyjątkiem projektu fizycznych kart. Jeśli to pomoże, pomyśl tylko o tym, że chcę pobrać zeskanowany obraz standardowych wizytówek (możemy założyć, że wszystkie są prostokątne i mają logo w lewym górnym rogu) i podzielić je na prawidłowo zorientowane pojedyncze karty. – Lex

+0

Karty będą białe, na czarnym tle i będą miały czarny tekst/symbole. – Lex

+0

Zobacz zaktualizowaną odpowiedź. Z białym na czarnym powinieneś być w porządku z prawie każdą metodą. Nie mogłem znaleźć dobrego wyjaśnienia transformacji Hough w Internecie; Prawdopodobnie książka przetwarzania obrazu jest najlepszym rozwiązaniem, jeśli potrafisz zrozumieć, co dzieje się w Internecie. To nie jest trywialna sprawa, ale też nie jest skomplikowana. – AVB

1

Wypróbuj AForge.NET (jeśli używasz C#). Posiada DocumentSkewChecker, który obliczy kąt obróconego obrazu.