Спонсор: Intel
Опубликован: 20.08.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Лекция 1:

Основные цветовые модели, представление изображения, базовые операции над изображениями

Лекция 1: 12 || Лекция 2 >

Обработка и анализ полутоновых изображений

Так же как и в случае бинарных изображений, работу с полутоновыми изображениями можно разделить на задачи фильтрации (удаление шумов, повышение чёткости, осветление тёмных участков) и задачи анализа (расчёт градиентов, поиск особых точек и границ объектов).

В процессе создания систем компьютерного зрения фильтрация изображения обычно предшествует извлечению более высокоуровневой информации о сцене, поэтому рассмотрим сначала методы фильтрации.

Линейная фильтрация является, пожалуй, самым часто применяемым методом обработки изображения из-за простоты реализации и скорости работы. Линейная фильтрация осуществляется с помощью дискретной свёртки изображения с заданным фильтром (ядро свёртки). Эту операцию можно представить формулой:

I'(X,Y) = \sum_{i=-k}^K\sum_{j=-k}^K{F(i,j)I(X-i,Y-j)}

где I – исходное изображение, I' – выходное изображение, F – заданный фильтр, представленный изображением размером 2k+1 на 2k+1.

Рассмотрим различные фильтры:

  1. Фильтр

    0 0 0
    0 1 0
    0 0 0

    не изменяет изображения.

  2. Фильтр

    
    \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    1 & 1 & 1 \\
    \hline \\
    1 & 1 & 1 \\
    \hline \\
    1 & 1 & 1 \\
    \hline 
    \end{array}

    равномерно сглаживает изображение.

  3. Фильтр

    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.013 0.022 0.013 0.003

    осуществляет фильтрацию по Гауссу.

Следует отметить, что для подсчёта дискретной свёртки на границе изображения можно, например, экстраполировать граничные пикселы за пределы изображения.

Фильтр


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

в противоположность фильтрам 2 и 3 не размывает, а делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается.

Рассмотрим ещё один пример фильтра, на этот раз нелинейного, который повышает чёткость изображения, например, в случае неправильно выбранного фокуса при съёмке. Фильтрация осуществляется следующим образом:

Шаг 1: Из исходного изображения вычитается отфильтрованное с помощью гауссовского фильтра

I1[i,j] = I[i,j] – (I * Gaussian)[i,j], I[i,j] – пиксель исходного изображения, * - операция свёртки, (I * Gaussian)[i,j] – пиксель отфильтрованного изображения.

Шаг 2: Модуль изображения, полученного на шаге 1, сравнивается с некоторым порогом (параметр алгоритма) и, если он меньше порога (пиксель находится в однородной области), то изображение не изменяется, а если больше порога (это соответствует области изменения яркости), то изменение яркости усиливается путём добавления к значению яркости I1[i,j]*k, где\ k > 0 параметр алгоритма (чем он больше, тем контрастнее становятся границы объектов).

Result[i,j] = I[i,j] if | I1[i,j] | < = T,
Result[i,j] = I[i,j] + k * I1[i,j] if | I1[i,j] | > T

Другой пример нелинейного фильтра – это медианная фильтрация. Медианой набора чисел является число из набора, не меньшее половины чисел набора и не большее другой половины чисел набора. Для каждого пиксела изображения рассматривается его окрестность и вычисляется медиана яркостей пикселов из этой окрестности, значение которой и сохраняется в выходном изображении. Размер окна фильтрации задаётся пользователем (обычно это окна 3x3 или 5x5).

Следует отметить, что медианная фильтрация лучше сохраняет границы изображённых объектов, чем линейная фильтрация, но является более ресурсоёмкой по сравнению с линейной фильтрацией из-за необходимости осуществления операции сортировки.

Линейные фильтры можно также применять для выделения границ объектов. Рассмотрим фильтр Собеля:


  \frac{1}{8} \begin{array}{|c|c|c|}
  \hline \\
  -1 & 0 & 1 \\
  \hline \\
  -2 & 0 & 2 \\
  \hline \\
  -1 & 0 & 1 \\
  \hline 
  \end{array}

Видим, что он даст максимальное значение, когда справа от текущего пиксела лежит светлый объект, а слева тёмный (в идеале чёрный с нулевой яркостью). То есть фильтр по сути является разностной схемой для вычисления производной функции интенсивности по x. При этом соседние строчки принимаются во внимание для того, чтобы уменьшить влияние шума при вычислении производной.

Фильтр Собеля размером 3x3 для вычисления производной по y имеет вид:


  \frac{1}{8} \begin{array}{|c|c|c|}
  \hline \\
  1 & 2 & 1 \\
  \hline \\
  0 & 0 & 0 \\
  \hline \\
  -1 & -2 & -1 \\
  \hline 
  \end{array}

Для вычисления Лапласиана используется следующий фильтр:

0 1 0
1 -4 1
0 1 0

Зная градиенты функции интенсивности и лапласиан, мы можем найти границы объектов, определяя их как точки с высокой нормой градиента (интенсивность резко изменяется на границе объекта) и нулевой второй производной (лапласиан = 0).


Пример нахождения границ объектов


Существуют и другие методы нахождения границ объектов на изображении. Пожалуй, наиболее популярным является метод Канни [4], реализацию которого можно найти в библиотеке OpenCV.

Кроме границ объектов в системах компьютерного зрения часто используются так называемые угловые точки, которые особенно важны для решения задачи слежения за объектом поскольку обладают свойством уникальности в некоторой окрестности.

Угловая точка на изображении определяется как точка, некоторая окрестность которой не похожа на окрестности, полученные сдвигом этой точки в любом направлении. На рисунке ниже проиллюстрировано, что в однородной области нет изменений в окрестности точки в любом направлении, если точка на ребре, то нет изменений вдоль ребра, если точка угловая, то сдвиг окрестности точки в любом направлении повлечёт изменение.


Математически меру схожести окрестностей можно выразить формулой

S(x,y) = \sum_{u} \sum_{v}{(I(u,v) - I(u + x,v + y))^2

где x,y – сдвиг окрестности, u и v - координаты пиксела в окрестности.

Рассмотрим метод представленный в работе [5] для определения положения угловых точек, который реализован в библиотеке OpenCV.

Считая, что x и y малы можно записать

I(u + x,v + y) \approx I(u,v) + I_{x}(u,v)x + I_{y}(u,v)y

Тогда

S(x,y) = \sum_{u} \sum_{v} {(I_{x}(u,v)x + I_{y}(u,v)y)^2}

или S(x,y) \approx (x y)A(\frac{x}{y})

где A = \sum_{u} \sum_{v} {\begin{bmatrix} I_{x}^2 & I_{x}I_{y} \\ I_{x}I_{y} & I_{y}^2 \end{bmatrix}} = \begin{bmatrix} <I_{x}^2> & <I_{x}I_{y}> \\ <I_{x}I_{y}> & <I_{y}^2> \end{bmatrix}

в угловых скобках записаны суммы квадратов производных и произведение частных производных.

Известно, что если матрица А имеет большие собственные числа, то квадратичная функция S изменяется во всех направлениях, то есть удовлетворяет условию угловой точки.

Таким образом, алгоритм имеет следующий вид:

Для каждого пиксела вычисляется минимальное собственное число матрицы A

Находятся локальные максимумы в карте минимальных собственных чисел матрицы А, анализируя окрестность 3 на 3.

Если величина найденного локального максимума превышает заданный порог, то координата этой точки записывается в выходной массив угловых точек.

Часто из-за ошибок экспозиции или из-за погрешностей в освещении изображение получается малоконтрастным. Рассмотрим алгоритм улучшения контраста, основанный на нахождении минимального и максимального значений яркости на изображении. Пусть max – максимальное значение яркости, а min – минимальное. Тогда новое значение пиксела можно записать

new = old * k + b, где k = 255/(max – min), b = -(min*255)/(max – min), old – старое значение пиксела. Применяя данное преобразование ко всем пикселам изображения, контраст повысится, так как минимальная яркость будет 0, максимальная 255, а остальные значения линейно масштабируются. Ниже изображено исходное изображение и результирующее изображение с повышенным контрастом.


Другой популярный алгоритм повышения контраста – это эквализация гистограммы. Он состоит из следующих шагов:

  1. Вычисляется гистограмма H для исходного изображения
  2. Значения бинов гистограммы нормализуются, так что их сумма равна 255
  3. Вычисляется интеграл гистограммы H'(i)=\sum_{0 \leqslant j \leqslant i}H(j).
  4. Полученная интегральная кривая используется в качестве интерполяционной кривой по формуле new(x,y)=H'(old(x,y)), где new(x,y) – новое значение пикселя в точке (x,y), old(x,y) – старое значение, H' – интегральная кривая.

Цветные изображения. Цветовые пространства

Если цветное изображение представить в виде трех одноканальных изображений, то для них применимы все рассмотренные методы обработки полутоновых изображений.

Следует отметить, что не все камеры формируют изображение в формате RGB, многие камеры видеонаблюдения вещают в формате YUV.

В этом формате яркостная составляющая Y выделена в отдельном канале. Две другие U и V несут цветовую информацию. Отметим, что человеческий глаз больше восприимчив к яркостной компоненте, поэтому основная обработка осуществляется для Y канала.

Переход из RGB в YUV и обратно осуществляется линейным преобразованием.

W_{R} = 0.299\;\;\;W_{B} = 0.114\;\;\;W_{G} = 1 - W_{R} - W_{B} = 0.587
Y' = W_{R}R + W_{G}G + W_{B}B
U = U_{Max}\frac{B - Y'}{1 - W_{B}}
V = V_{Max}\frac{R - Y'}{1 - W_{B}}

Обратное преобразование:

R = Y + V\frac{1 - W_{r}}{V_{Max}}
G = Y - U\frac{W_{B}(1 - W_{B})}{U_{Max}W_{G}} - V\frac{W_{R}(1-W_{R})}{V_{Max}W_{G}}
B = Y + U\frac{1 - W_{b}}{U_{Max}}

Существуют и другие удобные для анализа и обработки цветовые пространства, переход в которые из RGB может быть нелинейным.

Например, рассмотрим пространство HSV, которое удобно тем, что его каналы имеют ясное семантическое значение: H – оттенок цвета (Hue), S – насыщенность цвета (Saturation), V – интенсивность цвета (Value). Таким образом, модифицируя канал S, мы можем управлять насыщенностью цветов на изображении.

Ниже представлены четыре изображения: первое – исходное RGB изображение, второе изображение, у которого в каждом пикселе повышена насыщенность S, третье – увеличена яркость (канал V), четвертое – модифицирован канал H, так что цвета поменяли оттенки.


Лекция 1: 12 || Лекция 2 >
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

В описании говорится, что он "делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается".

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?

Сергей Кротов
Сергей Кротов
Россия
Дмитрий Донсков
Дмитрий Донсков
Россия, Москва, Московский Авиационный Институт