2012-02-21 13 views
10

Chciałbym zastosować OCR do niektórych zdjęć 7-segmentowych wyświetlaczy na ścianie. Moja strategia jest następująca:Znajdź najlepsze Region zainteresowania po wykryciu krawędzi w OpenCV

  1. Covert Img do skali szarości
  2. Blur img do zredukowania fałszywych krawędzie
  3. progu img do binarnego img
  4. Zastosuj wykrywanie Canny krawędzi
  5. Set Region of Interest (ROI) na podstawie wzoru podanego przez sylwetkę o numerze
  6. Scale ROI i szablon pasują do regionu

Jak ustawić ROI, aby mój program nie musiał szukać szablonu przez cały obraz? Chciałbym ustawić moją bazę ROI na podstawie liczby znalezionych krawędzi lub czegoś bardziej użytecznego, jeśli ktoś może mi pomóc.

Szukałem Klasyfikacji Kaskadowych i Haara, ale nie wiem, jak zastosować ją do mojego problemu.

Oto obraz po czym wstępnie przetworzone i wykryte krawędź: an image after being pre-processed and edge detected

Oryginalny obraz

enter image description here

+2

Czy możesz również dodać oryginalny obraz? –

Odpowiedz

3

Jeśli jest to przedstawiciel liczby krawędzi będziesz mieć do czynienia z możesz wypróbować fajną strategię naiwną, taką jak przesuwanie okna ROI-finder na obrazie binarnym, który po prostu sumuje wartości pikseli i nie uruchamia się, chyba że wartość przekracza próg. To powinno zoptymalizować wszystkie puste powierzchnie.

Edytuj: Ok trochę mniej naiwne podejścia. Jeśli masz jakąś wiedzę a priori, jak wiesz, że zdjęcie jest dobrze wyrównane (i nie jest źle obrócone lub przekrzywione), możesz wykonać pewne przejścia z rusztem o niskiej i wysokiej niskiej wysokości, dostrojonym do przechwytywania krawędzi po obu stronach segment, używając różnych skal w obu wymiarach x i y. Dobre uderzenie w obu kierunkach da wskazówki nie tylko o ROI, ale o tym, na jaką skalę rozpocząć projekt (zbyt duże i zbyt małe kraty nie uderzą jednocześnie w obie krawędzie).

Możliwe jest wykrywanie blobów, a następnie stosowanie szablonów do obiektów typu BLOB po kolei (polegających na scalaniu obiektów typu blob, jeśli wynik dopasowania szablonu jest poniżej progu, w przypadku przypadkowego podziału na segmenty). Rozmiar obiektu typu blob może ponownie dać ci wskazówkę co do skali szablonu do zastosowania.

+0

To był jeden z moich pierwotnych planów. Chciałbym zobaczyć, czy jest coś mniej naiwnego, co mogłoby mi pomóc. – locorecto

0

Po pierwsze, biorąc pod uwagę fakt, że oryginalny obraz ma wyświetlacz LED, a więc oświetlony obszar ma większą intensywność niż jego grzbiet, mógłbym wykonać transformację koloru Yuv na oryginalnym obrazie, a następnie pracować z intensywnością samolot (Y).

Następnie, jeśli wiesz, że obraz jest dobrze wyrównany (to znaczy nie obrócony), sugerowałbym stosowanie oddzielnych poziomych i pionowych wykrywaczy krawędzi, a nie generycznego detektora krawędzi (nie jesteś zainteresowany liniami ukośnymi). Na przykład.

sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5) 
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5) 

W przeciwnym wypadku można użyć wykrywania konturów znaleźć granice cyfr (chociaż być może trzeba wykonać rozszerzają się do zamknięcia luki między segmentami LED.

Następnie skonstruowałbym histogramy poziome i pionowe wyjścia z tych wykrytych krawędzi lub konturu. Pomogą ci one zidentyfikować "zajęte" obszary obrazu, które zawierają wiele krawędzi.

Wreszcie, chciałbym próg samolotu Y i zbadać każdy z ROI z mojego szablonu.

Powiązane problemy