2012-03-21 13 views
12

Projektuję system, który będzie skanował standardowe obrazy do obrazów (np. TBitmap). Chciałbym zidentyfikować znaki wyrównania na tych stronach i użyć lokalizacji tych znaczników przycięcia, aby obrócić stronę do właściwej orientacji (tak, aby góra była faktycznie w górę) i przyciąć obraz do lokalizacji znaczników wyrównania.Sposób lokalizowania znaczników wyrównania w obrazie

Przykładowy obraz typowy znak, że muszę znaleźć to:

Crop mark http://draftingmanuals.tpub.com/14065/img/14065_69_1.jpg

Jakie są techniki do oceny obraz uzyskany ze skanera, aby znaleźć różne znaki na obrazie? Musiałbym zlokalizować wiele znaków i ich punkt centralny.

+2

Wiem, że wiele SDK obrazowania tym LEADTools mają to wbudowane w. Nie wiem, jak wdrożyć go samodzielnie, ale myślę, że zrobię algorytm detekcji poziomej linii (w X stopni), a linia pionowa algorytm wykrywania, a następnie sprawdź wszystkie możliwe punkty + za 90-procentowy ciąg. http://www.leadtools.com/help/leadtools/v15/main/api/dllsteps/detectingregistrationmarks.htm –

+2

Hmm, nie jestem ekspertem, ale to nie jest znakiem upraw, jest to znak dla wyrównania drukarka do użycia podczas drukowania w 4 kolorach. Znaczniki przycięcia są prostymi liniami prostymi. – mj2008

+0

Warren P: Dzięki za link i sugerowaną metodę. Jestem otwarty na komercyjną bibliotekę, jeśli tego właśnie potrzeba. Mam również możliwość zmiany używanego symbolu, więc produkt LeadTools może być realnym rozwiązaniem. –

Odpowiedz

6

Po prostu burza mózgów niektórych możliwych podejść.

Template Matching

A metodę brute-force byłoby mieć bitmapę, co znak rejestracyjny powinien wyglądać. Następnie, dla każdego możliwego prostokąta na obrazku, który ma taką samą szerokość i wysokość jak szablonowa bitmapa, porównujesz piksele obrazu z pikselami szablonu. Jeśli większość pasujących pikseli pasuje do siebie, prawdopodobnie znalazłeś znak rejestracyjny. Jest to bardzo intensywne obliczeniowo, ponieważ trzeba zeskanować wszystkie możliwe pozycje, obroty, współczynniki skali itp. Możesz zredukować to, wykorzystując rzeczy, które znasz. Na przykład twój znak rejestracyjny jest symetryczny, więc nie musisz sprawdzać wszystkich możliwych obrotów. Być może znasz dokładną wielkość znaku, a tym samym unikniesz iteracji na różne czynniki skali. Na koniec możesz wiedzieć, że znaki rejestracyjne powinny znajdować się w pobliżu narożników, przez co możesz przeskoczyć przez większość środka obrazu.

ciekawostki

Znajdź sposób zidentyfikować „ciekawe punkty” w obrazie. Na przykład punkty, które wydają się być w środku przecięcia, można znaleźć, wykonując splot z małym jądrem, który wzmacnia piksele, które mają pasujące piksele w głównych kierunkach, a następnie proguje wynik. Daje to listę pikseli, które wydają się być punktami przecięcia (może być trochę szumu). Możesz przeszukać ten podzbiór współrzędnych dla "konstelacji", która wygląda jak pięć punktów przecięcia w twoim znaku rejestracyjnym. Może być konieczne zastosowanie dopasowania szablonów w celu znalezienia najbardziej prawdopodobnych pozycji, ale znacznie zmniejszyłoby to liczbę lokalizacji, obrotów i współczynników skalowania, które w innym przypadku trzeba by wypróbować.

Detection Feature

Istnieją algorytmy wykrywania linii, wykrywanie okręgu, itp może być w stanie uruchomić kilka z nich, a następnie szukać połączenia dwóch odcinków przejście wewnątrz okręgu. Może to być najsolidniejszy sposób, ale prawdopodobnie najtrudniej jest uzyskać pracę.

Niektóre etapy przetwarzania wstępnego, takie jak detektory krawędzi natarcia, progowania lub rozszerzania oraz filtry erozji, mogą również pomóc, jeśli obrazy nie są naprawdę czyste.

+2

Dlaczego nie używać OCR, jeśli znacznik przycięcia/wyrównania może być widoczny/traktowany jako znak, jeśli nie jest już właściwy? Przychodzi mi po głowie. – menjaraz

+0

menjaraz: Rozważałem również użycie OCR. Jednak nigdy wcześniej tego nie używałam. Czy można "trenować" narzędzie OCR, aby nauczyć się nowych postaci? Czy OCR mógłby zwrócić punkt środkowy? Lub, jeśli użyto symbolu "T", czy OCR może zwrócić przecięcie dwóch linii w "T"? –

2

Znalazłem francuskiPDF resource przez Colin BOUVRY czynienia z uznawaniu znaków i symboli wyrytych na szkle.

Jeśli nie czujesz się komfortowo po francusku, nie musisz się martwić: kilka cennych kodów źródłowych w Delphi znajduje się na dole dokumentu, proszę mi wierzyć!

Dzięki.

0

W przypadku znaku powyżej można użyć Hough transform dla okręgów i linii, a następnie sprawdzić, czy jakikolwiek krzyż jest w środku dowolnego okręgu, a następnie jest oznaczeniem. Nie jestem pewien co do delphi, ale algorytm Hough Transform jest dobrze znany i zaimplementowany w wielu bibliotekach.