1

我在某个论坛中找到了以下 ImageMagick 命令,并且非常适合比较图像。

convert image1 image2 -compose Difference -composite  -format '%[fx:mean*100]' info:

结果是一个浮点数和低值(如 0.5 等)意味着:图像相似。

使用附加的图像,它会产生数字:0.0419167。(图像非常相似)

我想使用 Image::Magick (perlmagick)。问题是我不知道如何使用 perlmagick 达到相同的结果。以下工作,并创建composite,(使用附加图像的黑色图像)

#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
use Data::Dumper;
use Image::Magick;

my $i1 = Image::Magick->new;
$i1->Read('s1.jpg');
my $i2 = Image::Magick->new;
$i2->Read('s2.jpg');

$i1->Composite(image => $i2, compose=>'Difference');
$i1->Display();

问题是,如何将结果转换为数字,例如如何实现

    ... -format '%[fx:mean*100]' info:

PerlMagick 中上述命令的一部分仅用于获取上述“数字”?

有人要测试吗,附两张图:

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

1

我猜你想打电话

my $format = $iI->Fx( expression=>'mean*100' );

这应该与您在命令行上所做的相同。

有关 PerlMagick 中 fx 的更详细文档,请参见此处

(页面上有一个示例 fx 行)

在同一页面上:搜索@statistics。

在我看来,平均值可以通过

my @stats = $i1->Statistics;
my $mean = $stats[3]; # hash would be nice, mean is 4th according to docs
print "$mean\n"; # outputs something like .0413 for me

不确定这是否是您需要的,但这就是我找到“意思”的方式,这是否正是 fx 的意思,我不确定并且老实说不愿意理解 fx 方法的整个文档;)

顺便说一句,我仍然拥有的脚本是基于Randall Schwartz 的帖子

于 2014-11-11T16:32:10.923 回答
0

刚刚找到答案。

Image::MagickStatistics方法,所以调用:

my @stat = $i1->Statistics();
say Dumper \@stat

打印每个通道的图像统计信息,例如:

$VAR1 = [
      '8',
      '0',
      '0.168627450980392',
      '0.0418661437908497',    <--- mean RED
      '0.0236850206077085',
      '-0.250788990333716',
      '0.312238727773058',
      '8',
      '0',
      '0.133333333333333',
      '0.0385273202614379',     <- mean GREEN
      '0.0193189321997568',
      '-0.435325792918546',
      '0.0686645009183608',
      '8',
      '0',
      '0.23921568627451',
      '0.0453563725490196',     <- mean BLUE
      '0.0301331898766906',
      '0.309072091600589',
      '0.66336367830764'
    ];

例如平均 3 个数字,得到想要的数字:0.0419166122004357

use List::Util qw(sum)
my $s = sum @stat[3,10,17];
say $s/3;

来自文档:杂项方法

Statistics() 返回图像中每个通道的图像统计信息。返回值是RGB、CMYK、RGBA 或 CMYKA 顺序(取决于图像类型)的深度、最小值、最大值、 平均值、标准差、峰度、偏度和熵值的数组。

于 2014-11-11T17:46:09.467 回答