Цифровая обработка сигналов Астана. Лекция 4 На прошлой лекции • Квантование изображений применяется, в частности, для уменьшения глубины цвета. • Псевдотонирование позволяет уменьшить ошибку квантования за счет ее распределения в пространстве Междисциплинарность Числовой анализ Цифровая обработка сигналов Теория принятия решений Теория коммуникации Обработка аналоговых сигналов Цифровая электроника Аналоговая электроника … Сигналы и системы • Сигнал – зависимость одной величины от другой (функция) – Давление воздуха от времени (звук) – Напряжение в проводнике от времени – Яркость от точки (изображение) x(t) t Изображение как сигнал X Системы • Система – преобразование сигнала x(t) Система • Инвариантность к сдвигу x(t ) y (t ) x(t T ) y (t T ) x(t ) y (t ) y(t) Линейные системы • y(t) = L{x(t)} • Линейная система – L{af + bg} = aL{f} + bL{g} • Свойства линейный систем – Константный сигнал переводится в константный сигнал – Синусоида остается синусоидой (меняется лишь амплитуда и фаза) Дискретные и непрерывные сигналы • Оцифровка сигнала необходима для обработки на компьютере • Дискретизация сигнала – процесс замера величины сигнала через равные промежутки времени – АЧП (аналогово-цифровой преобразователь) • Происходит потеря информации x(t) x[t] Дискретные системы • Преобразуют дискретный сигнал в дискретный сигнал • Будем рассматривать – Дискретные системы – Линейные системы – Инвариантные к сдвигу Свертка Дельта-функция и импульсная характеристика системы • Дельта-функция 1, n 0 [ n] 0, n 0 1 -3 -2 -1 0 1 2 3 • Отклик системы на дельта-функцию называется импульсной характеристикой системы h[n] Свертка • Зная импульсную характеристику системы, можно найти отклик на любой сигнал y[n] Ядро свертки x[k ] h[n k ] k • Называется сверткой y[n]=x[n]*h[n] • Любая линейная система осуществляет свертку Свертка (вывод) x[n] Представление исходного сигнала x[k ] [n k ] k y ( x) L{x[n]} L{ x[k ] [n k ]} k k k x[k ] L{ [n k ]} x[k ] h[n k ] Импульсная характеристика Пример свертки 3 3 3 3 3 2 2 2 1 1 1 x( n) 0 1 2 3 4 5 6 7 8 1 * h( n) 0 1 2 3 4 1 2 3 3 2 3 3 3 0 n 8 = y ( n) 0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 0 n 4 3 0 n 11 Вычисление свертки • Каждая точка сигнала превращается в функцию h ( в нужную точку и умноженную на величину данной точки сигнала ), а потом все эти функции складываются. • Вычисляется значение каждой точки в результирующем сигнале как взвешенная сумма некоторого множества соседних точек исходного сигнала. Коэффициенты этой суммы совпадают с импульсной характеристикой линейной системы, развернутой относительно точки 0. Машина свертки 3 3 2 1 x( n) 0 1 2 3 4 5 6 7 8 1 2 3 3 0 3 Ядро отражено относительно нуля! n 3 3 3 3 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1 h1( n) h1( n) h1( n) h1( n) h1( n) 4 3 4 423 3142 3 3 3 4 3 4 n 4 8 20314 1203 012 01 0 1 1 1 1 1 2 3 3 2 2 2 2 3 3 3 3 n 4 n0 4 n0 0n 0 0 + ++ + + 3 3 2 1 y ( n) 0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 3 0 n 11 Свертка в 2D • Аналогично 1D: yx, y x i j i, j hx i , y j • Применение к изображениям! Дискретное преобразование Фурье Преобразование Фурье • Сигналы удобно анализировать, раскладывая на синусоиды (гармоники) – Человек может различать высокие и низкие частоты => требуется обработка сигналов с учетом этого • Преобразование Фурье – это разложение функции на синусоиды Дискретное преобразование Фурье 2k (n k ) 2kn N 2 2kn N 2 x[n] Ak cos Bk sin Ck cos N N N k 0 k 0 k 0 N 2 2 Ak N 1 Ak N 2ki N N k 1,..., 1 2 2ki N N k 0, 2 2ki x[i ] sin N i 0 k 0,..., N 1 x[i] cos i 0 N 1 x[i] cos 2 Bk N i 0 N 1 N 2 Ряд Фурье для прямоугольного импульса Спектр некоторых функций Фильтрация • Фильтрация — выделение (или подавление) частотных составляющих сигнала. • Фильтр — функция, осуществляющая фильтрацию (свертку). • Высоко- и низкочастотные фильтры. (High-pass and low-pass filters) Пример преобразования Фурье 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 50 100 150 200 250 f (x ) 80 70 60 50 40 30 20 10 0 -10 -100 -50 0 F ( ) 50 100 Пример преобразования Фурье (2) 91.764 100 10 ski 1 0.1 0.016 0.01 0 50 100 0 150 200 250 i 300 256 3 1 10 100.355 100 ski 10 1 0.15 0.1 0 0 50 100 150 i 200 250 300 256 Низкочастотная фильтрация 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 50 100 150 200 250 f (x ) 80 70 60 50 40 30 20 10 0 -10 -100 -50 0 F ( ) 50 100 Фильтры низкой и высокой частоты Гауссиан (sigma=16) Гауссиан (sigma=32) 2-D Gaussian kernel Как работает маска фильтра Изображение и его спектр Изображение sk2 sk3 Спектр 2D-сигнала Фильтр Гаусса и спектр sk2 sk2 sk2 sk2 sk2 sk3 sk3 sk3 sk3 sk3 Размытие (blur) 1 1 1 2 1 6 1 Размытие (прод) 1 2 1 3 74 2 1 2 3 2 1 4 5 4 2 5 6 5 3 4 5 4 2 2 3 2 1 Увеличение резкости 1 1 5 1 1 Свертка - дифференцирование Выделение контура 1 1 4 1 1 + порог Тиснение 1 1 0 1 1 + сдвиг яркости Примеры фильтров • Размытие (blur) Примеры фильтров • Повышение четкости (sharpen) Примеры фильтров • Нахождение границ (edges) Примеры фильтров • Тиснение (embossing) Масштабирование изображений Scaling Up and Down Растянуть сигнал Реконструкция сигнала Повторная дискретизация Нужна ли реконструкция? Треугольный фильтр Вычисление нового значения Вычисление нового значения Увеличение в 3 раза Увеличение в 2 раза Свертка Ядро свертки Универсальный фильтр Псевдокод Вычисление значения пиксела k в целевом изображении function h-hat(int k, float a){ //returns float float sum = 0, weights_sum = 0; int left, right; if (a > 1){ left = ceil(k/a - 1.0); right = floor(k/a + 1.0); } else { left = ceil(k/a - 1.0/a); right = floor(k/a + 1.0/a); } for (int i = left; i <= right, i++){ sum += g(i - k/a, a) * orig_image.Pi; weights_sum += g(i - k/a, a); } result = sum/weights_sum; } Двумерный случай Квадратная маска Материалы для чтения Задание №2. Цифровая обработка сигналов. http://graphics.cs.msu.su/courses/cg0 2b/ assigns/hw-2/hw2.html А. Лукин «Введение в цифровую обработку сигналов» http://graphics.cs.msu.su/courses/cg0 2b/ library/dspcourse.pdf