Использование Leptonica для сегментации символов

Я пытаюсь понять, как использовать сегментатор, предоставленный библиотекой Leptonica, для анализа документов. Я смотрю на pageseg.c, но не думаю, что полностью понимаю:(!

Если я беру изображение и загружаю его как тип данных PIX, я вызываю pixGetRegionsBinary(), чтобы найти, где находится каждый символ? И затем я использую маску текстового блока, чтобы извлечь каждый символ отдельно?

Если я правильно понимаю, у меня будет такой код:

Pix* page = pixRead("myImage.tif");

Pix** halftone;
Pix** textline;
Pix** textblock;

if ( pixGetRegionsBinary( page, halftone, textline, textblock, 0 ) )
{
     //..error message
}

Теперь текстовые блоки - это все символы или я использую неправильный метод сегментации:)? Кроме того, как я узнаю, когда заканчивается текстовый блок "массив"?

Заранее спасибо!!

Изменить 26/11/2013

Для всех, кто интересуется - Документация Leptonica Doxygen - Сегментация страниц - хороший пример полной сегментации страниц!

1 ответ

Пример сегментации символов:

void CharacterSegmentation(string filename) {
   PIX * image = pixRead(filename.c_str());
   PIX * binaryImage = pixConvertTo1(image , 250);
   Boxa* connectedBox = pixConnCompBB(binaryImage, 4); 
   for (int i = 0; i < connectedBoxes ->n; i++) {
      BOX* box = boxaGetBox(connectedBox , i, L_CLONE);
      fprintf(stdout, "Box[%d]: x=%d, y=%d, w=%d, h=%d\n", i, box->x, box->y, box->w, box->h);
      BOX* boxd = boxCreate(box->x, box->y, box->w, box->h);
      SaveCharacterImage(image, boxd);
      boxDestroy(&boxd);  
      boxDestroy(&binaryImage);
   }
   pixDestroy(&image);
   pixDestroy(&binaryImage);    
} 

void SaveCharacterImage(PIX* image, BOX* rectangle) {
   PIX* pixd = pixClipRectangle(pixa, boxd, NULL);
   string s = to_string(i) + ".png";
   pixWrite(s.c_str(), pixd, 1);
   pixDestroy(&pixd); 
}
Другие вопросы по тегам