我想分割一本历史书的页面,该书印刷密集并显示断开的黑色列分隔符,见下文。
我想要达到的是以下细分。
到目前为止,我一直在玩ocropy ,它使用了 scipy/ndimage。但是使用的工具并不重要,我对可以解决这个问题的方法(形态学,...)感兴趣。
有任何想法吗?
我想分割一本历史书的页面,该书印刷密集并显示断开的黑色列分隔符,见下文。
我想要达到的是以下细分。
到目前为止,我一直在玩ocropy ,它使用了 scipy/ndimage。但是使用的工具并不重要,我对可以解决这个问题的方法(形态学,...)感兴趣。
有任何想法吗?
你的问题看起来像你
我能想到的最懒惰的方法:只需找到完全白色的连续线条。
为避免检测到正常文本行之间的空白,请为较大的段落间距设置“安全”边界。在其下方,检查下方和上方的非白线是否具有大致相同的长度。
只需找到不包含黑色的最外面的左右列。裁剪这些以及超出它们的所有内容。
我会去:在纯白色段中找到列,接近“安全边距”,就像水平分割一样。如果剩下 1-3 像素宽的垂直线段,请检查它是否大致看起来像一条垂直线。
另一种方法是直接搜索垂直黑线(即通过列,计算黑色像素。如果列超过让我们说 40% 黑色 - > 垂直线),或者如果你必须首先取消图像,无论如何,开始你的在 1 之前使用霍夫变换的整个过程,并寻找接近图像中心的大致垂直线——这些将在霍夫斯典型的位置/角度平面中显示为峰值。
我要尝试的另一件事是从逻辑上讲:
差不多:找到黑色像素,找到所有直接连接的黑色像素,找到这些组的最小和最大 x 和 y,绘制包围它们的红色矩形。重复下一个黑色像素。(“画红色”我的意思是“将其标记为已处理”)
与 2.1 相同,但只是按纵横比过滤检测到的矩形。标记为绿色,或者。
从左边开始,画一个符号轮廓,找到中心,向右移动直到你
在情况 1.-3. 中,将所有找到的符号标记为一行的内容。在情况 4. 中,将找到的符号添加到“堆栈”行,然后重复。
从左上角开始,画一条线轮廓。下去。
如果您点击的下一个轮廓具有大致相同的开始和宽度,则添加到行堆栈。如果没有,或者您遇到了边界,请声明堆栈上的所有行一个段落,标记已处理,从顶部获取下一个未处理的行轮廓,然后重复。
想法:黑白输入
结果几乎应该是一个红色蒙版,当反转时,它会为您提供所需的分割。