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 пикселей производится для возможности представить полную картину, но более грубыми «мазками».

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

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

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

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

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

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

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

А возможно, пользователь прервет загрузку данных, так как уже по первым изображениям понял, что искал не это… Экономия на трафике? Да! Если же пользователь не прерывает запрос, то изображение (оставшаяся часть данных) подгрузится… Получите "качественное изображение", как хотели…

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

для Windows 10 скачать exe-файл для тестирования





Пример исходного кода на 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<size_m;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 делает процесс сохранения простым и удобным
Доступные форматы сохранения изображения указаны в списке параметра «Тип файла:» Выбирайте любой

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

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

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

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

для Windows 10 скачать exe-файл для тестирования



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

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



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




Поделиться в соц сетях:



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

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

Акция !!!
исходный код комментарии цена минимальная


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

Program code