Как определить, когда PNG24 преобразован в PNG8 без потерь? - PullRequest
4 голосов
/ 30 декабря 2010

Эй, я использую программу под названием pngquant для преобразования 24-битных PNG в 8-битные PNG. Кажется, все работает нормально, и я не замечаю потери качества значков и других изображений, которые не содержат слишком много цветов. Теперь, когда я передаю ему PNG-фотографию с миллионами цветов, он создает PNG8, где я вижу некоторую потерю качества.

Я бы хотел определить эту потерю качества программно. Я хотел бы знать, является ли преобразование PNG24 в PNG8 безопасным или нет. Вроде того, что делает webpagetest.org - они сообщают вам, что это конкретное изображение будет меньше по размеру при преобразовании в PNG8 и не потеряет качество.

Есть идеи?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 04 января 2011

Это звучит как полная ссылка оценка качества изображения * проблема 1002 *.

Самый простой способ решить эту проблему - попробовать вычислить PSNR между PNG24 и PNG8.изображений.Это мера разницы между двумя изображениями.Чем выше PSNR, тем меньше отличаются изображения.После использования программного обеспечения для цветового квантования проверьте, превышает ли PSNR какой-либо порог (вы должны будете определить это эмпирически), и если это так, тогда квантование было «безопасным».а именно тот факт, что он не всегда соответствует тому, как работает зрительная система человека (например, он пренебрегает феноменом пространственного и контрастного маскирования).Другая метрика, SSIM , пытается решить эту проблему, но ее немного сложнее вычислить (хотя это реализация OpenCV , хотя).Вы можете использовать SSIM вместо PSNR в подходе пороговой настройки, который я описал выше.

Вот другой поток , который может оказаться полезным.

2 голосов
/ 30 декабря 2010

Довольно просто.Если изображение, которое вы конвертируете из PNG24 в PNG8, имеет более 256 цветов, вы потеряете качество.Я что-то пропустил?

0 голосов
/ 01 января 2012

Для разработки pngquant я использую мой собственный инструмент SSIM , поскольку, похоже, что основанный на OpenCV не поддерживает ни гамма-коррекцию, ни альфа-канал должным образом.

Когда вы запустите pngquant -v, будет выведено количество ошибок, представленное как MSE=n (n - среднеквадратическая ошибка - 0 - идеальное качество).

Последняя версия имеет настройку --quality, которая позволяет вам установить минимально необходимое качество. Если он не может достичь этого, он не сохранит файл.

...