Вы находитесь на странице: 1из 47

Computer Graphics

Обработка изображений

by Daniel Drizhuk
Для чего применяется CG

by Daniel Drizhuk
Разница компьютерного
зрения и человеческого CG
Человек анализирует объекты
вне зависимости от
освещённости, использует
усреднение по нескольким
кадрам для устранения шумов
и ошибок, дополняет видимое
на основе опыта.
Аппаратное зрение фиксирует
объект мгновенно, вне
контекста

by Daniel Drizhuk
Разница компьютерного
зрения и человеческого CG
Человек анализирует объекты
вне зависимости от
освещённости, использует
усреднение по нескольким
кадрам для устранения шумов
и ошибок, дополняет видимое
на основе опыта.
Аппаратное зрение фиксирует
объект мгновенно, вне
контекста

by Daniel Drizhuk
Коррекция яркости CG
На гистограммах видна
локализация яркости:
Пересвеченные и
недосвеченные изображения

→Функция коррекции
−1
f ( y)=x

by Daniel Drizhuk
Виды коррекции CG
● Линейная коррекция ● Устойчивая (robust)
линейная коррекция
255−0
( y− y min ) Отбрасывает 5% пикселей
y max − y min
с той и с другой стороны
диапазона.

by Daniel Drizhuk
Виды коррекции CG
Линейная коррекция ● Гамма-коррекция
помогает не всегда – Коррекция изображения
→Нелинейная корр. на мониторе
γ
y=c⋅x
● Логарифмическая
– Сжатие диапазона
y=c⋅log (1+ x)

by Daniel Drizhuk
Баланс белого CG
Комната и монитор часто имеют
другое освещение, что приводит
к «неестественным» цветам.

● Различные фильтры при


съёмке на плёнку
● Различные алгоритмы
коррекции
– Задача нетривиальна

by Daniel Drizhuk
Коррекция по цветовым
примерам CG
● Фотографируется пример При профессиональных съёмках для
каждого освещения создаётся
(color sample) профиль по многоцветным
● Подсчитывается карточкам:
изменение цвета Rs,Gs,Bs
● Производится деление
на полученные значения

by Daniel Drizhuk
Aдаптация фон Криса CG
● Основано на восприятии
каждой колбочкой человека

RGB → LMS
Выравнивание L = 0.3811*R + 0.5783*G + 0.0402*B
M = 0.1967*R + 0.7244*G + 0.0782*B
LMS → RGB S = 0.0241*R + 0.1288*G + 0.8444*B
R = 4.4679*L - 3.5873*M + 0.1193*S
G = -1.2186*L + 2.3809*M — 0.1624*S
B = 0.0497*L - 0.2439*M + 1.2045*S

by Daniel Drizhuk
Модели выравнивания CG
● «Серый мир» – каждое среднее в диапазоне должно
равняться общему среднему.

● «Белый мир» или «Модель блика» – ищется самый яркий


пиксель, делится на его цвета.
● Сопоставление диапазона (Gammut) – выпуклая
оболочка каждого канала адаптируется к «нормальной»
● Растяжение контрастности – каждый канал
растягивается до максимумов
by Daniel Drizhuk
Цветовые матрицы CG
● Цветовая матрица — ● Иногда используются
матрица линейного матрицы со сдвигом
преобразования каналов R' G' B' X =
a b c R a b c X R
R' G' B' = d e f
* G d e f Y G
g h i B g h i Z * B
0 0 0 1 1
● Всё, что ниже или выше
порога пикселей —
отсекается

by Daniel Drizhuk
Цветовые фильтры
(нормированные на 1) CG
0.3811 0.5783 0.0402
0.1967 0.7244 0.0782 RGB → LMS
0.0241 0.1288 0.8444

4.4679 -3.5873 0.1193


-1.2186 2.3809 -0.1624 LMS → RGB
0.0497 -0.2439 1.2045

0.2125 0.7154 0.0721


0.2125 0.7154 0.0721 Чёрно-белый
0.2125 0.7154 0.0721

-1 0 0 1
0 -1 0 1 Негатив
0 0 -1 1
by Daniel Drizhuk
Линейные трансформации CG
● Линейные
преобразования
– Масштабирование
Используется группа
– Скос (Наклон)
матриц проективных
– Поворот преобразований
– Смещение
– Отражение

by Daniel Drizhuk
Матрицы преобразований CG

Каждый вектор 1 0 2
Перенос на
дополняется на конце 0 1 0
2 по OX
единицей 0 0 1

⃗r =( x , y ,1) 2 0 0 Увеличение

После преобразований
0 2 0 вдвое
последнее число 1 tg(a) 0 Наклон вдоль
откидывается 0 1 0 OX на угол a

Последняя строка матрицы
не пишется и всегда равна ● Докажите, что это группа
[0,⋯, 0, 1]
by Daniel Drizhuk
Запись матрицы
преобразований CG
● Для записи используют так же строковую запись
матрицы преобразования (в CSS и SVG)
a c e
b d f = matrix(a,b,c,d,e,f)

● Отражение по вертикали – matrix(-1,0,0,1,0,0)


● Отражение по гориз. – matrix(-1,0,0,-1,0,0)
?
by Daniel Drizhuk
Запись матрицы
преобразований CG
● Для записи используют так же строковую запись
матрицы преобразования (в CSS и SVG)
a c e
b d f = matrix(a,b,c,d,e,f)

● Отражение по вертикали – matrix(-1,0,0,1,0,0)


● Отражение по гориз. – matrix(-1,0,0,-1,0,0)
-1,0,1,-1,0,0

by Daniel Drizhuk
Фильтры CG
Ядро фильтра g – матрица,
( f ∗g ) =∑ f
j j−k l
с которой производится i i−l⋅g k
свёртка изображения или k ,l

его каналов.
g
● Для любого линейного фильтра,
инв. к сдвигу, существует ядро
f

Матрица свёртки «перевёрнута»
● Края чаще всего экстраполируют:
– Чёрным цветом (нулями)
– Продолжением границы
– Зацикливанием картинки (тор)
by Daniel Drizhuk
Примеры фильтров CG

= ?
0 0 0

* 0
0
1
0
0
0

by Daniel Drizhuk
Примеры фильтров CG

=
0 0 0

* 0
0
1
0
0
0

Нет изменений

by Daniel Drizhuk
Примеры фильтров CG

= ?
0 0 0

* 0
0
0
0
1
0

by Daniel Drizhuk
Примеры фильтров CG

=
0 0 0

* 0
0
0
0
1
0

Сдвиг на 1 влево

by Daniel Drizhuk
Примеры фильтров CG

= ?
1 1 1

* 1/9 1
1
1
1
1
1

by Daniel Drizhuk
Примеры фильтров CG

=
1 1 1

* 1/9 1
1
1
1
1
1

Размытие (box-filter)

by Daniel Drizhuk
Ядро фильтра Гаусса CG
Фильтр Гаусса – усреднение
по закону Гаусса пикселей
вокруг точки
2 2
x +y
1 −

2

Gσ = 2
e
2π σ
0,003 0,013 0,022 0,013 0,003 Важен размер ядра, для
0,013 0,059 0,097 0,059 0,013 дискретного фильтра.
0,022 0,097 0,159 0,097 0,022
Из математических свойств
0,013 0,059 0,097 0,059 0,013
Гауссиана разумно выбрать
0,003 0,13 0,022 0,013 0,003
размер квадрата в три сигмы
5×5, σ =1
by Daniel Drizhuk
Свойства фильтра Гаусса CG
2 2
x +y
● Свёртка с самим собой — 1 −
2σ 2
фильтр Гаусса G σ ( x , y)= 2
e
2π σ
● Свёртка с радиусом σ −x
2
−y
2

1 2σ
2 1 2σ
2

дважды даст результат =( e )( e )


аналогичный свёртке с √2 π σ √2 π σ
радиусом σ√2
● Ядро сепарабельно —
раскладывается в сумму
одномерных ядер

by Daniel Drizhuk
Сравнение box- и Gauss-
фильтров CG
● После box-фильтра
остаются артефакты
● После Гауссова фильтра
артефактов не остаётся

by Daniel Drizhuk
Подавление шума CG
Прежде всего фильтры
предназначались для

Гауссов шум
фильтрации шумов при
получении изображения
Рассмотрим подавление
шумов фильтром Гаусса

Шум соль&перец

by Daniel Drizhuk
Результаты применения
фильтра Гаусса CG

Фильтр успешно подавляет шум, но делает


изображение более размытым
by Daniel Drizhuk
Подавление импульсных
шумов (соль и перец) CG
● Для данного типа шумов фильтр
Гаусса не применим
● Используются медианные фильтры
10 25 8
sort mediane
15 90 30
8 10 10 15 25 27 30 31 90
27 31 10

10 25 8

15 25 30

27 31 10

by Daniel Drizhuk
Медианный фильтр CG


устойчив к выбросам

сохраняет существующие
значения
by Daniel Drizhuk
Подавление артефактов CG
Подавление артефактов в виде тонких окружностей
медианным фильтром с радиусом в 7 пикселей

by Daniel Drizhuk
Повышение резкости CG

- =
Оригинал Размытый Детали

Обратная операция:

Оригинал

Детали
= Повышение
резкости

by Daniel Drizhuk
Ядро повышения резкости CG
Посчитаем ядро фильтра исходя из примера:

f +α ( f − f ∗g )=(1+α ) f −α f ∗g = f ∗((1+α )e−α g )

По-сути это производная (лаплассиан) гауссиана

-1 -2 -1

* 0.1 -2
-1
22
-2
-2
-1
=
by Daniel Drizhuk
Компенсация освещения CG

Для компенсации
освещённости объект делят
на его низкие частоты —
алгоритм Single Scale
Retinex (SSR)

by Daniel Drizhuk
Single Scale Retinex CG
● Получить приближенное I ij =l ij⋅r ij −изображение
изображение низких
l̂i =G∗I i −низкие частоты
j j
частот j
̂ j Ii
r i =log j =
l̂i
● Восстановить
=log I −log l̂ −восстановленное
j j
изображение i i

/ =
Gauss
14.7px
by Daniel Drizhuk
Выделение краёв CG
● Больше всего информации в краях
(формах) изображения
● Края занимают меньше памяти чем всё
изображение

Край — резкое изменение
интенсивности
● Поиск 1й производной по направлению
— градиента.
-1
● Простейшие: -1 1
1

by Daniel Drizhuk
Влияние шума CG
Рассмотрим какое-то направление какого-нибудь
зашумлённого изображения как функцию сигнала

Край затерялся в шумах

→ Используем
предобработку

Source: S. Seitz

by Daniel Drizhuk
Предобработка CG

Source: S. Seitz

● Для оптимизации благодаря ассоциативности


производной и свёртки используют производную
фильтра
by Daniel Drizhuk
Простейшие фильтры CG

● Робертса ● Превитт ● Собеля


-1 0 -1 0 1 -1 0 1

0 1 -1 0 1 -2 0 2

-1 0 1 -1 0 1

Чуть лучше сглаживают шум


by Daniel Drizhuk
Более сильный фильтр CG
● В качестве более Теперь нужно:
сильного фильтра ● Обрезать лишнее

используют производную
● Сузить края
фильтра Гаусса
● Найти связность краёв
F =G∗[−1 ;1]

Source: D. Forsyth
by Daniel Drizhuk
Алгоритм детектора
Canny CG
1. Свёртка с производной
фильтра Гаусса
2. Поиск значения и напр.
градиента
3. Выделение лок.
максимумов
4. Связывание краёв и
обрезание по порогу
(гистерезис)

by Daniel Drizhuk
Поиск локальных
максимумов CG
● Значение в q — максимум, если
экстраполяция значений до точек p и
r меньше.
● Направление градиента Θ —
нормаль к направлению кривой.
→ Предсказание — следующие
точки r либо s
∂f ∂f
Θ =arctan ( / )
∂y ∂x
Source: D. Forsyth

by Daniel Drizhuk
Отсечение по порогу CG
● Выбираем два порога —
низкий и высокий
● Для каждой точки Высокий

проверяем её на порог
– Если высокий — тут
может начаться кривая Низкий
– Если низкий — тут может
быть продолжение кривой
– Иначе отбрасываем
Гистерезис
Source: L. Fei-Fei

by Daniel Drizhuk
Фурье-фильтры CG
● Очистка шумов ● Двумерное FFT
● Выделение краёв 2π ni 2π m j
f i , j =sin ( + )
N M
● Сжатие
● Выделение направлений
● Анализ частот ● Декомпозиция на 2
● Восстановление одномерных FFT
направлений ЭМ волн – Сначала по строкам
– Потом по столбцам

by Daniel Drizhuk
Спектры CG
● Обычно изображение
отражается по вертикали
и горизонтали через
центр
● Чаще всего постоянную
составляющую удаляют
и применяют
логарифмическую карту
яркости

by Daniel Drizhuk
Сложные фильтры CG
● Многие фильтры делаются путём наложения нескольких
слоёв-копий с простыми фильтрами на исходное
изображение, используя определённое правило
наложения (*, /, AND, XOR, +, Screen...)
– Правило вычисляется попиксельно, на каждом канале
● Пример сложного фильтра
(Мягкий свет)
– 2 копии с гауссовым размытием и
гамма-расширением диапазона
– Наложение 40%, max(A,B)
– Наложение 30%, min(A,B)

by Daniel Drizhuk