对不同的图像进行分类

2024-06-07 12:13:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些来自中国家谱的图片,我希望能够通过程序对它们进行分类。一般来说,一种类型的图像主要有逐行文本,而另一种类型可以是网格或图表格式。

示例照片

问:有没有(相对)简单的方法来做到这一点?我有使用Python的经验,但对图像处理知之甚少。对其他资源的指导也值得赞赏。

谢谢!


Tags: 图像文本程序comhttp网格类型www
2条回答

假设至少有一些网格线完全或几乎完全垂直,那么一个相当简单的方法可能会奏效。在

我使用PIL查找图像中超过一半像素比某个阈值暗的所有列。在

代码

import Image, ImageDraw # PIL modules

withlines = Image.open('withgrid.jpg')
nolines   = Image.open('nogrid.jpg')

def findlines(image):
    w,h, = image.size
    s = w*h
    im = image.point(lambda i: 255 * (i < 60))   # threshold
    d = im.getdata()      # faster than per-pixel operations

    linecolumns = []

    for col in range(w):
        black = sum( (d[x] for x in range(col, s, w)) )//255
        if black > 450:
            linecolumns += [col]

    # return an image showing the detected lines
    im2 = image.convert('RGB')
    draw = ImageDraw.Draw(im2)        
    for col in linecolumns:
        draw.line( (col,0,col,h-1), fill='#f00', width = 1)

    return im2

findlines(withlines).show()
findlines(nolines).show()

结果

以红色显示检测到的垂直线以供说明

image 1enter image description here

如您所见,检测到了四条网格线,并且通过一些处理忽略了书的左右两侧和中心,在所需类型上应该不会出现误报。在

这意味着您可以使用上面的代码检测黑色列,丢弃那些靠近边缘或中心的列。如果仍有黑色栏,则将其归类为“其他”不受欢迎的图片类别。在

阿飞,没有简单的方法来解决这个问题。你将需要相当数量的图像处理和一些基本的机器学习来分类这些类型的图像(甚至可能不会100%成功)

另一个注意事项:

虽然这只能通过使用机器学习技术来解决,但我建议您首先开始搜索一些图像处理技术,并尝试将您的图像转换为两个图像都有相当大差异的形式。为此,您最好开始阅读fft。之后,看看一些digital image processing技术。当你对这些内容有了一个很好的理解后,你可以阅读pattern recognition。在

这只是一个建议的方法,但有更多的方法来实现这一点。在

相关问题 更多 >

    热门问题