1

我正在尝试将手写文本从 NIST 表单数据集中拆分为单独的行。这是数据集的链接: https ://www.nist.gov/srd/nist-special-database-19

示例图像 示例表格

我正在使用的代码基于 stackoverflow 上的一个类似问题,但由于某些字符接触,它并不能很好地工作。这是代码:

import cv2
import numpy as np
#import image
image = cv2.imread('form1.jpg')
#cv2.imshow('orig',image)
#cv2.waitKey(0)

#grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
cv2.waitKey(0)

#binary
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('second',thresh)
cv2.waitKey(0)

#dilation
kernel = np.ones((5,100), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('dilated',img_dilation)
cv2.waitKey(0)

#find contours
im2,ctrs, hier = cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, 
cv2.CHAIN_APPROX_SIMPLE)

#sort contours
sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

for i, ctr in enumerate(sorted_ctrs):
    # Get bounding box
    x, y, w, h = cv2.boundingRect(ctr)

    # Getting ROI
    roi = image[y:y+h, x:x+w]

    # show ROI
   cv2.imshow('segment no:'+str(i),roi)
   cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
   cv2.waitKey(0)

cv2.imshow('marked areas',image)
cv2.waitKey(0)        

即使某些字符重叠,我怎样才能让它正确分割线?

4

1 回答 1

0

我正在研究类似的问题,样品质量很好。

从给出的代码中,我可以看到您使用了轮廓检测。您可能希望对检测到的轮廓进行纵横比限制,以省略连接的组件。在这里,您可以找到对您的项目的见解以及有关如何进行纵横比限制的说明。

如果您仍想保留它们,则需要执行后期处理。它要么涉及这些元素的形态变化,要么涉及某种机器/深度学习的应用。

这是最复杂的部分,它可能有许多不同的解决方案。在我的项目中,我使用带有Keras的卷积神经网络来训练模型对字母进行分类,并将异常值放在单独的类中。正如您可能已经猜到的那样,我在现有的类似 MNIST 字母的数据集中添加了更多带有训练数据的类(将需要数千个训练示例)。

祝你好运!

于 2019-04-04T10:14:59.060 回答