如何在扫描文档中查找段落边界框坐标?

How to find paragraph bounding box coordinates in a scanned document?

我想获取文档扫描件中包含任何文本的所有区域的坐标,如下所示(质量降低;原始文件具有高分辨率):

我正在寻找与这些(经过 GIMP 处理!)边界框类似的东西。对我来说重要的是这些段落被认可。不过,如果两个大块(左页顶部框,右页中心块)各有两个边界框,那就没问题了:

获取这些边界框坐标的方法可能是通过某种 API(脚本语言优于编译语言)或通过命令行命令,我不在乎。重要的是我得到坐标本身,而不仅仅是它们可见的图像的修改版本。这样做的原因是我需要计算每一个的面积大小,然后在最大的中心切出一块。

我已经尝试过,到目前为止没有成功:

我看到互联网上的文档扫描图像被分割成包含文本、照片和其他元素的部分,所以这个问题似乎在学术上已经解决了。不过,如何获得好东西?

在 Imagemagick 中,您可以对图像进行阈值处理以防止出现过多的噪点,然后对其进行模糊处理,然后再次进行阈值处理以使大面积的黑色区域相连。然后使用 -connected-components 过滤掉小区域,尤其是白色区域,然后找到黑色区域的边界框。 (Unix bash语法)

convert image.png -threshold 95% \
-shave 5x5 -bordercolor white -border 5 \
-blur 0x2.5 -threshold 99% -type bilevel \
-define connected-components:verbose=true \
-define connected-components:area-threshold=20 \
-define connected-components:mean-color=true \
-connected-components 4 \
+write tmp.png null: | grep "gray(0)" | tail -n +2 | sed 's/^[ ]*//' | cut -d\  -f2`


这是创建的 tmp.png 图像。请注意,我丢弃了面积小于 20 像素的区域。根据需要进行调整。还可以根据需要调整模糊度。您可以将其变大以获得更大的连接区域,或将其变小以更接近单独的文本行。我在四周刮了 5 个像素以去除图像顶部的斑点噪声,然后用 5 个像素的白色边框填充。

这是边界框列表。

这是清单:

267x223+477+123
267x216+136+43
48x522+413+0
266x86+136+317
266x43+136+410
266x66+477+404
123x62+479+346
137x43+142+259
117x43+486+65
53x20+478+46
31x20+606+347
29x19+608+48
26x18+716+347
26x17+256+480
25x17+597+481
27x18+716+47
21x17+381+240
7x7+160+409

我们可以更进一步,绘制有关区域的框:

boxes=""
bboxArr=(`convert image.png -threshold 95% \
-shave 5x5 -bordercolor white -border 5 \
-blur 0x2.5 -threshold 99% -type bilevel \
-define connected-components:verbose=true \
-define connected-components:area-threshold=20 \
-define connected-components:mean-color=true \
-connected-components 4 \
+write tmp.png null: | grep "gray(0)" | sed 's/^[ ]*//' | cut -d\  -f2`)
num="${#bboxArr[*]}"
for ((i=0; i<num; i++)); do
WxH=`echo "${bboxArr[$i]}" | cut -d+ -f1`
xo=`echo "${bboxArr[$i]}" | cut -d+ -f2`
yo=`echo "${bboxArr[$i]}" | cut -d+ -f3`
ww=`echo "$WxH" | cut -dx -f1`
hh=`echo "$WxH" | cut -dx -f2`
x1=$xo
y1=$yo
x2=$((xo+ww-1))
y2=$((yo+hh-1))
boxes="$boxes rectangle $x1,$y1 $x2,$y2"
done
convert image.png -fill none -strokewidth 2 -stroke red -draw "$boxes" -alpha off image_boxes.png


将阈值区域从 20 增加一点,您可以去掉左下角圆点周围的小方框,我认为这是噪音。