2010-12-30 3 views
4

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

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

Любые идеи?

Спасибо.

+0

Все, что меньше 256 пикселей (т. Е. 16x16), может быть без потерь конвертировано в 256 цветов. –

ответ

2

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

+0

Вы правы, говоря, что некоторые потери качества будут иметь место, если у вас более 256 цветов. Тем не менее, степень потери качества будет различной в зависимости от содержимого изображения (например, чем больше пикселей будут квантованы по цвету, тем более очевидной будет потеря качества). – misha

+0

Я согласен с тобой. Однако в вопросе говорится: «Они говорят вам, что это конкретное изображение будет меньше по размеру, если оно будет преобразовано в PNG8 и не потеряет качество». Добавьте к этому появление «без потерь» в названии, и я уверен, что OP хочет знать, будет ли вообще потеря качества, а не «приемлемая» потеря качества. Кстати, ваш ответ и ссылки очень интересны. –

+0

О, я вижу. Я был в спешке и пропустил битку без потерь в названии. Благодарю. – misha

3

Это звучит как проблема с полной ссылкой image quality assessment.

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

PSNR имеет свои нижние стороны, а именно тот факт, что он не всегда соответствует тому, как работает человеческая визуальная система (например, он пренебрегает феноменом пространственного и контрастного маскирования). Другая метрика, SSIM, пытается позаботиться об этой проблеме, но ее немного сложнее вычислить (здесь есть OpenCV implementation). Вы можете использовать SSIM вместо PSNR в методе порогового значения, описанном выше.

another thread, который может вам пригодиться.

0

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

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

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