最简单的方法可能是 ImageMagick。由于需要对大量图片进行操作,所以可以编写一个脚本来实现。
您可以开始使用以下适用于 ImageMagick 的 convert 命令的图像运算符:
-threshold:
此运算符对输入图像应用同时的黑白阈值。
-blur:
该算子可降低输入图像的噪点和细节级别。
-sharpen:
该运算符锐化输入图像。
-black-threshold:
此运算符强制将低于阈值的所有像素变黑,同时保持阈值或高于阈值的所有像素不变。
-white-threshold:
此运算符强制将阈值的所有像素变白,同时保持阈值或阈值以上的所有像素不变。
-morphology:
该运算符可以使用各种'方法' 修改图像。以下是方法dilate 和erode 的示例(有超过2 打不同的方法可用)。每种方法都可以应用不同的'kernels'。以下是内核 diamond 和 kirsch 的示例(几乎有 3 打不同的内核可用)。
您可以应用其中的一个,或者在一个命令行中应用其中几个的适当组合。尝试几种变体,看看哪种最适合您。
'阈值'
以下是一些命令示例及其输出:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 50% \
50pc-threshold.png
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
85pc-threshold.png
第一张图片(左侧)显示了第一个命令的输出。第二个图像是第二个命令的结果:
'threshold' 加上 'blur'
为了减少锐利的黑/白边框,您可能希望“让眼睛更容易”并对输出应用一些额外的模糊:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
85pc-threshold+blur-2x1.png
'threshold' 加上 'blur' 加上 'sharpen'
有关输出,请参见下一张图片(左侧)。模糊后,您可以应用另一轮(或两轮)处理:再次锐化。这是一个命令:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3.png
各自的输出是最后一张图片(右边)。
'white-threshold' 和 'black-threshold'
以下两个命令演示了-white-threshold 50%和-black-threshold 50%的用法:
convert \
http://i.stack.imgur.com/15lOG.png \
-white-threshold 50% \
white-threshold-50pc.png
convert \
http://i.stack.imgur.com/15lOG.png \
-black-threshold 50% \
black-threshold-50pc.png
以下两张图片显示了生成的图片:
同上,但阈值不同:
convert \
http://i.stack.imgur.com/15lOG.png \
-white-threshold 85% \
white-threshold-85pc.png
convert \
http://i.stack.imgur.com/15lOG.png \
-black-threshold 85% \
black-threshold-85pc.png
'black-threshold' 加上 'black-threshold'
结合两个阈值操作:
convert \
http://i.stack.imgur.com/15lOG.png \
-black-threshold 85% \
-white-threshold 85% \
black-threshold-85pc+white-threshold-85pc.png
convert \
http://i.stack.imgur.com/15lOG.png \
-white-threshold 85% \
-black-threshold 85% \
white-threshold-85pc+black-threshold-85pc.png
如果您仔细观察,您会很容易发现最后两个示例命令的输出没有什么不同(并且它们也与第二个命令的输出相同)。
为了可能获得比上述命令更好的结果,您必须对各个参数进行一些变体(不要总是使用85%...)。
额外的'thinning'与-morphology
我们可以对当前结果之一应用一些'thinning'。我将选择顶部的第四个图像/命令:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
-morphology erode diamond \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+erode+diamond.png
添加的-morphology erode diamond 使用“菱形”形状的“内核”来侵蚀白色区域——这意味着黑色线条变得更粗。您可以在下面的第一张图片中看到这一点。但这不是我们想要的效果。这就是为什么我们在 -morphology 之前应用 -negate 操作,然后在之后应用 -negate 的原因:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
-negate \
-morphology erode diamond \
-negate \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+negate+erode+diamond.png
两个输出图像如下:
我们可以使用dilate(扩大白色)来代替erode(侵蚀白色):
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
-morphology dilate diamond \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+diamond.png
要查看所有内置内核形状的列表,请运行 convert -list kernel。我们可以用“kirsch”来代替菱形形态内核:
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
-morphology dilate kirsch \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+kirsch.png
要获得所有可用内核的完整功能集,您可以试试这个:
for i in $(convert -list kernel); do \
convert \
http://i.stack.imgur.com/15lOG.png \
-threshold 85% \
-blur 2x1 \
-sharpen 0x3 \
-sharpen 0x3 \
-morphology dilate ${i} \
85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+${i}-kernel.png \
done
要了解有关各种 -morphology 操作的更多信息,请参阅此处:ImageMagick Examples -- Morphology of Shapes。要获取形态学内核的完整列表,请运行 convert -list morphology。
ImageMagick 中有更多可用的处理选项。您应该自己探索它们...从这里开始了解它们:
- ImageMagick Command-Line Options
- ImageMagick Usage Examples
- ImageMagick Usage Examples -- Reference Index