Растрові карти
Растрова карта (BMP) - це, по суті, те, що ви описуєте, масив чисел, що представляють кольори пікселів. Наприклад, щось подібне
1, 1, 1, 0, 1, 1, 1, 1, 1, 1
Стиснення без втрат
Тепер визначимо схему стиснення. У нашій схемі стиснення у нас буде масив пар чисел. Напр
3, 1, 1, 0, 7, 1
Тепер, перше, що я хочу зазначити, це те, що ця схема стиснення являє собою ті ж пікселі, що і перший масив. Перший масив має три 1s, а потім один 0, а потім сім 1s. І ось що ми тут представляємо. Цей формат коротший, оскільки представляє кілька пікселів з двома номерами. Формат растрової карти повинен використовувати одне число для кожного пікселя.
Очевидно, це дещо спрощений вигляд зображення (наприклад, це лише один ряд) та схема стиснення. Але, сподіваємось, це дозволяє вам побачити, як схема стиснення змінює формат зображення. Ось так GIF відноситься до BMP. GIF використовує схему стиснення під назвою Lempel-Ziv-Welch замість цієї спрощеної.
Ми описали тут схему стиснення без втрат. Проблема зі схемами стиснення без втрат полягає в тому, що для деяких входів закодована форма може бути довшою за оригінал. Напр
1, 0, 1, 0, 1
Кодування є
1, 1, 1, 0, 1, 1, 1, 0, 1, 1
Ну, це було марно. Ми зробили вхід вдвічі довше.
Ще одне стиснення без втрат
Тепер розглянемо іншу схему стиснення. У цьому ми зобразимо зображення як накладені кола. Для кожного кола визначимо центр, радіус та колір.
Нашим першим растровим зображенням стане
5, 5, 1, 3, 0, 0
Це така ж довжина, як і наш перший метод стиснення.
І нашим другим може бути будь-який
2, 2, 1, 2, 1, 0, 2, 0, 1
Це три кола, зосереджені на середньому елементі (який у комп'ютерному підрахунку - це число 2, оскільки комп'ютери починають рахувати з 0). Одне коло має радіус 2 і колір 1. Потім додаємо коло кольору 0 і радіус 1. Нарешті, маємо коло кольору 1 і радіус 0. По кроках це було б
1, 1, 1, 1, 1
1, 0, 0, 0, 1
1, 0, 1, 0, 1
Або
2, 2, 1, 1, 0, 0, 3, 0, 0
Це той самий початковий круг, але охоплений двома точковими колами. По кроках було б
1, 1, 1, 1, 1
1, 0, 1, 1, 1
1, 0, 1, 0, 1
Вони обидві коротші, ніж перша кодована версія, але все ж довші за оригінал.
Вам може бути цікаво, чому я говорю про кола, а не діапазони. Основна причина полягає в тому, що кола ближче до того, що використовуються реальні двовимірні зображення.
Стиснення втрат
Також у нас є концепція схем стиснення втрат. Ці схеми стиснення без втрат можна повернути в початковий масив растрових зображень. Схеми стиснення втрат можуть бути незворотними.
Розглянемо втрачену версію методу наших кіл. У цьому ми будемо використовувати просте правило. Ми не зберігатимемо жодних кіл із радіусом, меншим від 1. Отже, у наших останніх двох кодуваннях ми б замість цього мали
2, 2, 1, 2, 1, 0
і
2, 2, 1
які знову перетворюються в пікселі
1, 0, 0, 0, 1
і
1, 1, 1, 1, 1
Перша версія лише на один елемент довша за оригінал. Другий варіант коротший. Обидва дійсні, тому алгоритм вільний розробити обидва та вибрати коротший.
Ми описуємо зображення з більш обмежувальними правилами як такі, що мають нижчу якість.
Таке зображення зображень як накладених колекцій круглої форми подібне до того, як працює Об'єднана група фотографічних експертів або формат JPEG . Його форми - це еліпси, а не кола, але ідея схожа. Замість нашого спрощеного методу він використовує дискретні косинусні перетворення для кодування зображень.
На відміну від GIF, JPEG насправді є іншим способом подання зображення. GIF - це ще пікселі. Вони просто зберігаються по-іншому. JPEG - це форми. Щоб переглянути JPEG, ми перетворюємо фігури в пікселі, тому що так працюють екрани. Теоретично ми могли б розробити екран, який не працював би таким чином. Замість пікселів він може створювати форми, щоб краще відповідати формату JPEG. Звичайно, на цьому екрані не вдалося б показати растрові карти. Щоб відобразити BMP або GIF, нам доведеться перейти в JPEG.
Якщо ви конвертуєте стандартний GIF, скажімо, 300x300 пікселів, перетворюєте його в JPEG і прокручуєте якісний шлях вниз, основні форми, які він використовує, повинні бути видимими. Багато JPEG уникають цих артефактів, починаючи із зображення із значно більшою роздільною здатністю.
JPEG добре масштабуються, оскільки вони мають форму, а не пікселі. Тож якщо ви почнете із зображення 8000x8000, перетворите його в JPEG і покажете його як зображення розміром 300x300, значна частина деталей, що були втрачені, у будь-якому разі втрачена. Якщо ви перетворили растровий графік 8000x8000 в растровий файл розміром 300x300, а потім у JPEG, результати часто будуть нижчої якості.
MPEG
Ми говорили про нерухомі зображення. Група Moving Picture Experts Group або MPEG-формат використовує такий же тип стиснення, як JPEG, але він також робить щось інше. Хоча простий спосіб створення відеозаписів - це надсилання послідовності нерухомих зображень, MPEG насправді надсилає кадр з наступною деякою кількістю кадрів з переліком змін та закінченням кінцевого кадру. Оскільки більшість кадрів схожі на попередній кадр, список змін часто менше, ніж другий образ.
Послідовність зазвичай не така довга, скажімо, п'ять кадрів. Але це допомагає зробити потік меншим, ніж це було б інакше.
Спрощення
Я багато ігнорував. Мої зображення мають лише два кольори (1-бітове), а не 256 8-бітових зображень і, звичайно, не 4,294,967,296 32-бітного зображення. Навіть з 8-бітовими зображеннями зауважте, що для зображення часто можна вибирати різні палітри. Отже, два 8-бітні растрові карти з однаковими послідовностями можуть представляти зображення, які виглядають по-різному (однакова форма, але різного кольору).
Мої зображення є однорядними, а не двовимірними. Більшість зображень матимуть певний розмір рядка, що робить масиви двовимірними.
Я взагалі не намагався представляти фактичні кодування. Вони набагато складніші за прості, які я використовував. Я це зробив, бо хотів описати кодування в цій публікації. Я не впевнений, що міг би пояснити Лемпель-Зів набагато менш складнішим уточненням Лемпель-Зів-Велч в одній відповіді. І я не розумію перетворення Фур'є досить добре, щоб пояснити їх будь-якою тривалістю.
Це дуже спрощена версія реальної обробки зображень. Однак я відчуваю, що в дидактичних цілях її легше зрозуміти, ніж складнішу реальність, все-таки вдарившись про суттєві моменти.