我想在文档扫描中获取包含任何文本的所有区域的坐标,如下所示(质量降低;原始文件具有高分辨率):
我正在寻找与这些(GIMP'ed!)边界框类似的东西。对我来说,很重要的一点是这些段落必须被承认。但是,如果两个大块(左侧页面的顶部框,右侧页面的中心框)将分别获得两个边界框,则可以:
获取这些边界框坐标的方法可以通过某种API(脚本语言优先于编译语言)或通过命令行命令进行,我不在乎。重要的是我自己获取坐标,而不仅仅是获得可见图像的修改版本。原因是我需要计算每个区域的面积大小,然后在最大区域的中央切出一块。
到目前为止,我已经尝试过但没有成功:
我已经看到文档扫描互联网上的图像被分割成包含文本,照片和其他元素的部分,因此这个问题似乎已经在学术上得到了解决。不过,如何获得好东西?
答案 0 :(得分:1)
在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再增加一点,您可以摆脱左下角圆点周围的小方框,我认为这是噪音。