Відмінності між версіями «Обробка зображень та мультимедіа Лабораторна 2-3 Туртуріка»
Рядок 19: | Рядок 19: | ||
Зображення зберігається у вигляді '''двовимірного масиву пікселів'''. Формат дозволяє зберігати тільки одношарові растри. На кожен піксель в різних файлах може приходити різна кількість біт (глибина кольору). Пропоновані варіанти бітності: 1, 2, 4, 8, 16, 24, 32, 48 та 64. Колір можна задати тільки в колірній моделі '''RGB''', але при бітності 16 і 32 можна отримати '''Grayscale''' з глибиною до 16 і 32-ох біт відповідно. | Зображення зберігається у вигляді '''двовимірного масиву пікселів'''. Формат дозволяє зберігати тільки одношарові растри. На кожен піксель в різних файлах може приходити різна кількість біт (глибина кольору). Пропоновані варіанти бітності: 1, 2, 4, 8, 16, 24, 32, 48 та 64. Колір можна задати тільки в колірній моделі '''RGB''', але при бітності 16 і 32 можна отримати '''Grayscale''' з глибиною до 16 і 32-ох біт відповідно. | ||
− | Часткова прозорість реалізована альфа-каналом різних бітностей, але при цьому прозорість без градацій можна побічно отримати '''RLE-кодуванням'''. | + | Часткова прозорість реалізована альфа-каналом різних бітностей, але при цьому прозорість без градацій можна побічно отримати '''RLE'''-кодуванням. |
+ | |||
+ | До особливостей формату можна віднести '''стиснення без втрат'''. Великим недоліком є '''погана передача мережею'''. | ||
=== Внутрішня будова === | === Внутрішня будова === | ||
BMP-файл складається з чотирьох частин: | BMP-файл складається з чотирьох частин: | ||
Рядок 27: | Рядок 29: | ||
# Піксельні дані | # Піксельні дані | ||
− | Детальний огляд внутрішньої структури BMP-файлу: | + | <big>'''Детальний огляд внутрішньої структури BMP-файлу'''</big> |
+ | |||
+ | <small>''(на прикладі зображення із глибиною кольору 8 біт/піксель)''</small> | ||
+ | |||
+ | {| class="wikitable" border="2" style="text-align: center;" | ||
+ | |- | ||
+ | |- | ||
+ | !colspan="2"|Заголовок файлу | ||
+ | |- | ||
+ | | Сигнатура файлу BMP | ||
+ | | 2 | ||
+ | |- | ||
+ | | Розмір файлу | ||
+ | | 4 | ||
+ | |- | ||
+ | | Не використовується | ||
+ | | 2 | ||
+ | |- | ||
+ | | Не використовується | ||
+ | | 2 | ||
+ | |- | ||
+ | | Адреса растрового масиву | ||
+ | | 4 | ||
+ | |- | ||
+ | |style="text-align: right;"|Всього | ||
+ | |14 байт | ||
+ | |- | ||
+ | !colspan="2"|Заголовок зображення | ||
+ | |- | ||
+ | | Довжина заголовку | ||
+ | | 4 | ||
+ | |- | ||
+ | | Ширина зображення | ||
+ | | 4 | ||
+ | |- | ||
+ | | Висота зображення | ||
+ | | 4 | ||
+ | |- | ||
+ | | Число кольорових площин | ||
+ | | 2 | ||
+ | |- | ||
+ | | Біт/Піксель | ||
+ | | 2 | ||
+ | |- | ||
+ | | Довжина растрового масиву | ||
+ | | 4 | ||
+ | |- | ||
+ | | Горизонтальне розширення | ||
+ | | 4 | ||
+ | |- | ||
+ | | Вертикальне розширення | ||
+ | | 4 | ||
+ | |- | ||
+ | | Кількість кольорів зображення | ||
+ | | 4 | ||
+ | |- | ||
+ | | Кількість основних кольорів | ||
+ | | 4 | ||
+ | |- | ||
+ | |style="text-align: right;"|Всього | ||
+ | | 40 байт | ||
+ | |- | ||
+ | !colspan="2"|Таблиця кольорів (Палітра) | ||
+ | |- | ||
+ | |style="text-align: right;"|Всього | ||
+ | | від 8 до 1024 байт | ||
+ | |- | ||
+ | !colspan="2"|Дані растрового масиву | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | Не всі файли BMP мають подібну структуру. Наприклад, файли BMP з глибиною 16 і 24 біт / піксель не мають таблиць кольорів; в цих файлах значення пікселів растрового масиву безпосередньо характеризують значення кольорів RGB. | ||
+ | |||
+ | Також можуть відрізнятися внутрішні формати зберігання окремих розділів файлу. Наприклад, інформація растрового масиву в деяких 16 і 256-кольорових BMP-файлах може стискатися за допомогою алгоритму RLE, який замінює послідовності ідентичних пікселів зображення на лексеми, що визначають число пікселів в послідовності та їх колір. | ||
+ | |||
+ | <big>'''Джерела'''</big> | ||
+ | * [https://uk.wikipedia.org/wiki/BMP BMP] | ||
+ | * [http://kunegin.narod.ru/ref1/code/6.htm Форматы графических файлов] | ||
+ | * [http://jenyay.net/Programming/Bmp Описание формата BMP] | ||
+ | |||
+ | == Формат JPEG == | ||
+ | '''JPEG''' (''Joint Photographic Experts Group'') — '''растровий формат''' збереження графічної інформації, що використовує '''стиснення з втратами'''. Файли формату JPEG можуть мати розширення '''.jpg''', '''.jpeg''', '''.jpe''', '''.jif''', '''.jfif''', '''.jfi'''. | ||
+ | |||
+ | Формат JPEG є '''True Color-форматом''', тобто має здатність зберігати зображення з глибиною кольору 24 біт/піксель. Такої глибини кольору досить для практично точного відтворення зображень будь-якої складності на екрані монітора. | ||
+ | |||
+ | Найбільш поширений JPEG в цифровій фотографії та для зберігання і передачі зображень мережею Інтернет. Алгоритм JPEG якнайкраще підходить для стиснення фотографій і картин, що містять реалістичні сцени з плавними переходами яскравості і кольору. | ||
+ | |||
+ | З іншого боку, JPEG малопридатний для стиснення креслень, текстової та знакової графіки, де різкий контраст між сусідніми пікселями приводить до появи помітних артефактів. | ||
+ | |||
+ | === Алгоритм стиснення JPEG === | ||
+ | |||
+ | # Зображення перетворюється з простору кольорів '''RGB''' в '''YCbCr'''; | ||
+ | # Зазвичай канали Cb і Cr проріджують, тобто блоку пікселів присвоюють середнє значення; | ||
+ | # Значення каналів розбиваються на '''блоки 8x8'''; | ||
+ | # Кожен блок перетворюють згідно '''дискретно-косинусного-перетворення''' (ДКП), що є різновидом '''дискретного перетворення Фур'є'''. Отримують матрицю коефіцієнтів 8x8. Причому лівий верхній коефіцієнт називається '''DC-коефіцієнт''', а інші 63 - '''AC-коефіцієнтами'''; | ||
+ | # Утворені коефіцієнти '''квантуються''', тобто кожен множиться на коефіцієнт матриці квантування (кожен кодувальник зазвичай використовує свою матрицю квантування); | ||
+ | # Коефіцієнти кодуються '''кодами Хаффмана'''. | ||
+ | |||
+ | === Структура файлу === | ||
+ | Файл JPEG містить '''послідовність маркерів''', кожен з яких починається з байта 0xFF, що свідчить про початок маркера, та байта-ідентифікатора. Деякі маркери складаються тільки з цієї пари байтів, інші ж містять додаткові дані, (двухбайтове поле з довжиною інформаційної частини маркера і власне даних. Така структура файлу дозволяє швидко відшукати маркер з необхідними даними (наприклад, з довжиною рядка, числом рядків і числом колірних компонентів стисненого зображення). | ||
+ | |||
+ | {| class="wikitable" style="text-align: center;" | ||
+ | |+ <big>Основні маркери JPEG</big> | ||
+ | ! style="width: 7%;" | Маркер | ||
+ | ! style="width: 7%;" | Байти | ||
+ | ! style="width: 10%;" | Довжина | ||
+ | ! style="width: 15%;" |Призначення | ||
+ | ! Коментарі | ||
+ | |- | ||
+ | ! SOI | ||
+ | | 0xFFD8 || - || Початок зображення | ||
+ | | | ||
+ | |- | ||
+ | ! SOF0 | ||
+ | | 0xFFC0 || Змінний розмір || Початок фрейму (базовий, ДКП) | ||
+ | | style="text-align: left;" |Вказує, що зображення кодувалося в базовому режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення , кількість компонентів, число біт на компонент (завжди 8), а також співвідношення компонентів. | ||
+ | |- | ||
+ | ! SOF1 | ||
+ | | 0xFFC1 || Змінний розмір || Початок фрейму (розширений, ДКП, код Хаффмана) | ||
+ | | style="text-align: left;" |Вказує, що зображення кодувалося в розширеному режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент (8 або 12), а також співвідношення компонентів. | ||
+ | |- | ||
+ | ! SOF2 | ||
+ | | 0xFFC2 || Змінний розмір || Початок фрейму (прогресивний, ДКП, код Хаффмана) | ||
+ | | style="text-align: left;" | Вказує, що зображення кодувалося в прогресивному режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент (8 или 12), а також співвідношення компонентів. | ||
+ | |- | ||
+ | ! DHT | ||
+ | | 0xFFC4 || Змінний розмір || Містить таблиці Хаффмана | ||
+ | | style="text-align: left;" | Описує одну або декілька таблиць Хаффмана. | ||
+ | |- | ||
+ | ! DQT | ||
+ | | 0xFFDB || Змінний розмір || Містить таблиці квантування | ||
+ | | style="text-align: left;" | Описує одну або декілька таблиць квантування. | ||
+ | |- | ||
+ | ! DRI | ||
+ | | 0xFFDD || 4 байти || Вказує довжину рестарт-інтервалу | ||
+ | | style="text-align: left;" | Задає інтервал між маркерами RST 'n'' в макроблоках. За відсутності DRI поява в потоці кодованих даних маркерів RST ''n'' є неприпустимою і вважається помилкою. Якщо при кодуванні маркери RST ''n'' не застосовуються, маркер DRI або не використовується зовсім, або інтервал повторень в ньому вказується рівним 0. | ||
+ | |- | ||
+ | ! SOS | ||
+ | | 0xFFDA || Змінний розмір || Початок сканування | ||
+ | | style="text-align: left;" | Початок першого або наступного скану зображення з напрямком обходу зліва направо зверху вниз. Якщо використовувався базовий режим кодування, використовується один скан. При використанні прогресивних режимів використовується кілька сканів. Маркер SOS є роздільником між інформативною (заголовком) і закодованою (власне стисненими даними) частинами зображення. | ||
+ | |- | ||
+ | ! RST''n'' | ||
+ | | 0xFFD''n'' || - || Перезапуск | ||
+ | | style="text-align: left;" | Маркери перезапуску використовуються для сегментування кодованих ентропійних кодувальником даних. У кожному сегменті дані декодуються незалежно, що дозволяє розпаралелити процедуру декодування. При пошкодженні кодованих даних в процесі передачі або зберігання JPEG-файлу використання маркерів перезапуску дозволяє обмежити втрати (макроблоки з непошкоджених сегментів будуть відновлені правильно). Вставляється в кожному ''r'' - му макроблоці, де ''r'' - інтервал перезапуску DRI маркера. | ||
+ | |- | ||
+ | ! APP''n'' | ||
+ | | 0xFFE''n'' || Змінний розмір || Задається програмно | ||
+ | | | ||
+ | |- | ||
+ | ! COM | ||
+ | | 0xFFFE || Змінний розмір || Коментар | ||
+ | | style="text-align: left;" | Містить коментар | ||
+ | |- | ||
+ | ! EOI | ||
+ | | 0xFFD9 || - || Кінець закодованої частини зображення | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | <big>Джерела</big> | ||
+ | |||
+ | * [https://ru.wikipedia.org/wiki/JPEG JPEG] | ||
+ | * [http://www.kolpinkurs.ru/stati/jpeg.htm ИСТОРИЯ СОЗДАНИЯ, УСТРОЙСТВО, СТРОЕНИЕ И ПРИМЕНЕНИЕ ГРАФИЧЕСКОГО ФОРМАТА JPEG.] | ||
+ | * [https://habrahabr.ru/post/102521/ Декодирование JPEG для чайников] | ||
− | |||
== Формат GIF == | == Формат GIF == | ||
== Формат PNG == | == Формат PNG == | ||
== Формат SVG == | == Формат SVG == | ||
== Порівняння == | == Порівняння == |
Версія за 00:28, 25 лютого 2016
Тема: Графічні формати
Мета: Вивчення форматів графічних файлів
Завдання:
- Вивчити формат bmp. Розробити коротку специфікацію формату.
- Вивчити формат jpg. Розробити коротку специфікацію формату.
- Вивчити формат gif. Розробити коротку специфікацію формату.
- Вивчити формат png. Розробити коротку специфікацію формату.
- Вивчити один векторний формат (на Ваш вибір). Розробити коротку специфікацію формату.
- Зберегти в розглянутих форматах, файл нестисненого фото. Зробити таблицю порівняння форматів.
Зміст
Формат BMP
BMP (Bitmap Picture) - формат зберігання растрових зображень, розроблений компанією Microsoft. Файли формату BMP можуть мати розширення .bmp, .dib і .rle.
Зображення зберігається у вигляді двовимірного масиву пікселів. Формат дозволяє зберігати тільки одношарові растри. На кожен піксель в різних файлах може приходити різна кількість біт (глибина кольору). Пропоновані варіанти бітності: 1, 2, 4, 8, 16, 24, 32, 48 та 64. Колір можна задати тільки в колірній моделі RGB, але при бітності 16 і 32 можна отримати Grayscale з глибиною до 16 і 32-ох біт відповідно.
Часткова прозорість реалізована альфа-каналом різних бітностей, але при цьому прозорість без градацій можна побічно отримати RLE-кодуванням.
До особливостей формату можна віднести стиснення без втрат. Великим недоліком є погана передача мережею.
Внутрішня будова
BMP-файл складається з чотирьох частин:
- Заголовок файлу (BITMAPFILEHEADER)
- Заголовок зображення (BITMAPINFOHEADER, може бути відсутнім). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
- Палітра (може бути відсутня)
- Піксельні дані
Детальний огляд внутрішньої структури BMP-файлу
(на прикладі зображення із глибиною кольору 8 біт/піксель)
Заголовок файлу | |
---|---|
Сигнатура файлу BMP | 2 |
Розмір файлу | 4 |
Не використовується | 2 |
Не використовується | 2 |
Адреса растрового масиву | 4 |
Всього | 14 байт |
Заголовок зображення | |
Довжина заголовку | 4 |
Ширина зображення | 4 |
Висота зображення | 4 |
Число кольорових площин | 2 |
Біт/Піксель | 2 |
Довжина растрового масиву | 4 |
Горизонтальне розширення | 4 |
Вертикальне розширення | 4 |
Кількість кольорів зображення | 4 |
Кількість основних кольорів | 4 |
Всього | 40 байт |
Таблиця кольорів (Палітра) | |
Всього | від 8 до 1024 байт |
Дані растрового масиву |
Не всі файли BMP мають подібну структуру. Наприклад, файли BMP з глибиною 16 і 24 біт / піксель не мають таблиць кольорів; в цих файлах значення пікселів растрового масиву безпосередньо характеризують значення кольорів RGB.
Також можуть відрізнятися внутрішні формати зберігання окремих розділів файлу. Наприклад, інформація растрового масиву в деяких 16 і 256-кольорових BMP-файлах може стискатися за допомогою алгоритму RLE, який замінює послідовності ідентичних пікселів зображення на лексеми, що визначають число пікселів в послідовності та їх колір.
Джерела
Формат JPEG
JPEG (Joint Photographic Experts Group) — растровий формат збереження графічної інформації, що використовує стиснення з втратами. Файли формату JPEG можуть мати розширення .jpg, .jpeg, .jpe, .jif, .jfif, .jfi.
Формат JPEG є True Color-форматом, тобто має здатність зберігати зображення з глибиною кольору 24 біт/піксель. Такої глибини кольору досить для практично точного відтворення зображень будь-якої складності на екрані монітора.
Найбільш поширений JPEG в цифровій фотографії та для зберігання і передачі зображень мережею Інтернет. Алгоритм JPEG якнайкраще підходить для стиснення фотографій і картин, що містять реалістичні сцени з плавними переходами яскравості і кольору.
З іншого боку, JPEG малопридатний для стиснення креслень, текстової та знакової графіки, де різкий контраст між сусідніми пікселями приводить до появи помітних артефактів.
Алгоритм стиснення JPEG
- Зображення перетворюється з простору кольорів RGB в YCbCr;
- Зазвичай канали Cb і Cr проріджують, тобто блоку пікселів присвоюють середнє значення;
- Значення каналів розбиваються на блоки 8x8;
- Кожен блок перетворюють згідно дискретно-косинусного-перетворення (ДКП), що є різновидом дискретного перетворення Фур'є. Отримують матрицю коефіцієнтів 8x8. Причому лівий верхній коефіцієнт називається DC-коефіцієнт, а інші 63 - AC-коефіцієнтами;
- Утворені коефіцієнти квантуються, тобто кожен множиться на коефіцієнт матриці квантування (кожен кодувальник зазвичай використовує свою матрицю квантування);
- Коефіцієнти кодуються кодами Хаффмана.
Структура файлу
Файл JPEG містить послідовність маркерів, кожен з яких починається з байта 0xFF, що свідчить про початок маркера, та байта-ідентифікатора. Деякі маркери складаються тільки з цієї пари байтів, інші ж містять додаткові дані, (двухбайтове поле з довжиною інформаційної частини маркера і власне даних. Така структура файлу дозволяє швидко відшукати маркер з необхідними даними (наприклад, з довжиною рядка, числом рядків і числом колірних компонентів стисненого зображення).
Маркер | Байти | Довжина | Призначення | Коментарі |
---|---|---|---|---|
SOI | 0xFFD8 | - | Початок зображення | |
SOF0 | 0xFFC0 | Змінний розмір | Початок фрейму (базовий, ДКП) | Вказує, що зображення кодувалося в базовому режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення , кількість компонентів, число біт на компонент (завжди 8), а також співвідношення компонентів. |
SOF1 | 0xFFC1 | Змінний розмір | Початок фрейму (розширений, ДКП, код Хаффмана) | Вказує, що зображення кодувалося в розширеному режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент (8 або 12), а також співвідношення компонентів. |
SOF2 | 0xFFC2 | Змінний розмір | Початок фрейму (прогресивний, ДКП, код Хаффмана) | Вказує, що зображення кодувалося в прогресивному режимі з використанням ДКП та кодів Хаффмана. Маркер містить число рядків і довжину рядка зображення, кількість компонентів, число біт на компонент (8 или 12), а також співвідношення компонентів. |
DHT | 0xFFC4 | Змінний розмір | Містить таблиці Хаффмана | Описує одну або декілька таблиць Хаффмана. |
DQT | 0xFFDB | Змінний розмір | Містить таблиці квантування | Описує одну або декілька таблиць квантування. |
DRI | 0xFFDD | 4 байти | Вказує довжину рестарт-інтервалу | Задає інтервал між маркерами RST 'n в макроблоках. За відсутності DRI поява в потоці кодованих даних маркерів RST n є неприпустимою і вважається помилкою. Якщо при кодуванні маркери RST n не застосовуються, маркер DRI або не використовується зовсім, або інтервал повторень в ньому вказується рівним 0. |
SOS | 0xFFDA | Змінний розмір | Початок сканування | Початок першого або наступного скану зображення з напрямком обходу зліва направо зверху вниз. Якщо використовувався базовий режим кодування, використовується один скан. При використанні прогресивних режимів використовується кілька сканів. Маркер SOS є роздільником між інформативною (заголовком) і закодованою (власне стисненими даними) частинами зображення. |
RSTn | 0xFFDn | - | Перезапуск | Маркери перезапуску використовуються для сегментування кодованих ентропійних кодувальником даних. У кожному сегменті дані декодуються незалежно, що дозволяє розпаралелити процедуру декодування. При пошкодженні кодованих даних в процесі передачі або зберігання JPEG-файлу використання маркерів перезапуску дозволяє обмежити втрати (макроблоки з непошкоджених сегментів будуть відновлені правильно). Вставляється в кожному r - му макроблоці, де r - інтервал перезапуску DRI маркера. |
APPn | 0xFFEn | Змінний розмір | Задається програмно | |
COM | 0xFFFE | Змінний розмір | Коментар | Містить коментар |
EOI | 0xFFD9 | - | Кінець закодованої частини зображення |
Джерела
- JPEG
- ИСТОРИЯ СОЗДАНИЯ, УСТРОЙСТВО, СТРОЕНИЕ И ПРИМЕНЕНИЕ ГРАФИЧЕСКОГО ФОРМАТА JPEG.
- Декодирование JPEG для чайников