首页 文章

字符识别(OCR算法)[关闭]

提问于
浏览
33

我正在开发一个项目,我必须开发OCR算法(我必须从Image中读取文本,然后将其转换为不同的语言) . 所以我的第一个任务是从图像中获取文本 .

完成第一项任务的步骤 .

  • 从给定来源加载任何图像格式(bmp,jpg,png) . 然后将图像转换为灰度并使用阈值(Otsu算法)对其进行二值化 . //完成(如何从输出图像中删除噪声???)

结果

Input Image

Output Image

  • 检测分辨率和反转等图像特征 . 这样我们最终可以将其转换为拉直图像以进行进一步处理 . (完成了Image的旋转代码,但无法检测到我们必须旋转Image的Image角度,所以还在处理角度检测部分)

  • 线路检测和删除 . 此步骤需要改进页面布局分析,以获得更好的下划线文本识别质量,检测表格等 . (决定完成该部分的结束)

  • 页面布局分析 . 在此步骤中,我尝试识别图像中存在的文本区域 . 因此,只有那部分用于识别,并且省略了该区域的其余部分 .

  • 检测文本行和单词 . 在这里,我们还需要处理不同的字体大小和单词之间的小空格 .

  • 识别字符 . 这是OCR的主要算法;必须将每个字符的图像转换为适当的字符代码 . 有时,该算法会为不确定图像生成多个字符代码 . 例如,识别“I”字符的图像可以产生“I”,“|”稍后将选择“1”,“l”代码和最终字符代码 .

  • 将结果保存为选定的输出格式,例如,可搜索的PDF,DOC,RTF,TXT . 保存原始页面布局非常重要:列,字体,颜色,图片,背景等 .

所以我在part6中需要帮助 . 我已经完成了行检测部分(从包含n行的段落中获取n个图像)但是在下一部分中卡住了获得单词和字符识别 . 如果您知道与OCR和字符识别部分相关的良好链接,那么请发布这里 .

对于字符识别我想使用asprise(Java库)http://asprise.com/product/ocr/index.php?lang=java

4 回答

  • 18

    要检测 rotation angle ,请使用Hough transformation .

    对于 noise reduction ,将具有相同颜色(相似颜色,使用容差阈值)的没有邻居(北,东,南或西)的任何像素替换为邻居的平均值 .

    搜索 layout detection 的垂直白色间隙 . 沿垂直间隙切片 . 对于每个切片,现在搜索水平间隙和切片 . 如果切片具有相同(相似)的高度,则您处于行级别 . 否则重复垂直/水平切片,直到你只剩下线 . 然后最后一步是垂直切片,给你单个字符(或某些情况下的连字) . 长而窄或短而宽的切片是线条 .

    将字符切片与字符库进行比较 . 如果性能不是主要问题,请尝试在不同的字体库中查找字符,直到您可以识别使用的字体 . 然后坚持使用 character recognition 的字体 .

    在原始图像中,用背景颜色替换每个字符,背景颜色是通过插入不是字符的每个像素的字符一部分的像素来确定的 . 如果有的话,这会给你 background image .

  • 1

    您应该使用自适应阈值而不是Otsu方法..我认为这将有所帮助http://www.csse.uwa.edu.au/~shafait/papers/Shafait-efficient-binarization-SPIE08.pdf此方法将自动消除噪音 .

  • 5

    您可能希望查看Tesseract以获取字符识别部分 .

  • 3

    您可以使用potrace来降低噪声它会将给定图像(bmp)矢量化并将其转换为svg,pdf和其他一些格式

    http://potrace.sourceforge.net/potrace.html

相关问题