如何使用 ImageMagick 将高度图分成几层?

How to divide a heightmap into several layers with ImageMagick?

假设我有一个灰度高度图,其颜色范围从 A(较暗)到 B(较白)。该地图未标准化,因此最低值不是漆黑一片,最高值也可能不是全白。 我们还假设 0 表示黑色,1 表示白色。我想要做的是根据高度将图像分成几个单独的图像。每张图片都有黑色背景。

例如,这意味着: 图像 1 包含 0 到 0.2 之间的所有图像内容,高于该值的任何内容都减少到 0.2。 图 2 包含 0.2 和 0.4 之间的所有内容,低于 0.2 的所有内容都是黑色的。 图 3 在 0.4 和 0.6 之间是一样的,所有这些都上升到 1。你明白了。

您知道使用 ImageMagick 自动执行此过程的方法吗? 如果没有,我还有其他方法可以做到这一点吗?

谢谢

如果您想在不同的高度对图像进行切片,那么您可以使用 -black-threshold 和 -white-threshold 的组合来实现,使用百分比而不是 ImageMagick 中的分数。以下将保留每个灰度级范围并使其余部分变黑。黑色阈值使所有内容都高于某个值并使其余内容变黑。白色阈值将所有内容保持在一个值以下,并使其余部分变为白色。所以在白色阈值之后,我们只是把白色变成黑色。

IM 6 的 Unix 语法。如果使用 IM 7,请将 convert 更改为 magick

输入: (创建一个渐变图像用于演示)

convert -size 256x256 gradient: grad.png

convert grad.png -write mpr:grad +delete \
\( mpr:grad -white-threshold 20% -fill black -opaque white +write t1.png \) \
\( mpr:grad -black-threshold 20% -white-threshold 40% -fill black -opaque white +write t2.png \) \
\( mpr:grad -black-threshold 40% -white-threshold 60% -fill black -opaque white +write t3.png \) \
\( mpr:grad -black-threshold 60% -white-threshold 80% -fill black -opaque white +write t4.png \) \
\( mpr:grad -black-threshold 80% +write t5.png \) \
null:

结果:

加法

根据您的评论,代码应更改如下:

convert grad.png -write mpr:grad +delete \
\( mpr:grad -white-threshold 20% -fill "gray(20%)" -opaque white +write t1.png \) \
\( mpr:grad -black-threshold 20% -white-threshold 40% -fill "gray(40%)" -opaque white +write t2.png \) \
\( mpr:grad -black-threshold 40% -white-threshold 60% -fill "gray(60%)" -opaque white +write t3.png \) \
\( mpr:grad -black-threshold 60% -white-threshold 80% -fill "gray(80%)" -opaque white +write t4.png \) \
\( mpr:grad -black-threshold 80% +write t5.png \) \
null:

结果: