Современные информационные технологии/1. Компьютерная инженерия
К.т.н. Томашевський О.М.
Львівська філія Європейського університету, Україна
Модифікація алгоритму компресії
зображень S3TC із збереженням яскравості вихідного пікселя
Проведений аналіз поширених
алгоритмів компресії растрових зображень показав, що питання збереження
яскравості зображення-оригінала в скомпресованому вигляді є актуальним для всіх
систем обробки зображень [1]. Вивчення основ компресії полягає у дослідженні
основного об’єкта в області машинної графіки – зображень, які будемо розглядати
як своєрідний тип даних.
Розглянемо поняття растрового зображення. Статичні
растрові зображення є двовимірним масивом
чисел [2]. Елементи цього масиву називають
пікселями (від
англійського “pixel” – “picture element”). Всі зображення можна розділити на дві групи – з палітрою і без неї. Зображення без палітри бувають в одній з систем кольоропредставлення (RGB, CMYK, і т.д.) і в градаціях сірого (Grayscale). Найпоширенішою є система RGB, в якій колір передається значеннями інтенсивності
червоного (R, red), зеленого (G, green) і синього (В, blue) кольорів.
Для вибору критеріїв
порівняння алгоритмів стиску необхідно визначити клас зображення відповідно
до галузі застосування:
·
клас
1. Поліграфічні системи. Характеризуються високими
вимогами до якості зображень. Компресію або не використовують, або вона є
мінімальною;
·
клас
2. Енциклопедії, ігри. Помірно високі вимоги до
якості зображень. Використання компресії до 20-30% від оригіналу;
·
клас
3. Інтернет. Якість зображень коливається в широкому
діапазоні. Компресія до 50-70% від оригіналу.
Отже,
будемо розглядати алгоритми компресії, що оперують останніми двома класами
зображень, коли алгоритми порівнюються за наступними критеріями [3]:
·
обсяг вихідного файлу;
·
яскравість стиснутого зображення;
·
відсутність спотворень (артефактів).
Особливий інтерес
представляють собою алгоритми стиску з
пакету DirectX та OpenGL. Ці набори технологій і інструментів дозволяють
створювати ігри і мультимедіа-додатки з якісною графікою та звуком. Розглянемо
алгоритм стиску зображень S3TC, що використовується в DirectX (складова
DirectDraw). Зазначимо, що подібний алгоритм також використовується в OpenGL
для ефективного стиску тестур [4,5].
Основна ідея алгоритму S3TC полягає у розбитті зображення на блоки розміром
4 х 4 пікселя та подальшому обчисленні нових кольорів пікселів за формулою:
Тобто, коефіцієнти RGB
визначаються як:
Недоліком алгоритму є
часткова втрата яскравості кольорів вихідного зображення (у деяких випадках прикладних
задач до 30 %). Запобігти втраті яскравості можна шляхом модифікації
розглянутого алгоритму.
Ідея модифікації полягає у наступному.
Вхідне зображення розбивається на блоки розміром 2 х 2 пікселі:
і з 4-х пікселів в процесі компресії
одержується один, який обчислюється за формулою:
.
Алгоритм було реалізовано
засобами мови програмування С++, інтерфейс програми є дружнім та інтуїтивно
зрозумілим. Проведено тестування розробленої програми (з робочою назвою
ImgCompress) на вибірці з 9-ти зображень різного формату. Результати
представлено в таблиці 1. Для порівняння
проведено аналогічний стиск зображень засобами графічного пакету Adobe
Photoshop.
Таблиця 1
Результати 50% стиснення зображень різного
формату
Зображення-оригінал |
Стиск
Adobe Photoshop |
Стиск
ImgCompress |
|||
Формат |
Розмір (px) |
Об’єм файлу |
Розмір (px) |
Об’єм файлу |
Об’єм файлу |
*.bmp |
384x480 |
540 Kb |
190x240 |
135 Kb |
180 Kb |
*.jpg |
473x332 |
53,4 Kb |
237x166 |
16,5 Kb |
7,55 Kb |
*.tif |
575x698 |
1,15 Mb |
288x349 |
305 Kb |
303 Kb |
*.tif JPEG |
172 Kb |
51,6 Kb |
– |
||
*.tif LZW |
724 Kb |
204 Kb |
302 Kb |
||
*.gif |
655x408 |
140 Kb |
328x204 |
40,1 Kb |
– |
*.gif (+) |
|||||
*.png8 |
128x128 |
7,27 Kb |
64x64 |
3,08 Kb |
– |
*.png24 (+) |
16,6 Kb |
7,05 Kb |
5,51 Kb |
В
результаті проведених досліджень можна сформулювати наступні висновки:
1)
функціонування алгоритмів
компресії растрових зображень базується на нехтуванні частини пікселів та
визначенні коефіцієнтів схеми кольороподілу нових пікселів;
2)
при стиску зображень
можлива поява спотворень та артефактів;
3)
алгоритм компресії з пакетів
DirectX та OpenGL проводить початкове розбиття зображення на блоки 4х4 з
подальшим визначенням найтемнішого та найяскравішого пікселів і перерахунком
параметрів RGB;
4)
модифікований алгоритм
компресії оперує 24-бітними (24bppRGB) або 32-бітними (32bppRGB та 32bppARGB)
зображеннями, розбиває зображення на блоки 2х2 та обчислює значення вихідного
пікселя з врахуванням параметрів решти пікселів блоку;
5)
найбільшого зменшення
обсягу файлу зображення досягається при використанні формату *.jpg та *.png24
із підтримкою прозорості.
Література:
1.
Р.Вудс,
Р.Гонсалес. Цифровая обработка изображений (в 2-х томах). – СПб: “Техносфера”,
2006.–
616с.
2.
Иванов Д.В. Алгоритмические
основы растровой машинной графики. – М: ИНТУИТ, 2007.– 284с.
3.
Миано Дж. Форматы
и алгоритмы сжатия изображений в действии. – М: Тріумф, 2003.– 336с.
4.
Фленов М.Е. DirectX
и C++. Искусство программирования (+CD). – BHV-СПб, 2006.– 384с.
5.
Ивченко А. OpenGL
и DirectX: программирование графики. Для профессионалов. – СПб: Питер, 2006.– 352с.