我正在尝试使用 ImageMagick 7 来检测图像中的特定 channel 是否主要是纯黑色和纯白色(加上一点抗锯齿,并且图像有可能是纯黑色)。这是为了与另一种具有相同命名约定但在 r/g/b channel 中具有类似照片的图像数据的图像区分开来。
(基本上,两种图像类型都是来自不同引擎的镜面反射贴图。我在这里试图区分的图像类型更现代,并且在蓝色 channel 中具有金属贴图;另一种图像类型要旧得多,只有镜面反射RGB channel 中的颜色和 Alpha 中的光泽贴图。)
目前,我正在将该 channel 与应用了 50% 阈值的自身克隆进行比较,使用 AE 指标来查看除了少量抗锯齿和 1% 的模糊之外,它是否基本相同。考虑到纯黑/白偶尔出现的色差。该命令有效,但当然目前它仅返回扭曲像素的数量:
magick ( "file.png" -channel b -separate ) ^
( +clone -channel b -separate -threshold 50% ) ^
-fuzz 1% -metric AE -compare ^
-format "%[distortion]" info:
由于输入图像大小会有所不同,因此我想将失真度除以图像中的像素总数,以获得非纯黑/白图像的相对数量 - 在到目前为止,在我的手动测试中,10% 似乎不错——但我无法获得正确的格式语法。我尝试过的所有方法 - 例如 "%[fx:%[ Distortion]/w*h]"
- 都给出了 magick: undefined variable `[ Distortion]' @ 错误/fx.c/FxGetSymbol/1169
错误。
我应该使用什么语法? (如果有更好的方法来做我正在做的事情,我总是很感激!)
最佳答案
我相信以下内容就是您在 Imagemagick 中想要的。基本上,您将失真保存在 -set option:
参数中,然后在 -fx
中使用它。
但是,+clone
仅提供 b channel ,因此第二行中不需要 -channel b -separate
。
magick ( "file.png" -channel b -separate ) ^
( +clone -threshold 50% ) ^
-fuzz 1% -metric AE -compare ^
-set option:distort "%[distortion]" ^
-format "%[fx:distort/(w*h)]" info:
关于image-processing - ImageMagick:将 AE 失真除以 fx 输出信息格式中的总像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71129139/