«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Физико-механический факультет Курсовая работа Алгоритмы обработки сигналов, реализованные в приложении Cute Picture Viewer Выполнили студенты группы 4057/1: Якунин Сергей Шварц Андрей Альперович Семен Санкт-Петербург 2012 Оглавление Введение .............................................................................................................................3 Линейные фильтры. ...........................................................................................................3 Meanфильтр. ...................................................................................................................3 Фильтр Гаусса. ................................................................................................................3 Фильтр LoG......................................................................................................................6 Motionblur. ......................................................................................................................7 Стохастические фильтры. ................................................................................................10 Медианный фильтр. ....................................................................................................10 Сегментация. ....................................................................................................................11 k-means (k средних). ....................................................................................................11 Meanshift .......................................................................................................................16 Фильтры зашумления. .....................................................................................................18 Белый шум. ...................................................................................................................18 Пыль. .............................................................................................................................19 Соль и перец. ................................................................................................................20 Морфологический анализ изображения. ......................................................................20 Эрозия. ..........................................................................................................................20 Дилатация. ....................................................................................................................21 Преобразования по изменению цветности. ..................................................................21 Инверсия. ......................................................................................................................21 Введение Основная функция разработанного нами приложения Cute Picture Viewer – редактирование изображений. Редактирование изображений происходит при помощи фильтров – алгоритмов обработки изображений, основанных на математическом представлении изображения. В данной работе мы опишем все фильтры, представленные в приложении, и покажем их работу на примерах. Линейные фильтры. Линейным фильтром называется такое преобразование изображения 𝑓, что для любых двух изображений 𝐴 и 𝐵 и любых констант 𝛼 и 𝛽 выполняется: 𝑓(𝛼𝐴 + 𝛽𝐵) = 𝛼𝑓(𝐴) + 𝛽𝑓(𝐵) Линейный фильтр можно представить через интеграл свертки: (1) 𝑓(𝐴)(𝑥, 𝑦) = ∫ 𝐾(𝜉 , 𝜂)𝐴(𝑥 + 𝜉, 𝑦 + 𝜂)𝑑𝜉𝑑𝜂 , 𝑤 где𝐾(𝜉, 𝜂) - ядро преобразования. Обычно ядро отлично от нуля на небольшом ограниченном множестве, либо очень быстро убывает (напримергауссиан). Так как изображение является дискретным сигналом, вместо интеграла удобнее использовать сумму, а ядро представлять как матрицу, размерность которой будет 2𝑟+1 ̂ = {𝑘𝑖,𝑗 } невелика в силу того, что ядро отлично от нуля в небольшой области,𝐾 , где 𝑟– 𝑖,𝑗=1 радиус ядра. Тогда формула (1) преобразуется в 𝑟 𝑟 (2) 𝑓(𝐴)[𝑥][𝑦] = ∑ ∑ 𝑘𝑖+𝑟+1,𝑗+𝑟+1 𝐴[𝑥 + 𝑖][𝑦 + 𝑗]. 𝑖=−𝑟 𝑗=−𝑟 Meanфильтр. Простейшим примером линейного фильтра является mean-фильтр. Meanфильтр изменяет значения каждого пикселя на среднее от его соседей. Для mean фильтра радиуса 𝑟 матрица преобразования имеет вид 1 … 1 1 𝐾𝑚𝑒𝑎𝑛 = ( … … …), (2𝑟 + 1)2 1 … 1 а формула (2) вычисляет среднее значение в квадрате[𝑥 − 𝑟; 𝑥 + 𝑟] × [𝑦 − 𝑟, 𝑦 + 𝑟]. Фильтр Гаусса. Фильтр гаусса это линейный фильтр с ядром Гаусса 𝜉2 +𝜂2 1 − 2𝜎2 . 𝐾(𝜉, 𝜂) = 𝑒 2𝜋𝜎 2 Гауссиан всегда больше нуля, но почти весь сосредоточен в области вокруг нуля (правило 3-х сигм), поэтому сильно удаленные пиксели почти не будут вносить вклада. Для дискретных преобразований часто используются дискретные аппроксимации гауссина. Например для 𝜎 = 1, можно считать, что 𝑟 = 2, а матрица преобразования имеет вид: 𝐾𝑔𝑎𝑢𝑠𝑠 1 1 4 7 = 273 4 (1 4 7 16 26 26 41 16 26 7 4 4 16 26 16 4 1 4 7 . 4 1) Рисунок 1. График двумерногогауссиана. Рисунок 2. Исходное изображение пустыни Рисунок 3. Применение mean фильтра 5x5 Рисунок 4. Применение фильтра гаусса 5x5 Фильтр LoG. Лапласиан𝐿(𝑥, 𝑦)изображения с интенсивностью пикселей 𝐼(𝑥, 𝑦) : 𝜕2𝐼 𝜕2𝐼 𝐿(𝑥, 𝑦) = + 𝜕𝑥 2 𝜕𝑦 2 Применение линейного фильтра с ядром𝐿(𝑥, 𝑦)выделяет на изображении области быстрого изменения интенсивности, благодаря чему облегчается определение краев отдельных объектов на изображении. Такой фильтр очень чувствителен к шуму, поэтому необходимо перед его применением произвести «сглаживание» изображения, например, фильтром Гаусса. Так как операция свертки линейна, имеется возможность предварительно найти свертку фильтра гаусса и Лапласиана, и потом уже применять полученный фильтр к изображению. Функция, получаемая в результате свертки двух фильтров, имеет вид: 1 𝑥 2 + 𝑦 2 −𝑥2+𝑦2 2 𝐿𝑜𝐺(𝑥, 𝑦) = − 4 (1 − ) 𝑒 2𝜎 𝜋𝜎 2𝜎 2 Перед применением фильтра необходимо указать два параметра: R – радиус (размер ядра фильтра) 𝜎 – дисперсия в ядре Гаусса. Пример: Рисунок 5. Применение фильтра LoG (r = 3,𝛔= 1) Motionblur. Motionblur применяется для создания эффекта движения.В результате применения этого фильтра в каждый пиксель изображения заменяется на среднее тех пикселей, которые пришли в эту точку в результате движения. Рисунок 6. Исходное изображение. Рисунок 7. Применение эффекта Motionblurc движением по прямой. Рассмотрим Motionblur в случае прямолинейного движения. Представлять фильтр в виде (2) неудобно потому что матрица будет очень большого размера, но сильно разреженной (там будут 1 только на траектории), поэтому будем действовать иначе. Зададим величину сдвига 𝑑 и скорость движения 𝑣 и время наблюдение движения 𝑑 𝑇. В каждый момент времени 𝑡𝑖 = 𝑖 𝑣 , 𝑖 ∈ 𝑁 к пикселю исходного изображения будем добавлять пиксель, который придет в него в данный момент времени. Когда пройдет время 𝑇, закончим итерации и поделим значение в точке на количество пикселей, пришедших в нее. Аналогично можно выполнить фильтр Zoomblur (движение от центра изображения к краям) и Spinblur (вращение изображения вокруг центра). Рисунок 8. Применение Motionblur, Zoomblur и Spinblur. Cлеванаправо,cверхувниз: 1-Исходное изображение;2-Motion blur (сдвиг на 30% от размеров изображения под углом 135 градусов, 10 итераций); 3-Zoomblur (увеличение в 2 раза, 30 итераций); 4-Spinblur (поворот на 25 градусов, 5 итераций). Стохастические фильтры. Стохастические фильтры представляют точки окрестности пикселя как выборку некоторой случайной величины. Значение нового пикселя определяется характеристикой этой выборки. Медианный фильтр. Медианный фильтр – это нелинейное преобразование изображения, в большинстве случаев применяющееся для удаления (или подавления) шумов. Основная идея этого фильтра состоит в том, чтобы заменить каждый пиксель медианой из набора его соседних элементов («шаблона»). Для этого необходимо отсортировать каждый такой набор и выбрать из него значение, стоящее на среднем месте (будем всегда брать шаблоны с нечетным числом элементов). Фильтр может быть использован для подавления шума, так как медиана является робастной оценкой, но при этом может снижаться четкость границ объектов. Параметр фильтра – r (радиус), т.е. размер шаблона. Пример: Рисунок 9. Применение медианного фильтра (r = 2) к зашумленному изображению Сегментация. Сегментация – это процесс разделения пикселей изображения на несколько множеств (сегментов) для упрощения анализа изображения. Пиксели сегментов могут быть закрашены одним цветом, а могут просто получать метки. Сегментация, является частным случаем кластеризации данных (разбиение точек всего множества на некоторые подмножества по критерию близости в заданной метрике). Изображение можно представить как множество точек в пространстве 𝑅 5 , так каждый пиксель имеет две пространственные координаты и три цветовые. Так же можно использовать яркость и другие характеристики. Метрикой в таком пространстве может быть взвешенная сумма пространственных и цветовых метрик, например ||𝑃1 − 𝑃2 || = 𝜆||𝑟1 − 𝑟2 ||𝑝 + (1 − 𝜆)||𝑐1 − 𝑐2 ||𝑞 , 𝜆 ∈ [0; 1], 𝑝 ≥ 1, 𝑞 ≥ 1 Рисунок 8. Разные виды где 𝑟𝑖 , 𝑐𝑖 - пространственная и цветовая компоненты точки𝑃𝑖 .Чаще всего применяются метрики с параметрами 1, 2, ∞ (Error! Reference source not метрик found.). Чем больше 𝑝и 𝑞, тем большее количество точек считаются близкими. На рисунке видно, что площадь единичного шара растет с ростом параметра. Иногда применяются метрики с параметрами меньше 1. Сегментация изображения активно применяется в медицине, для определения по снимкам мест опухолей и патологий, в изучении объектов и местности спутниковым снимкам, в машинном зрении для распознавания объектов и человеческих лиц. k-means (k средних). Одним из наиболее популярных алгоритмов кластеризации является алгоритм kmeans. Базовый алгоритм выглядит так: 1. Выбрать kцентров кластеров, случайно или на основании некоторой эвристики. 2. Поместить каждый пиксель изображения в кластер, центр которого ближе всего к этому пикселю. 3. Заново вычислить центры кластеров, усредняя все пиксели в кластере. 4. Повторять шаги 2 и 3 до сходимости (например, когда пиксели будут оставаться в том же кластере). Преимуществами это алгоритма является простота и гарантированная сходимость. Недостатки состоят в том, что необходимо знать заранее количество кластеров и их расположение и как следствие сильная зависимость алгоритма от начальных условий. Второй недостаток состоит в том, что алгоритм может сходиться не к оптимальному решению. Рисунок 9. Пример работы алгоритма для кластеризации точек в двумерном пространстве. Для применения этого алгоритма к задаче сегментации изображения можно взять следующую метрику: ||𝑃1 − 𝑃2 || = 𝜆||𝑟1 − 𝑟2 ||2 + (1 − 𝜆)||с1 − с2 ||1 . Выбирая различные 𝜆 можно определить что более важно: близость точек на картинке (𝜆 близко к 1) или близость точек по цвету (𝜆 близко к нулю). Если 𝜆 = 0, то координаты точек никак не влияют на процесс и кластеры определяются только цветами. Тогда изначально можно равномерно распределить кластеры по палитре и таким образом выполнить пункт 1, указанного выше алгоритма. Кластеризацию такого типа можно использовать для раскраски изображения в k цветов, но эффект не всегда получается хорошим из-за того, что в метрике не учитывается яркость, важная для человеческого восприятия. Если считать метрику по цвету как: ||𝑐1 − 𝑐2 || = 0.3|𝑟1 − 𝑟2 | + 0.59|𝑔1 − 𝑔2 | + 0.11|𝑏1 − 𝑏2 |, то получаются более подходящие оттенки. Рисунок 10. Исходное изображение. Рисунок 11. Изображение раскрашенное в 16 цветов методом k-means без учета яркости. Рисунок 12. Изображение раскрашенное в 16 цветов методом k-meansс учетом яркости. Попробуем раскрасить это изображение в 16 цветов, используя k-means кластеризацию, чтобы цвета были наиболее подходящие. В первом случае будем использовать обычную цветовую метрику (Рисунок 11), а во втором с учетом яркости (Рисунок 12). Видно, что во втором случае оттенки и тени на холмах лучше повторяют исходное изображение. При запуске алгоритма с 𝜆 ≠ 0 необходимо определить пространственное положение кластеров. Для этого сделаем один шаг алгоритма с 𝜆 = 0 и разобьем все пиксели по цветам. Далее мы можем найти центр каждого кластера как среднее арифметическое положений входящих в него точек. Рассмотрим как меняется результат кластеризации при увеличения влияния близости пикселей в пространстве. Рисунок 13. Исходное изображение. Рисунок 14. 20 кластеров, 𝝀 = 𝟎. 𝟐. Рисунок 15. 20 кластеров, 𝝀 = 𝟎. 𝟒. Рисунок 16. 20 кластеров, 𝝀 = 𝟎. 𝟔. Рисунок 17. 20 кластеров,𝝀 = 𝟎. 𝟔. Meanshift Другим алгоритмом для сегментации изображения является meanshift алгоритм. В отличие от k-means этому алгоритму не надо указывать количество кластеров. Meanshift представляет изображение как случайные числа, сгенерированные смесью каких-то распределений (например смесью гауссианов). Для каждого пикселя мы можем рассмотреть его соседей как некоторую выборку и найти ее среднее. Далее мы переходим к среднему и повторяем операцию, до тех пор, пока среднее не совпадет с самим пикселем. Можно показать, что это процесс сходится. Более формально: 1. Вводим параметры𝑟𝑑 и𝑟𝑐 . 2. Для каждого пикселя 𝑝рассматриваем выборку 𝑁 = {𝑞| ||𝑟𝑞 − 𝑟𝑝 || ≤ 𝑟𝑑 и ||𝑐𝑞 − 𝑐𝑝 || ≤ 𝑟𝑐 } , то есть соседей не слишком сильно отличающихся по цвету. a. Вычислим 𝑚(𝑝) = ∑𝑞∈𝑁 𝐾(𝑞 − 𝑝)𝑝 , где 𝐾 − некторое ядро. ∑𝑞∈𝑁 𝐾(𝑞 − 𝑝) b. 𝑝 ← 𝑚(𝑝) c. Повторяем шаги a и b пока метод не сойдется. 3. Присваиваем пикселю получившееся значение. В качестве 𝐾 можновзять например функцию гаусса: 2 𝐾 = 𝑒 −𝑐||𝑝−𝑞|| . Рисунок 18. Исходное изображение Рисунок 19. Применение meanshift, 𝒓𝒅 = 𝟏𝟎, 𝒓𝒄 = 𝟑𝟓 Фильтры зашумления. Фильтры зашумления реализуют искусственное зашумление изображения. В каждом из представленных фильтров выбирается случайный набор пикселей, у которых будет изменен цвет. У каждого пикселя одинаковая вероятность (p) попасть в этот набор, и эта вероятность задается пользователем. Пиксели, не попадающие в этот набор, сохранят начальный цвет. Белый шум. Задается диапазон 𝑑 ∈ (0; 255], и к каждой компоненте каждого пикселя из случайного набора добавляется случайное число из диапазона [-d; +d]. Рисунок 21. Исходное изображение гусей Рисунок 22.Белый шум, p = 0.5, d = 128 Рисунок 23.Белый шум, p = 0.9, d = 250 Пыль. Также задается диапазон 𝑑 ∈ (0; 255], и к каждой компоненте каждого пикселя из случайного набора добавляется случайное число из диапазона [d; 255]. Рисунок 24.Пыль, p = 0.6, d = 100 Соль и перец. Каждый пиксель из случайного набора меняет свой цвет на черный или на белый (с равной вероятностью). Рисунок 25.Соль и перец, p = 0.4 Морфологический анализ изображения. Эрозия. Эрозия – один из двух основных операторов в области математической морфологии (второй – дилатация). В обработке изображений, как правило, применяется к бинарным изображениям, но так же может быть использован для цветных. Основной эффект состоит в «размывании» границ более светлых областей изображения в окружающем их фоне. Для этого перед началом работы выбирается шаблон соседних элементов, который «прикладывается» к каждому пикселю изображения. Далее в каждый пиксель записывается минимальное значение интенсивности среди пикселей шаблона. Пример: Рисунок 26. Применение эрозии с шаблоном 3х3 Дилатация. Дилатация применяется аналогично эрозии, с той лишь разницей, что в каждый пиксель устанавливается максимальное значение интенсивности в шаблоне, за счет чего расширяются границы более светлых областей изображения: Рисунок 27. Применение дилатации с шаблоном 3х3 Преобразования по изменению цветности. Инверсия. Инверсия цвета – это замена цвета на «противоположный» в спектре. В математической модели это означает, что каждый бит математического представления цвета заменяется на противоположный (0 на 1, 1 на 0). В результате, в частности, черный заменяется на белый. Рисунок 20. Мэрилин Монро в инверсии Рисунок 21. Инверсированная обложка альбома “The dark side of the Moon” группы Pink Floyd