Сжатие изображений с использованием функции imfinfo в Matlab

Я пытаюсь рассчитать степень сжатия данного изображения. Мой код Matlab выглядит следующим образом:

temp = iminfo('flowers.jpg'); comperssion_ratio = (temp.Width * temp.Height * temp.BitDepth) / temp.FileSize;

Iminfo показывает следующее:

       FileSize: 11569
         Format: 'jpg'
  FormatVersion: ''
          Width: 430
         Height: 430
       BitDepth: 8
      ColorType: 'grayscale'
FormatSignature: ''
NumberOfSamples: 1
   CodingMethod: 'Huffman'
  CodingProcess: 'Sequential'
        Comment: {}

Выполнение приведенного выше кода дает мне степень сжатия около 120, что очень много и кажется неправильным. Есть ли что-то, что я делаю неправильно? Я просмотрел документ из Массачусетского технологического института, и они показали, что ширина, высота и битовая глубина должны быть разделены на 8, а затем разделены на размер файла. Зачем делить на 8?


person David Norman    schedule 21.07.2014    source источник


Ответы (1)


Деление на коэффициент 8 предназначено для преобразования битов в байты.

Согласно документации Matlab для imfinfo

параметр FileSize — это размер сжатого файла в байтах.

Степень сжатия определяется как:

несжатый размер изображения в байтах/сжатый размер файла в байтах

imfinfo дает вам ширину, высоту и количество битов на пиксель (битовую глубину) в пикселях. Из этого вы можете вычислить несжатый размер в битах и ​​разделить на 8, чтобы получить байты.

Для несжатого изображения у вас есть 430 * 430 * 8/8 = 184 900 байт.

Размер сжатого изображения 11569 байт.

Таким образом, коэффициент сжатия на самом деле составляет 184 900/11 569 или 15,98, что не является необоснованным значением для JPEG.

person paisanco    schedule 21.07.2014