使用Leptinica进行字符分割



我正试图弄清楚如何使用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
}

现在是textblock所有字符,还是我使用了错误的分割方法:)?此外,我如何知道文本块"数组"何时结束?

提前感谢!!

编辑2013年11月26日

对于任何感兴趣的人-Leptinica Doxygen文档-页面分割是完整页面分割的一个很好的例子!

字符分割示例:

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=%dn", 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); 
}

相关内容

  • 没有找到相关文章

最新更新