Как оценить размер изображения JPEG, которое будет уменьшено - PullRequest
9 голосов
/ 22 декабря 2010

Например, у меня 1024 * 768 JPEG-изображение. Я хочу оценить размер изображения, которое будет уменьшено до 800 * 600 или 640 * 480. Есть ли алгоритм для расчета размера без генерации масштабированного изображения?

Я посмотрел в диалоговом окне изменения размера в Photoshop. Размер, который они показывают, в основном (ширина пикселей * высота пикселей * бит / пиксель), что показывает огромный разрыв между фактическим размером файла.

У меня есть мобильное приложение для просмотра изображений, которое позволяет пользователю отправлять изображения по электронной почте с возможностью уменьшить изображение. Мы предоставляем флажки для пользователя, чтобы выбрать уменьшенное разрешение с оценочным размером. Для большого изображения (> 10 МБ) у нас есть 3 размера шкалы на выбор. Если мы генерируем кэшированное изображение для каждого параметра, это может повредить память. Мы пытаемся найти лучшее решение, которое позволит избежать потребления памяти.

Ответы [ 7 ]

8 голосов
/ 18 января 2011

Я успешно оценил масштабированный размер на основе DQT - фактора качества.

Я провел несколько экспериментов и выяснил, если мы используем тот же коэффициент качества, что и в исходном изображении JPEG, масштабированное изображение будетиметь размер, приблизительно равный (коэффициент масштабирования * коэффициент масштабирования) пропорции исходного размера изображения.Коэффициент качества может быть оценен на основе DQT, определенного в каждом изображении JPEG.Алгоритм был определен для оценки коэффициента качества на основе стандартной таблицы квантования, показанной в Приложении K в спецификации JPEG.

Хотя другие факторы, такие как подвыбор цвета, другой алгоритм сжатия и само изображение будут вносить вклад в ошибку, оценкадовольно точный.

PS Изучая JPEGSnoop и его исходный код, он мне очень помогает: -)

Ура!

3 голосов
/ 23 декабря 2010

Как и все остальные, лучшим алгоритмом для определения типа сжатия JPEG, который вы получите, является алгоритм сжатия JPEG.

Однако вы также можете рассчитать энтропию Шеннона изваше изображение, чтобы попытаться понять, сколько информации на самом деле присутствует.Это может дать вам некоторые подсказки относительно теоретических ограничений вашего сжатия, но, вероятно, не является лучшим решением для вашей проблемы.

Эта концепция поможет вам измерить разницу в информации между полностью белым изображением и изображениемтолпа, которая связана с ее сжимаемостью.

-Брайан Дж. Стинар-

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

Зачем оценивать то, что вы можете измерить?

По сути, невозможно дать какую-либо значимую оценку из-за того, что различные типы изображений (с точки зрения их содержания) будут сжиматься по-разному с использованием алгоритма JPEG,(Чистое белое изображение 1024x768 будет значительно меньше, чем, например, фотография сцены массового скопления.)

Таким образом, если вам нужна точная фигура, имеет смысл просто выполнить изменение размера.

В качестве альтернативы, вы можете просто указать диапазон, например, от «40 КБ до 90 КБ», основываясь на «среднем» наборе изображений.

1 голос
/ 23 декабря 2010

Моя догадка для изображений JPEG: с учетом двух изображений с одинаковым разрешением, сжатых с одинаковым соотношением качества - изображение, занимающее меньшую память, будет сжиматься больше (в общем) при уменьшении разрешения.

Почему?Из опыта: много раз при работе с набором изображений я видел, что если миниатюра занимает значительно больше памяти, чем большинство других, уменьшение ее разрешения почти не изменяет размер (память).С другой стороны, уменьшение разрешения одной из миниатюр среднего размера значительно уменьшает размер.(все параметры, такие как исходное / конечное разрешение и качество JPEG, в обоих случаях одинаковы).

Грубо говоря - чем выше энтропия, тем меньше будет влияние на размер изображения при изменении разрешения (в том же JPEGкачественный).

Если вы можете проверить это с помощью экспериментов, возможно, вы можете использовать это в качестве быстрого метода для оценки размера.Если мой язык сбивает с толку, я могу объяснить с помощью некоторой математической формулы обозначения / псевдо.

1 голос
/ 23 декабря 2010

Я думаю, что вы хотите, это что-то странное и трудное для выполнения.Исходя из уровня сжатия JPG, некоторые изображения тяжелее других по величине (размеру).

0 голосов
/ 23 декабря 2010

Прежде чем я попытаюсь ответить на ваш вопрос, я бы хотел присоединиться к тем людям, которые считают, что измерять проще, чем оценивать. Но это все еще интересный вопрос, поэтому вот мой ответ:

Посмотрите на блок коэффициентов DCT входного изображения JPEG. Возможно, вы можете найти какую-то связь между количеством высокочастотных компонентов и размером файла после сжатия изображения.

Мое предположение: при прочих равных условиях (например, таблицах квантования), чем больше частотных компонентов в исходном изображении, тем больше будет разница в размере файла между исходным и сжатым изображением.

Я думаю, что сжимая изображение, вы уменьшите некоторые высокочастотные компоненты во время интерполяции, увеличивая вероятность того, что они будут квантованы до нуля на этапе квантования с потерями.

Если вы пойдете по этому пути, вам повезет: я играл с коэффициентами DCT блока JPEG и добавил код , чтобы извлечь их.

0 голосов
/ 23 декабря 2010

Файл изображения размером 800 * 600 должен быть примерно в (800 * 600) / (1024 * 768) раз больше, чем файл изображения 1024 * 768, из которого он был уменьшен.Но это на самом деле приблизительная оценка, потому что сжимаемость оригинальной и масштабированной версий изображения может отличаться.

...