Rozpoznawanie obrazu

0

Czesc wszystkim. Mam pewien problem i mam nadzieje ze ktos z forum pomoze mi albo podsunie jakiegos linka ktory mi pomoze. Mianowicie, mam do napisania program ktory pobiera ze skanera obraz (formularz, program bedzie obslugiwal tylko jeden typ formularza) a nastepnie ma odczytac z tego formularza zaznaczone pola i gdzies zarchiwizowac. Z odczytaniem ze skanera i zapisaniem jakos chyba sobie poradze ale nie wiem jak ugrysc rozpoznawanie zaznaczonego pola. Ma ktos moze pomysl jak to zrobic? Przypominam ze program ma obslugiwac jeden typ formularza (wiec chyba powinno byc latwiej).

0
  1. musisz się dokładnie przyjrzeć formularzowi:
    wybierz charakterystyczne i wyraźne elementy formularza rozmieszczone w różnych jego częściach. Najlepiej by były umieszczone w pobliżu każdego rogu kartki.

  2. do każdego z wybranych elementów charakterystycznych wymyślasz sobie funkcję, która będzie miała minimum zależnie od pewnych parametrów. Te parametry to położenie (x,y) i obrót.

przykładowo dla krzyżyka, w kolorze czarnym: parametry wyznaczają ci dwa przecinające się odcinki. Dla tych odcinków liczysz sumę kwadratów odstępstwa od koloru czarnego. Do tego brzegi krzyżyka wyznaczają ci obszar (8 odcinków), w którym oczekiwany kolor powinien być tłem (biały).
Dla tych odcinków liczysz podobnie sumę kwadratów odstępstw od koloru tła i sumujesz ją z poprzednią sumą.
Następnie zmieniasz tak parametry (położenie i kąt) by znaleźć minimum tej funkcji dla posiadanego skanu.
Oczywiście to jest tylko filozofia jak to powinno się robić wiele rzeczy można tu zoptymalizować.

  1. po wyznaczeniu pozycji elementów charakterystycznych możesz interpolować pozycję innych charakterystycznych elementów (dla kontroli poprawności). A po tej weryfikacji, powinieneś być już w stanie wyznaczyć pozycję pól do wypełniania w formularzu i dokonać ich analizy.
0

Chyba rozumiem o co Ci chodzi. Czyli w rogach bede mial charakterystyczne elementy (np. krzyzyki) i na ich podstawie bede mogl tak jakby skalibrowac obrazek zeby wiedziec gdzie szukac pul formularza. Dobrze zrozumialem? Czy sa jakies bilioteki/funkcje w c++ ktore mogly by w tym pomoc? Czy najlepiej uzywac formatu bmp do przechowywania obrazka?

0

Pokaż skan tego formularza.

0
skoczo napisał(a)

Chyba rozumiem o co Ci chodzi. Czyli w rogach bede mial charakterystyczne elementy (np. krzyzyki) i na ich podstawie bede mogl tak jakby skalibrowac obrazek zeby wiedziec gdzie szukac pul formularza. Dobrze zrozumialem? Czy sa jakies bilioteki/funkcje w c++ ktore mogly by w tym pomoc? Czy najlepiej uzywac formatu bmp do przechowywania obrazka?

format jest malo istotny, byle wychodzilo bez wielkich znieszktalcen -- w programie, w pamieci, do obrobki, i tak bedziesz to trzymalo jako bitmape nieskompresowana

@krzyzyki - haslo brzmi: formularz, kotwice, kalibracja, obroty, przeksztalcenia obrazu [do prostokata]

0

Niestety ale jeszcze nie mam teg formularza. Bede go mial w przyszlym tygodniu prawdopodobnie.

0

Jeśli wymóg ciemnego tła nie stanowi problemu (tj. zakładamy, że tło wokół formularza jest ciemniejsze od tła samego formularza) można łatwo wykryć krawędzie kartki dopasowując biały prostokąt na czarnym tle jakąś metodą optymalizacji. Błąd dopasowania można liczyć jako błąd średniokwadratowy odchyleń jasności między skanem a rysunkiem dopasowywanym (prostokątem). Do wyznaczenia są zaledwie 4 parametry: położenie x oraz y, kąt i skala.
Następnym krokiem może być dopasowanie samej ramki prostokąta (tj. przy liczeniu błędu ignorować jego środek) aby wyeliminować przekłamania pochodzące ze środka formularza (ciemne miejsca). Jeśli formularz jest w miarę równo docięty to powinno to wystarczyć. Może być też wstępem do dalszych poszukiwań. Podobnie można też dopasowywać wzór formularza.

0

Zawsze można zaprojektować formularz tak by wyglądał jak blankiet lotto.

1 użytkowników online, w tym zalogowanych: 0, gości: 1