【问题标题】:What thresholding (binarization) algorithm is used in Tesseract OCR?Tesseract OCR 中使用什么阈值(二值化)算法?
【发布时间】:2015-03-31 23:36:03
【问题描述】:
我正在开展一个项目,该项目需要为具有丰富背景的图像提供准确的 OCR 结果。所以我正在比较两个 OCR(其中一个是 Tesseract)的结果来做出我的选择。关键是结果受到预处理步骤的强烈影响,尤其是图像二值化。我提取了另一个 OCR 的二值化图像并将其传递给 Tesseract,从而将 Tesseract 的结果提高了 30-40%。
我有两个问题,你的回答对我很有帮助:
- tesseract 使用什么二值化算法,是否可配置?
- 有没有办法提取 Tesseract OCR 的二值化图像,以便我可以用它测试其他 OCR?
提前致谢:)
【问题讨论】:
标签:
ocr
tesseract
adaptive-threshold
【解决方案1】:
我想我已经找到了问题的答案:
1- 使用的二值化算法是 Otsu 阈值。你可以在第 179 行看到它here。
2- 要得到二值化图像,可以调用tesseract api中的方法:
PIX* thresholded = api->GetThresholdedImage(); //thresholded must be freed
【讨论】:
-
以上链接已损坏,here 有望成为更永久的链接。 (顺便说一句,如果有人能解决这个问题,这个答案的编辑队列似乎已经满了)
【解决方案2】:
Otsu 阈值处理是一种全局过滤器。您可以使用一些本地过滤器来获得更好的结果。
您可以查看 Sauvalo 的二值化方法,参见 here或 Nick 的 here 。这两种算法都是Niblack的改进。
我用它来二值化我的图像以进行 OCR,我得到了更好的结果
祝你好运