Musiałem ostatnio napisać aplikację do rozpoznawania liter (OCR).
W zasadzie to wszystko mam gotowe - sieć neuronową, konwersje itd. Działa jak działa - jednak jestem średnio zadowolony z rezultatów.
Niewielkie odstępstwa od normy powodują, że litery nie są rozpoznawane. Przyczyną jest oczywiście zła reprezentacja litery.
Dajmy na to, że mamy zastosowaną bitmapę 20x20 pixeli. Celem jest konwersja na tablice double[] (C#). Zastosowałem zwykłą tablicę o rozmiarze 20*20. Są to po kolei piksele czytane liniami.
Jestem w stanie sobie uświadomić, że taka reprezentacja jest do kitu. Wystarczy, że linia pisma jest niżej niż oczekiwana, i wszystkie wartości się przesuwają o 20 pozycji.
Lepsza byłaby reprezentacja taka, gdzie niewielkie odstępstwa na osi x lub y zmieniają również (w niewielkim stopniu!) wektor "jednowymiarowy".
Myślałem nad podwójnymi koorynatami oraz kodem Gray'a .. ale nic nie udało mi się jeszcze zaimplementować.
Czy ktoś z was spotkał się z takim problemem?
Szukałem na google odpowiedzi, ale wszelkie artykuły stosują również moją reprezentację :/