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

Posted

技术标签:

【中文标题】如何使用 ImageMagick 将高度图分成几层?【英文标题】:How to divide a heightmap into several layers with ImageMagick? 【发布时间】:2021-09-07 09:59:42 【问题描述】:

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

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

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

谢谢

【问题讨论】:

请澄清。您想要 0.2 和 0.4 之间的所有内容,但 0.4 以下的所有内容都是黑色的没有意义。这与 0.2 到 0.4 的范围无关,因为在 0.4 以下全部变为黑色。那你想对0.4以上的数据做什么呢?你的意思是0.4以上都是黑色的。在你的第一部分,你用 0.2 而不是黑色填充 0.2 以上的所有内容?那么该层中的黑色在哪里? 一切都低于 0.2,我的意思是。对不起!基本上,背景应始终为黑色,两个阈值之间的所有内容都应可见,而较高阈值以上的所有内容都应降低到该阈值亮度值。 在我的回答中查看我的补充 【参考方案1】:

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

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:

结果:

【讨论】:

谢谢,这正是我想要的! 有人能把它翻译成 Windows DOS 吗?我正在尝试,但到目前为止我还没有成功。 对于 Windows CMD 中的此命令,您需要: 删除所有转义括号的反斜杠,因此将这些 "\( ... \)" 更改为这些 "( ... )" .将行尾的反斜杠“\”更改为插入符号“^”。如果您在 BAT 脚本中使用它,请将所有百分号“%”更改为双倍“%%”。

以上是关于如何使用 ImageMagick 将高度图分成几层?的主要内容,如果未能解决你的问题,请参考以下文章

使用具有最大宽度/高度的 ImageMagick 调整大小

使用 imagemagick 组合图块以创建图像

使用 Imagemagick 将 RAW 转换为 PNG

PHP使用ImageMagick操作gif图

PHP使用ImageMagick操作gif图

保留图像中的纵横比::Magick 的缩略图功能