如何使用ImageMagick检测页面中的空白栏以区分两栏论文
How to detect a blank column in a page using ImageMagick to distinguish two column papers
我尝试使用 ImageMagick 区分两栏 pdf 科学论文,并使用 bash 脚本定位两栏分开的点。
我的想法是在页面中间用一个滑动window找到一个全白的window。类似于:
for i in {0..$page_width..$step} do
# get the color of a box 100x100+"$i"+50%
# if the box is completely blank or 90% blank, then return ($i + 50)
done
然而,我不知道图片中选中一个框的代码是完全空白的。
示例图片:
一种方法是通过将图像调整为仅 1 像素高来计算垂直列下方所有像素的 "projection"(即平均值)。我有 inverted/negated 图像,这样您可以更好地看到颜色,并将 1 像素高的图像拉伸到 20 像素高,以便您可以在底部看到它:
magick paper.png -alpha off -negate -scale x1\! -auto-level -scale x20\! result.png
因此,如果您更进一步,将输出设为单行 100 像素并将其视为文本,您可能希望在页面中心的 50% 位置附近有一些特别低的值:
magick paper.png -alpha off -colorspace gray -negate -scale x1\! -scale 100x\! -auto-level txt:
示例输出
# ImageMagick pixel enumeration: 100,1,65535,gray
0,0: (0) #000000 gray(0)
1,0: (0) #000000 gray(0)
2,0: (0) #000000 gray(0)
3,0: (56.1923) #383838 gray(22.0362%)
4,0: (209.168) #D1D1D1 gray(82.0267%)
5,0: (187.374) #BBBBBB gray(73.4801%)
6,0: (180.066) #B4B4B4 gray(70.6143%)
7,0: (188.581) #BDBDBD gray(73.9534%)
8,0: (197.288) #C5C5C5 gray(77.368%)
9,0: (230.555) #E7E7E7 gray(90.4138%)
...
...
45,0: (221.296) #DDDDDD gray(86.7826%)
46,0: (234.086) #EAEAEA gray(91.7985%)
47,0: (239.522) #F0F0F0 gray(93.93%)
48,0: (191.323) #BFBFBF gray(75.0288%)
49,0: (44.6977) #2D2D2D gray(17.5285%) <--- HERE IS THE CENTRAL GUTTER
50,0: (27.1557) #1B1B1B gray(10.6493%) <--- AND HERE - AROUND 50% ACROSS
51,0: (145.663) #929292 gray(57.1227%)
52,0: (154.567) #9B9B9B gray(60.6144%)
53,0: (184.97) #B9B9B9 gray(72.5372%)
...
...
91,0: (156.178) #9C9C9C gray(61.2462%)
92,0: (151.242) #979797 gray(59.3107%)
93,0: (146.532) #939393 gray(57.4635%)
94,0: (149.511) #969696 gray(58.6319%)
95,0: (185.506) #BABABA gray(72.7475%)
96,0: (21.7851) #161616 gray(8.54316%)
97,0: (0) #000000 gray(0)
98,0: (0) #000000 gray(0)
99,0: (0) #000000 gray(0)
其他想法:
你可以让 ImageMagick 用这样的东西为你做阈值并查看第 572 行:
magick paper.png -alpha off -colorspace gray -negate -scale x1\! -threshold 2% txt:
您可以先将左右边缘削掉 10%,以消除边缘效应:
magick paper.png -shave 10%x ... result.png
我尝试使用 ImageMagick 区分两栏 pdf 科学论文,并使用 bash 脚本定位两栏分开的点。
我的想法是在页面中间用一个滑动window找到一个全白的window。类似于:
for i in {0..$page_width..$step} do
# get the color of a box 100x100+"$i"+50%
# if the box is completely blank or 90% blank, then return ($i + 50)
done
然而,我不知道图片中选中一个框的代码是完全空白的。
示例图片:
一种方法是通过将图像调整为仅 1 像素高来计算垂直列下方所有像素的 "projection"(即平均值)。我有 inverted/negated 图像,这样您可以更好地看到颜色,并将 1 像素高的图像拉伸到 20 像素高,以便您可以在底部看到它:
magick paper.png -alpha off -negate -scale x1\! -auto-level -scale x20\! result.png
因此,如果您更进一步,将输出设为单行 100 像素并将其视为文本,您可能希望在页面中心的 50% 位置附近有一些特别低的值:
magick paper.png -alpha off -colorspace gray -negate -scale x1\! -scale 100x\! -auto-level txt:
示例输出
# ImageMagick pixel enumeration: 100,1,65535,gray
0,0: (0) #000000 gray(0)
1,0: (0) #000000 gray(0)
2,0: (0) #000000 gray(0)
3,0: (56.1923) #383838 gray(22.0362%)
4,0: (209.168) #D1D1D1 gray(82.0267%)
5,0: (187.374) #BBBBBB gray(73.4801%)
6,0: (180.066) #B4B4B4 gray(70.6143%)
7,0: (188.581) #BDBDBD gray(73.9534%)
8,0: (197.288) #C5C5C5 gray(77.368%)
9,0: (230.555) #E7E7E7 gray(90.4138%)
...
...
45,0: (221.296) #DDDDDD gray(86.7826%)
46,0: (234.086) #EAEAEA gray(91.7985%)
47,0: (239.522) #F0F0F0 gray(93.93%)
48,0: (191.323) #BFBFBF gray(75.0288%)
49,0: (44.6977) #2D2D2D gray(17.5285%) <--- HERE IS THE CENTRAL GUTTER
50,0: (27.1557) #1B1B1B gray(10.6493%) <--- AND HERE - AROUND 50% ACROSS
51,0: (145.663) #929292 gray(57.1227%)
52,0: (154.567) #9B9B9B gray(60.6144%)
53,0: (184.97) #B9B9B9 gray(72.5372%)
...
...
91,0: (156.178) #9C9C9C gray(61.2462%)
92,0: (151.242) #979797 gray(59.3107%)
93,0: (146.532) #939393 gray(57.4635%)
94,0: (149.511) #969696 gray(58.6319%)
95,0: (185.506) #BABABA gray(72.7475%)
96,0: (21.7851) #161616 gray(8.54316%)
97,0: (0) #000000 gray(0)
98,0: (0) #000000 gray(0)
99,0: (0) #000000 gray(0)
其他想法:
你可以让 ImageMagick 用这样的东西为你做阈值并查看第 572 行:
magick paper.png -alpha off -colorspace gray -negate -scale x1\! -threshold 2% txt:
您可以先将左右边缘削掉 10%,以消除边缘效应:
magick paper.png -shave 10%x ... result.png