1

我正在尝试使用tess4J从图像中识别七段数字文本。

我的输入在这里

在此处输入图像描述

我做了一些标准化如下

1] 图像裁剪

在此处输入图像描述

2 ] 将其转换为二进制

在此处输入图像描述

我希望从图像中删除锯齿状的文本边缘。我怎样才能做到这一点?

我尝试了来自 GitHub 的不同训练数据。但没有什么能如我所愿。

如何手动创建训练数据?.

我正在等待您的好建议,并在此先感谢您。. . .

4

1 回答 1

3

您可以尝试结合使用 Sobel 过滤器(使边缘变细)和高斯过滤器(使图像模糊)。

您没有指定在 Java 中用于图像处理的 API,并且由于我不熟悉Tess4J ,因此我将展示可以从 Python 完成的功能(您可以使用首选库在 Java 中进行图像处理,该过程将是相同的):

import scipy
import scipy.misc
import scipy.ndimage.filters
import numpy

def save_image(img_data, counter):
    img_fn = "img_{}.jpg".format(counter)
    scipy.misc.imsave(img_fn, img_data)


if __name__ == "__main__":
    # This loads the second image of your post
    img_0 = scipy.misc.imread("TqO53.jpg")
    img_0 = scipy.average(img_0, -1) 
    #save_image(img_0, 0)

    # Obtain edges
    img_x = scipy.ndimage.filters.sobel(img_0, 0)
    img_y = scipy.ndimage.filters.sobel(img_0, 1)
    img_1 = numpy.hypot(img_x, img_y)
    #save_image(img_1, 1)

    # Remove edges from original image (i.e. thinning edges)
    img_2 = img_0 - img_1
    img_2[img_2 < 10] = 0 
    save_image(img_2, 2)

    # Blur image if you want to get rid of the sketchy borders
    img_3 = scipy.ndimage.gaussian_filter(img_2, sigma=1)
    save_image(img_3, 3)

这将生成以下图像:

img_2.jpg

边缘变薄

img_3.jpg

模糊

您可以尝试使用这两种类型的图像来确定使用Tess4J哪个效果好,您可能不需要在细化边缘后模糊图像,因为可以更容易地识别数字。

如果在那之后你想要,你可以尝试细化整个数字,直到它们有 1 个像素厚。也许这适用于Tess4J

于 2015-03-09T04:53:04.873 回答