4

该任务是拍摄文档的图像,并利用围绕不同“部分”的直线将图像分割成不同的文档以供进一步解析。不同'部分'的大小在页面之间是完全可变的(我们正在处理数千页)。以下是对这些图像的一个看起来像一个形象:如何检测文档图像上的边缘,并将部分切分为单独的图像?

的文件是如何布局实例:

Example Doc

图像分析/操作完全是新的我。到目前为止,我试图使用Scikit-image边缘检测算法来查找'盒子',并希望使用这些'坐标'来剪切图像。然而,我尝试过的两种算法(Canny,Hough)正在以高灵敏度拾取文本行作为“边缘”,而不是以低灵敏度拾取我想要的行。我可以写一些自定义和低级别的东西来自己检测盒子,但我必须假设这是一个解决的问题。

我的方法是朝着正确的方向走向吗?谢谢!

+0

你有一些真正的输入图像呢?你展示的内容对于说明这个概念很有用。但你真的需要与现实世界的投入一起工作。 –

+1

添加了一个真实的输入图像,尽管要解析的文档来自各种不同的来源。预计格式总体格式总是相似的,但是行大小,语言,文本格式等容易改变。 – migsvult

+0

这似乎是计算机生成的图像,而不是由扫描仪或相机获取的图像。 (根据所有线条完全水平/垂直的方式来判断)所有输入都是这样的吗?如果是这样,那肯定会让任务更容易。 –

回答

1

你似乎没有得到任何OpenCV的的答案,所以我在命令行进行了尝试与ImageMagick的,只是在终端。 ImageMagick安装在大多数Linux发行版上,可免费使用macOS和Windows。该技术非常适用于OpenCV,因此如果它适合您,您可以将其移植到其他地方。

我的第一步是做一个5x5框过滤器和80%的阈值以摆脱噪声扫描文物,然后倒置(可能是因为我打算使用形态学,但没有结束)。

convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate z.png 

enter image description here

然后,我跑到通过“连成分分析”并丢弃有过小的区域内的所有斑点(下2000个像素):

​​

输出

Objects (id: bounding-box centroid area mean-color): 
    110: 1254x723+59+174 686.3,536.0 901824 srgb(0,0,0) 
    2328: 935x723+59+910 526.0,1271.0 676005 srgb(0,0,0) 
    0: 1370x1692+0+0 685.2,712.7 399651 srgb(0,0,0) 
    2329: 303x722+1007+911 1158.0,1271.5 218766 srgb(0,0,0) 
    25: 1262x40+54+121 685.2,140.5 49820 srgb(255,255,255) 
    109: 1265x735+54+168 708.3,535.0 20601 srgb(255,255,255) 
    1: 1274x64+48+48 675.9,54.5 16825 srgb(255,255,255) 
    2326: 945x733+54+905 526.0,1271.0 16660 srgb(255,255,255) 
    2327: 312x732+1003+906 1169.9,1271.5 9606 srgb(255,255,255) <--- THIS ONE 
    421: 403x15+328+342 528.6,350.1 4816 srgb(255,255,255) 
    7: 141x23+614+74 685.5,85.2 2831 srgb(255,255,255) 

这些字段在第一行标记,但有趣的是第二个(块几何)和第四个字段(blob区域)。如您所见,有11行,因此它在图像中找到了11个斑点。第二个字段AxB+C+D表示一个矩形,其高度为B像素,其左上角C像素距离图像左边缘,D像素距离顶部。

让我们看看一个我都用箭头标记,这将启动2327: 312x732+1003+906并在一个画一个矩形:

convert news.jpg -fill "rgba(255,0,0,0.5)" -draw "rectangle 1003,906 1315,1638" oneArticle.png 

enter image description here

如果你想出去裁剪那篇文章到一个新的图片:

convert news.jpg -crop 312x732+1003+906 article.jpg 

enter image description here

如果我们在所有其他框画,我们得到:

enter image description here

+0

不错的工作。在OpenCV中,您可以通过根据层次结构查找轮廓来放弃小斑点。它会给你一个类似的结果.. –