DCT Дискретное косинусное преобразование. Алгоритм сжатия файлов изображений. Пример исходного кода C++

  1. DCT (FDCT, IDCT) - как алгоритм сжатия файлов изображений с потерями или без потерь
  2. Discrete Cosine Transform (DCT) - Дискретное косинусное преобразование (ДКП)
  3. Пример исходного кода на C++ или/и на других языках программирования
  4. Сохранение результатов в различные форматы изображений
  5. Предложение изменить исходный код приложения под Ваши требования

Актуальность данного вопроса не вызывает сомнения. Передаваемая по сети информация (content) содержит в своем составе огромное количество графических файлов. Их сжатие приводит к уменьшению нагрузки на сети. Возрастает эффективность передачи данных

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


DCT (FDCT, IDCT) - как алгоритм сжатия файлов изображений с потерями или без потерь


Не секрет, что с потерями сжимать данные и быстрее и эффективнее (% сжатия получается выше).

Вот только не все данные сохранят свою пригодность для использования после безвозвратных потерь

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

При повторном и длительном рассматривании изображения восприятие поменяется, заработают другие, более точные алгоритмы сознания Но это уже другая история (этап)

DCT (FDCT, IDCT) алгоритм сжатия файлов
Рис.1        DCT (FDCT, IDCT) - как алгоритм сжатия файлов изображений с потерями или без потерь

Вывод: Трудно и практически невозможно сказать заранее, как сознание человека отнесется к конкретному изображению. На 90% красот окружающего мира достаточно беглого взгляда. А в 10% случаев требуется изображения высокого качества.

Discrete Cosine Transform (DCT) - Дискретное косинусное преобразование (ДКП)


FDCT (fast discrete cosine transform) - быстрое дискретное косинусное преобразование

IDCT (inverse discrete cosine transform) - обратное дискретное косинусное преобразование

Формулы прямого FDCT и обратного IDCT преобразования:

DCT Discrete Cosine Transform - Дискретное косинусное преобразование (ДКП)
Рис.2        Формулы прямого и обратного Дискретного косинусного преобразования (ДКП), т.е. DCT преобразования

Предлагаемое приложение наглядно демонстрирует алгоритм данных преобразований Можно, что называется «все потрогать ручками»

Загрузив любое изображение (практически любого формата) в первое окно - необходимо обязательно нажать кнопку "FDCT". Это прямое кодирование выполняется быстро. В массиве сохраняются коэффициенты DCT для матриц 8Х8 пикселей. Разбиение исходного изображения на блоки 8Х8 пикселей производится исключительно для ускорения и удобства вычислений. При желании, можно разглядеть эту сетку более ярких пикселей на правом изображении после FDCT преобразования (щелчка по FDCT-кнопке).

А вот раскодирование производится медленнее, но зато его можно ускорить в ущерб качеству... Вот пример где вся матрица пикселей восстанавливается по первому (единственному) элементу...

Discrete Cosine Transform - Дискретное косинусное преобразование (ДКП)
Рис.3        Дискретное косинусное преобразование (ДКП). Восстановление с минимальным качеством (MAX потерь)

На этом примере матрица пикселей восстанавливается по 2Х2 элементам...

Discrete Cosine Transform - Дискретное косинусное преобразование (ДКП)
Рис.4        DCT Discrete Cosine Transform. Так же уровень потерь значителен...

И наконец, матрица пикселей восстанавливается по 8Х8 элементам... Полное восстановление изображения...

Discrete Cosine Transform DCT
Рис.5        Восстановление с максимальным качеством. Без потерь...

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

Скачать ехе-файл для тестирования


Условия получения кода?    Показать?




Пример исходного кода на C++ или/и на других языках программирования


Поскольку предстоит вести работу с однотипными матрицами 8х8 элементов, то есть смысл определить специальный тип данных m8x8

//------------------------------
const int size_m=8;
typedef double m8x8[size_m][size_m];
//------------------------------

Функции матричной арифметики могут выглядеть так

//------------------------------
Void MultiMatrix(m8x8 m1,m8x8 m2, m8x8 res){    //перемножение матриц
    for(int i=0;i<size_m;i++)
        for(int j=0;j<size_m;j++){
            res[i][j]=(double)0;
            for(int k=0;k<size_m;k++)
                res[i][j]+=m1[i][k]*m2[k][j];
        }
}

Void TransponMatrix(m8x8 m1, m8x8 res){        //транспонирование матриц
    for(int i=0;i         for(int j=0;j<size_m;j++)    res[i][j]=m1[j][i];           
}
//------------------------------

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

//------------------------------
Void FDCT_8x8(m8x8 m1, m8x8 res){        //прямое преобразование       
    MultiMatrix(A,m1,a1);
    MultiMatrix(a1,AT,res);
}

Void IDCT_8x8(m8x8 m1, m8x8 res){         //обратное преобразование   
    MultiMatrix(AT,m1,a1);
    MultiMatrix(a1,A,res);
}
//------------------------------

Увязать это все вместе в единый проект с нужным заказчику интерфейсом не такая уж сложная задача

Сохранение результатов в различные форматы изображений


Имея на выходе (правое изображение) битовую матрицу изображения, ее можно сохранить в любой из известных форматов изображений

Сохранение результатов в различные форматы изображений
Рис.6        Сохранение результатов в различные форматы изображений

Стандартное диалоговое окно Windows делает процесс сохранения простым и удобным
Доступные форматы сохранения изображения указаны в списке параметра «Тип файла:» Выбирайте любой

Предложение изменить исходный код приложения под Ваши требования


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

Возможно, у кого-то просто есть идеи: как улучшить наглядность демонстрации алгоритма или интерфейс приложения Буду благодарен за подсказку (к форме прямого обращения ведет кнопка ниже)

Скачать ехе-файл для тестирования


Условия получения кода?    Показать?


Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации»

Другие примеры на языках «C»,«C++»,«C#»



Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку ...




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...
исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
Весь код по 49 руб


Не попадайтесь на удочку мошенников-кидал...
Сайт помощи студентам по программированию и информатике

Program code