Варианты заданий приведены в Приложении 1.
Пункты 6-9 задания являются факультативными.
Порядок выполнения задания:
1) Провести «вручную» сжатие 2-х фрагментов данных методом группового кодирования. Сравнить полученные коэффициенты сжатия.
2) Провести «вручную» сжатие 2-х фрагментов данных методом LZW. Сравнить полученные коэффициенты сжатия.
3) Провести «вручную» сжатие 2-х фрагментов данных c применением кодов Хаффмана. Сравнить полученные коэффициенты сжатия.
4) Провести «вручную» сжатие фрагмента данных c применением алгоритмов RLE, LZW и кодов Хаффмана. Описать полученные результаты и сделать соответствующие выводы.
5) Реализовать алгоритм JPEG в среде Mathcad и применить его для сжатия двух фрагментов изображения согласно варианту задания при q=2 для 1-го фрагмента и при q=2 и 7 для 2-го фрагмента.
Сравнить полученные коэффициенты сжатия и объяснить результаты. Сделать вывод о влиянии пиксельных значений исходных фрагментов изображения на эффективность сжатия.
Примечание:
|
|
Импорт в Mathcad-документ полутоновой матрицы цветного изображения Image1.bmp на диске C: осуществляется командой
M:=READBMP(“c:\Image1.bmp”).
Для выделения рабочего блока из общей матрицы изображения используйте функцию
IMG=submatrix(M,r1,r2,c1,c2),
при этом перевод блока в цветовую плоскость YUV не требуется.
6) Создать динамическую библиотеку с процедурой CompressImage, реализующую алгоритм группового кодирования (RLE) согласно блок-схеме на рис. 2. Инструкции приведены в Приложении 2.
7) Запустить основную программу RLE.exe. Выполнить сжатие изображения Image1.bmp, выбрав пункт меню Файл/Сжать изображение. При успешном завершении процедуры на экране появляется диалоговое окно с указанием коэффициента сжатия и в основной директории создается соответствующий файл Image1.rle;
8) Визуально проверить качество сжатия, открыв изображение командой меню Файл/Открыть сжатое изображение: если процедура сжатия была реализована корректно, то в окне программы можно наблюдать осмысленное изображение. В противном случае необходимо корректировать процедуру;
9) Выполнить сжатие изображения Image2.bmp и Image3.bmp. Сравнить коэффициенты сжатия изображений Image1.bmp, Image2.bmp и Image3.bmp. Объяснить полученные результаты.
10) Оформить отчет о проделанной работе, содержащий подробное решение всех пунктов задания и листинги программ.
Приложение 1. Варианты заданий.
Числа в таблице соответствуют номерам цепочек данных. В пунктах 17-26 данных для кодирования числа обозначают индексы строк и столбцов для выделения рабочего блока из общей матрицы изображения.
Номер задания | |||||
1 (RLE) | 2 (LZW) | 3 (Haffman) | 4 (все три метода) | 5 JPEG | |
Вариант 1 | 1,2 | 5,6 | 9,10 | 17,22 | |
Вариант 2 | 1,4 | 5,8 | 9,12 | 18,23 | |
Вариант 3 | 3,2 | 7,6 | 11,10 | 19,24 | |
Вариант 4 | 3,4 | 7,8 | 11,12 | 20,25 | |
Вариант 5 | 1,2 | 5,8 | 11,10 | 21,26 | |
Вариант 6 | 1,4 | 7,6 | 11,12 | 19,22 | |
Вариант 7 | 3,2 | 7,8 | 9,10 | 20,23 | |
Вариант 8 | 3,4 | 5,6 | 9,12 | 21,24 | |
Вариант 9 | 1,2 | 7,8 | 9,10 | 17,25 | |
Вариант 10 | 1,4 | 5,6 | 11,10 | 18,26 |
Данные для кодирования:
|
|
1) bbbbbbbccccccbbcaaaaaaabbbccccaaaaaaabbbbbaaaaadddddddddaaaadd
2) cbcbbbbcdccddaddabbddccaaaccddddccbbbaaadddddbbbbcacccddaabb
3) aaaaaccccaaccccbbccccccccfffffffffffffssssssssaaaaaabbbbbcccbbbbbffbbbb
4) ccccccbbaaccaddcdacdbcadcdadaaaddacaccadaabbbacadcccadbcbbbcbcbd
5) baaccbccbcabaccabbaabaaabcc
6) babaabbaabbaaabbbaaaaa
7) abbabbabaabbabbbba
8) aaacbcbbbbcccbbbcacc
9) dcafbfbabggbceffgggfhhhgghhhefffsffaabbabchhabffccaf
10) faaadddddbbbccbaffbbbaabbabbbabbfcadcbfababadddab
11) gdadafghggfghababahbagggabcdcdcahhggaghhhgacagca
12) bbffdddedffdfdccdcadcddddacacacccaccaccadccfcc
13) abaacadbbaaaaadcda
14) aacaddddccdbbaaaaad
15) bbbacadbccadcbaaadcda
16) abaaabbccdabaacadb
17) 250-257, 200-207
18) 290-297, 170-177
19) 50-57, 60-67
20) 150-157, 141-148
21) 220-227, 300-307
22) 121-128, 145-152
23) 122-129, 146-153
24) 123-130, 147-154
25) 140-147, 170-177
26) 123-130, 296-303
Приложение 2. Инструкции по выполнению пп. 6-9 задания.
Программная реализация алгоритма сжатия RLE в виде процедуры (функции) может быть выполнена на любом доступном языке высокого уровня, таком как Pascal (в среде Delphi) или C++ (в средах Воrland Builder или Microsoft Visual), однако следует учитывать, что при вызове процедуры в основной программе используется т.н. «паскалевское»(__stdcall) соглашение о передаче параметров.
Процедура входит в динамическую библиотеку (DLL), которая подключается к основной программе. Взаимодействие происходит по следующей схеме:
1) основная программа RLE.exe загружает исходный файл изображения и динамическую библиотеку в оперативную память;
2) из динамической библиотеки вызывается функция CompressImage c четырьмя параметрами:
- pInBuf – массив исходных данных;
- pOutBuf – массив сжатых данных;
- nInSize – размер входных данных;
- nOutSize – размер сжатых данных.
Функция реализует алгоритм и формирует массив сжатых данных;
3) Основная программа компонует новый файл изображения и записывает его на “жесткий” диск.
Ниже приведён пример шаблона реализации в среде программирования Delphi:
- создать новый проект с именем “RLE” c помощью мастера создания динамической библиотеки выбрав пункт меню Project / Add New Project / DLL Wizard;
- добавить в проект файл Module1.pas, выбрав команду Project / Add to Project (шаблоны файлов RLE.dpr и Module1.pas см. ниже);
- скомпилировать библиотеку RLE.dll и перенести её в каталог основной программы RLE.exe.
/////////////////////////////////////////////////////// Файл RLE.dpr /////////////////////////////////
library RLE;
Uses
SysUtils,
Classes,
Module1 in 'Module1.pas'; {подключаем модуль файла Module1.pas}