image-processing - ImageMagick:将 AE 失真除以 fx 输出信息格式中的总像素

标签 image-processing command-line imagemagick

我正在尝试使用 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/

相关文章:

image - 从字节数组验证 JPEG - 特别是 APP 段

python - 使用 subprocess.call 裁剪图像

imagemagick - 识别 : Postscript delegate failed `filename.pdf' : rKkP. 缓存@ error/pdf.c/ReadPDFImage/638

matlab - 如何计算矩阵中1和0的个数?

opencv - 笔的检测点,C++ opencv

c++ - 如果我不给它提供命令行参数,为什么我的程序会崩溃?

php - 使用 PHP 脚本运行 shell 命令

imagemagick - 如何使用 ImageMagick 转换工具修剪 png,并使所有东西与原始中心保持相同的距离?

c++ - 如何从opencv获取Mat图像的亮度?

mysql - "chown mysql:mysql/data/tmp"命令