Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyodrębnianie poszczególnych elementów obrazka

Ostatnio zmodyfikowano 2014-09-22 15:57
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
Wyodrębnianie poszczególnych elementów obrazka
» 2014-09-21 11:40:11
Witam!

Zabrałem się za pisanie programu rozpoznającego pismo.
Potrzebuję algorytmu, który z obrazku z białym tłem, na którym są zapisane litery (w pewnych odstępach), dla każdej liter wyznaczyłby prostokątny obszar, który ona zajmuje.
Można założyć, że litery będą tylko i wyłącznie czarne, a tło całe białe (mam już algorytm  do progowania)

C/C++
std::vector < unsigned char > px; // dane pikseli w postaci ciągłej (RGBARGBARGBARGBA...)
unsigned w, h;

lodepng::decode( px, w, h, infile ); // uzywa LodePNG do kodowania i dekodowania png'ów

for( int i = 0; i < px.size(); i += 4 )
{
    unsigned char & r = px[ i ], & g = px[ i + 1 ], & b = px[ i + 2 ], & a = px[ i + 3 ];
   
    // i co teraz?
}

lodepng::encode( outfile, px, w, h );

Gdyby ktoś dysponował podobnym algorytmem, lub wiedział gdzie go znaleźć to pisać :)

Takie szybkie info o co chodzi
Takie szybkie info o co chodzi
P-117275
OSA_PL
» 2014-09-22 12:27:47
Pierwsze co mi wpada na myśl to po znalezieniu czarnego piksela użyć algorytmu flood fill i zapisać minimalną i maksymalną wartość x i y czarnych pikseli.
P-117331
kubawal
Temat założony przez niniejszego użytkownika
» 2014-09-22 14:52:12
Mi bardziej chodzi o wykrycie, który piksel należy do którego obiektu.

Takie samo pytanie zadalem na stackoverflowie i wyszedł całkiem fajny algorytm: Computing AABB of many object on image.

Jest tylko jeden problem: litera np. 'i' ma dwie części. Mój algorytm wykryje kropkę i resztę litery jako 2 osobne obiekty. Jak program ma wykryć je jako jedną literę? Nie może to być na podstawie np. odległości kropki od reszty, bo musi rozpoznawać różne kroje pisma. Jedyny pomysł jaki przychodzi mi do głowy to jakaś analiza na podstawie rozmiaru innych liter, ale nie wiem jak by to zrobić.
P-117337
Parapet
» 2014-09-22 15:53:35
http://4programmers.net/C_sharp/Gotowce/Sieci_neuronowe_aproksymacja_i_rozpoznawanie_pisma
P-117341
OSA_PL
» 2014-09-22 15:57:16
@kubawal
Ten algorytm działa tak samo jak ten, który ja podałem. Co do 'i' to przy założeniu, że tekst nie jest napisany pod skosem, ja sprawdzałbym czy nad znalezionym obiektem w odległości np. połowy wysokości tego obiektu(trzeba to dobrać doświadczalnie) nie ma innego obiektu. Jeżeli jest tam jakiś obiekt łączę te dwa obiekty, przepuszczam przez sieć neuronową i sprawdzam czy sieć rozpoznała to jako literę 'i', jeżeli tak to zostawiam te obiekty połączone w innym przypadku zostawiam je oddzielnie. Przydało by się jeszcze porównać wielkość obiektów, żeby nie zrzucać za dużo roboty na sieć neuronową.
Ewentualnie można nauczyć sieć neuronową tak by rozpoznawała literę 'i' bez kropki.
P-117343
« 1 »
  Strona 1 z 1