2

我有一个应用程序需要从图像中一个一个地分离日文字符。

输入:一张带有一行日文文本的图像。它可以有半角片假名、半角数字、全角片假名、平假名和数字。也许半角或全角英文字符也是如此。(让我们暂时忘记英文字符)

问题:我可以通过使用自适应阈值、膨胀和腐蚀轻松分离出字符。但是有一个大问题。

一些日文字符之间有一个空格。比如川、体、休、非。因此,仅仅查看垂直的白色间隙并没有帮助。找到宽度也无济于事,因为可以有全角字符(2btyte)或半角字符(1byte)。我似乎需要一种精致的方式来做到这一点。

知道我应该如何进行吗?任何想法都是个好主意:)

这是几个示例图像。(红圈为有问题的)

http://imageshack.us/a/img833/3810/e31z.png

http://imageshack.us/a/img12/2395/7mqn.png

4

2 回答 2

1

不要期望找到一个简单的算法就能做你想做的事,准备好结合一些技术,包括但不限于你已经提到的那些。

我个人的建议是基于之前的个人经验,让你看看模板匹配技术

基本上这就是你需要做的:

  1. 为您要识别的每个符号选择一些示例图像,以形成您的模板数据库。
  2. 开发一种算法来分割图像中的每个单独的字符。我认为你已经完成了。
  3. 在这里,重要的是您缩放字符并规范他们的视角,以便它们与生成模板的确切条件相匹配。getperspectivetransformwarpPerspective可能会派上用场。
  4. 例如,使用cv::matchTemplate将每个字符与每个模板进行比较。
  5. 使用您自己提到的启发式方法从顶级匹配中进行一些精细选择,即检查预期位置是否存在间隙等。
  6. 测试和重新测试,为最接近的案例改进启发式方法,直到达到所需的准确性。

如果您发现自己在照明条件、字符颜色、字体、大小等方面处理的种类太多,您会意识到您将需要一个庞大的数据库来涵盖所有各种可能性。在这种情况下,使用一些对变化条件不变的变换可能会有所帮助。对于角色识别,我相信骨架化可以很好地工作。看看拓扑骨架形态骨架这里也有一个简单的例子。

于 2013-09-11T01:10:16.497 回答
0

希望OCR是您需要做的。正如这个链接所说,opencv 不支持 OCR。但是还有另一个开源tesseract可以做到这一点。只需检查这是否有帮助。

我在谷歌上搜索的链接很少。

Opencv OCR

Opencv 中的 OCR 示例

希望这可以帮助!

于 2013-09-11T07:44:15.987 回答