Сравните 2 изображения и найдите % разницы

Я хочу сравнить два изображения и узнать разницу между ними в процентах. Я использую raspbian на языке raspberry pi и python. Я нашел PIL и magickimage, но с magick image я не могу найти для этого функцию, а с PIL у меня странные результаты.

Для Pil я использую этот код:

h1 = image1.histogram()
h2 = image2.histogram()
rms = math.sqrt(reduce(operator.add,map(lambda a,b: (a-b)**2, h1, h2))/len(h1))

Когда я делаю два снимка (без разницы) с интервалом 0,5 секунды, я получаю следующие результаты: среднеквадратичное значение = 4743,766.... Если я перемещаюсь между двумя снимками, у меня среднеквадратичное значение: 4699,288..... Так что это не делает разница между двумя «одинаковыми» изображениями и когда я двигаюсь: /


person user3466795    schedule 09.12.2014    source источник
comment
Что именно означает странные результаты? Где код и в чем конкретно с ним проблема/   -  person jonrsharpe    schedule 09.12.2014
comment
Я отредактировал это :) Извините   -  person user3466795    schedule 09.12.2014


Ответы (1)


Используйте compare, который является частью ImageMagick. Как это:

compare -metric AE image1.png image2.png null:

AE дает абсолютную ошибку с точки зрения подсчета разницы в количестве пикселей. Вы также можете использовать MAE (средняя абсолютная ошибка), или PAE (пиковая абсолютная ошибка), или RMSE (среднеквадратическая ошибка). Вы также можете добавить коэффициент fuzz, чтобы разрешить небольшие различия в значениях пикселей, например:

compare -fuzz 10% -metric AE image1.png image2.png null:

Если вы хотите получить ответ в переменной оболочки, скажем, ndiff, вы можете сделать это:

ndiff=`compare -fuzz 10% -metric AE image1.png image2.png null: `
echo $ndiff
person Mark Setchell    schedule 09.12.2014
comment
Я очень плохо разбираюсь в линуксе. В консоли все в порядке, оно дало значение, но я не знаю, как написать его в моем скрипте. Я попробовал это: diff=compare -metric AE image1.png image2.png null print(diff) Но он сказал, что есть ошибка на AE Это странно, потому что это хорошо работает в консоли. Большое спасибо за Вашу помощь - person user3466795; 09.12.2014
comment
Я обновлю ответ... подожди. - person Mark Setchell; 09.12.2014
comment
Это кажется недопустимым синтаксисом в $. Таким образом, скрипт не может быть выполнен :/ - person user3466795; 09.12.2014
comment
Если вы используете более старую оболочку или оболочку, отличную от bash, вам, возможно, придется использовать обратные кавычки — см. обновленный ответ. - person Mark Setchell; 09.12.2014
comment
Я не уверен, что понимаю. Когда я делаю это в своей консоли, это работает. Но я хочу сделать это в своем файле Python, нет. И я пробовал весь код, который вы дали, но когда я делаю: python scr.py, он не работает из-за кода выше. Может быть, я забыл что-то импортировать, чтобы использовать функцию сравнения? И я использую raspberry pi с raspbian с системой на дату. - person user3466795; 09.12.2014
comment
Если вы хотите получить ответ (то есть разницу) в переменной Python, посмотрите ответ на этот вопрос... stackoverflow.com/questions/17238263/ - person Mark Setchell; 09.12.2014