Команда ImageMagick для Image::Magick code
Я нашел следующую команду 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 для получения только указанного выше "числа"?
Кто-то хочет проверить, прикрепив два изображения:
2 ответа
Я предполагаю, что вы хотите позвонить
my $format = $iI->Fx( expression=>'mean*100' );
Это должно сделать то же самое, что и в командной строке.
смотрите здесь для более подробной документации FX в PerlMagick
(на странице есть пример строки 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";)
Кстати, сценарий, который у меня был до сих пор, основан на посте Рэндалла Шварца
Просто нашел ответ.
Image::Magick
имеет Statistics
метод, так называемый:
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;
Из документов: разные методы
Статистика () возвращает статистику изображения для каждого канала в изображении. Возвращаемые значения представляют собой массив значений глубины, минимумов, максимумов, среднего, стандартного отклонения, эксцесса, асимметрии и энтропии в порядке RGB, CMYK, RGBA или CMYKA (в зависимости от типа изображения).