Всем привет! Вашему вниманию предлагается небольшое сочинение на тему обработки изображений. В одной из прошлых статей мы разбирали такой вопрос как объемы данных генерируемые различными устройствами. В частности, довольно распространенные сейчас видеокамеры с разрешением в 4K (4096 х 3072 пикселей) генерируют примерно 2,2 Гигабайта сырых данных в секунду каждая и это совсем не шутка. Каким же образом этот поток данных проходит через наши "хилые" линии связи?
То что поток проходит нельзя отрицать, однако нужно быть честным, проходит не совсем то, что камера снимает со своей матрицы. Чтобы с этим разобраться нам помогут герои гениальнейшего советского мультфильма "38 попугаев".
При чем здесь мартышки?
В этом фильме длина удава измерялась несколькими способами. В итоге получилось 38 попугаев или 5 мартышек или 2 слоненка. Это вовсе не про метрологические проблемы, смысл тут гораздо более глубокий. Весь наш мир можно разложить на элементарные кирпичики, а потом собрать обратно. По крайней мере, математика об этом кричит очень громко.
Самым ярким примером полезного применения разложений функций и сигналов в ряды является разложение в гармонический ряд. Любую функцию можно представить суммой гармоник с разными частотами и амплитудами. Каждый из коэффициентов разложения показывает с какой амплитудой должна быть гармоническая функция на конкретной частоте. Внимание! В этом случае базисом разложения является гармоническая функция. Вот вам образное измерение удава в попугаях.
Если сигнал разложить в другом базисе, то получим "измерение удава в мартышках". Другим часто употребляемым базисом является, так называемый вейвлет.
Чтобы разложить функцию, нужно узнать насколько она похожа на конкретный вейвлет. Почитайте при меру похожести в статье по ссылке, станет все гораздо более понятно. Величина похожести будет коэффициентом разложения. Вычислив меры похожести со всем набором вейвлетов мы получим набор коэффициентов разложения.
Чтобы потом собрать функцию обратно, нужно сложить вместе все вейвлеты, умноженные каждый на свой коэффициент разложения. Это все что нужно понять о базисных преобразованиях.
Что за преобразование JPEG?
Мы подошли к самой сути. Чтобы изображение, забираемое с матрицы камеры, а уж тем более видео приобрели привычные нам размеры необходимо применить, так называемое, неравномерное кодирование. Суть его в том, что наиболее часто встречающиеся битовые комбинации должны быть заменены на максимально короткие комбинации, а те, что встречаются редко заменяются на более длинные комбинации бит.
Чтобы совершить такую замену некоторый вычислитель проводит статистический анализ битовых комбинаций и выясняет количество появлений той или иной комбинации во всем массиве данных. На основании статистики составляется словарь замены одной комбинации на другую. Это обратимая операция и восстановить исходные данные можно опять по этому же словарю.
К примеру, некоторую последовательность бит можно разбить на тройки. Тройки могут получиться самые разные от 000 до 111. У одних троек частота появления будет низкой, у других высокой. На основании этих частот появления и составляется словарь. Наиболее часто встречающаяся комбинация может быть заменена всего одним (!) битом.
Однако, приведенный пример слишком прост для такого вида информации, как цифровые фотографии и видео. В этот момент в игру вступает "разложение удава на слонят". Кодирование медиа-контента происходит куда более эффективным способом, где сжатие это лишь часть процесса.
Разложение на базисные функции
Специалисты в области цифровой фотографии подметили, что резких переходов яркости в снимках не так уж и много. В основном, видно плавное перетекание одних оттенков в другие (синее небо и море, стены домов и прочее). Этим обязательно нужно было воспользоваться для выбора хорошего базиса, на который будет разложено исходное изображение.
Сжатию подвергаются не сами пиксели изображения, а плитки пикселей 8х8.
На примере черно-белого изображения видно, что каждый пиксель характеризуется своей яркостью (белый = 255, черный = 0). Для красной, зеленой и синей составляющих плитки строятся матрицы яркостей 8х8 элементов.
Базис это не просто одна матрица 8x8, это целая система из таких матриц:
В результате перехода от плитки к коэффициентам разложения получаем матрицу 8х8 из таких коэффициентов, где каждый показывает насколько плитка 8х8 похожа на каждую из базисных функций. Самой собой, при обратном преобразовании через умножение базиса на свой коэффициент разложения и суммы всех этих произведений мы получим исходное маленькое изображение обратно.
Поскольку резкие переходы в изображении это большая редкость, то меры похожести коэффициентов (K) в нижней правой части матрицы будут околонулевые. А как мы помним, длинные последовательности одинаковых чисел успешно кодируются более компактными комбинациями. Если опустить мелкие подробности, то именно так это все и происходит. В видеопотоке сжатие происходит не только внутри одного кадра, но и на нескольких подряд идущих кадров.
Сейчас для абсолютного большинства жителей планеты, владеющих смартфонами просмотр картинок это очень естественное действие, даже проще чем зевнуть. Однако, внутри интегральных схем, обеспечивающих сжатие, хранение и передачу изображений и видео происходит масса вычислений. Математика как наука выше всех похвал! Спасибо ей огромное за наше цифровое настоящее и будущее.
Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.
Также не обойдите вниманием канал на YouTube . Подписки и лайки будут приятным ответом от аудитории.