У меня есть два разных алгоритма, которые принимают изображение в качестве входных данных. Изображение имеет многоугольники разных цветов. Алгоритм "упрощает" эти многоугольники (так что они имеют меньше углов и краев) и удаляет слишком малые многоугольники.
Эти два алгоритма работают по-разному, и я хочу знать, какой из них действительно лучше, с точки зрения которого он ближе к исходной картине. Я наткнулся на это, но это не совсем то, что я искал.
Эти два изображения
,
должны иметь сходство 50%, но согласно этому алгоритму их сходство составляет 80%.
Я также нашел инструмент ImageMagick, который может сравнивать два изображения. Но я не уверен, что смысл результатов и как я могу использовать их для решения моей проблемы.
Вы бы использовали ImageMagick, чтобы сравнить ваши два изображения:
compare -metric ae a.png b.png null:
1161
или, более длинная форма с использованием convert
convert -metric ae a.png b.png -compare -format "%[distortion]" info:
1161
-metric ae
означает "скажите мне абсолютную ошибку", то есть количество пикселей, которые отличаются между двумя изображениями. В этом случае ответ составляет 1161, что составляет ровно половину пикселей, то есть 50%.
Если вы специально хотите получить 50%, вы можете сделать математику по размерам изображений с помощью ImageMagick, как если бы вы использовали bash
:
n=$(compare -metric ae a.png b.png null:)
identify -format "%[fx:$n*100/(w*h)]" a.png
или более длинную форму, используя convert
:
n=$(compare -metric ae a.png b.png null:)
convert -format "%[fx:$n*100/(w*h)]" a.png info:
50
Если вы имеете дело с jpg
изображениями (и, следовательно, с потерями сжатия и артефактами), а не с изображениями png
, вам может потребоваться добавить коэффициент fudge factor
в несколько процентов, используя параметр -fuzz
чтобы позволить почти одинаковым пикселям считать одна и та же:
convert -fuzz 10% -metric ae ....
Если вам так жаль, что нужно использовать Windows, способ сделать это тайно и непонятно, но выглядит так:
@echo off
for /f "tokens=1,2,3,*" %%G in ('convert -metric ae a.png b.png -compare -format "%%w %%h %%[distortion]" info:') DO set /a percent=(%%I * 100) /(%%G * %%H)
echo %percent%
n=$(...)
означает, что переменная n
tne устанавливается равной результату (т.е. выводу) выполнения команды в скобках. Итак, в вашем примере n
получает значение 1161
. Это функция Unix bash
- есть эквивалент Windows - я найду его для вас.