在python和opencv中从报纸图像中提取文章

vas*_*sta 5 python opencv

第一张图像:这是我尝试过的图像运行长度平滑算法水平和垂直,一些像素值取决于图像的尺寸

第二张图片:通过增加像素值但与其他文章合并来提取文章的另一张图片

我尝试从报纸图像中提取文章,但是标题被 rlsa 算法在第一张图像中的某些像素值的水平和垂直分开。如果我尝试使用更多像素值,文章正在合并,显示在第二张图片中。任何人都可以建议将文章与python和opencv中的图像分开的最佳方法吗?

此循环用于图像上的游程平滑算法水平

    for i in range(1,a):
        c = 1
        for j in range(1, b):
            if im_bw[i, j] == 0:
                if (j-c) <= 10:
                    im_bw[i, c:j] = 0
                
                c = j
            
        
        if (b - c) <= 10:
            im_bw[i, c:b] = 0
    
Run Code Online (Sandbox Code Playgroud)

此循环用于图像上的运行长度平滑算法垂直

    for i in range(1, b):
        c = 1
        for j in range(1, a):
            if im_bw[j, i] == 0:
                if (j-c) <= 9:
                    im_bw[c:j, i] = 0
                
                c = j
            
        
        if (b - c) <= 9:
            im_bw[c:b, i] = 0
Run Code Online (Sandbox Code Playgroud)

a 是行数 b 是二值图像的列数

算法如何处理二值图像和红色标记显示文章的合并

vas*_*sta 3

我有一种适用于大多数图像的方法。

  1. 使用 PIL/Opencv 对彩色/灰度图像进行二进制转换。
  2. 从图像中删除图片作为与图像中存在的所有轮廓的平均面积相比具有最大面积的轮廓。
  3. 使用canny边缘过滤器和houghlines去除线条
  4. 在此二值图像上使用RLSA(游程平滑算法)。可以在此存储库中找到此RLSA的描述和代码https://github.com/Vasistareddy/python-rlsa

删除线条很有帮助,因为一些电子报纸保留线条作为文章分隔符。通过对图像进行更多处理,我们可以获得更好的结果。应用上述步骤后,可以在图像上留下的轮廓上实现平均宽度、平均高度、平均面积等启发式方法,以获得更好的结果。

回到上面的问题,文章总是带有白色背景。没有白色背景显然是“广告”或“图片”或“杂项”内容。从上述 4 个步骤中删除图片即可解决此问题。

PS:为水平和垂直RLSA选择一个值始终是个谜。由于文章的间隙因版本而异。

编辑:

上述问题基本上是应用启发式。通读本文

https://medium.com/@vasista/extract-title-from-the-image-documents-in-python-application-of-rlsa-58f91237901f