Русская Википедия:Ядро свертки

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Нет источников В цифровой обработке изображений, ядро свёртки, маска, свёрточная матрица — матрица для размытия, выделения границ изображения и других эффектов. Данные эффекты достигаются путем свёртки ядра и изображения, где каждый пиксель интерпретируется как трёхмерный RGB вектор.

Детали

Свёртка ядра и изображения выражается формулой

<math>g(x,y)= w * f(x,y) = \sum_{\Delta x = -a}^{a} \sum_{\Delta y = -b}^{b} w(\Delta x, \Delta y)f(x - \Delta x, y - \Delta y)</math>,

где <math>g(x,y)</math> — изображение, после применения свёртки, <math>w</math> — ядро свёртки, <math>f(x,y)</math> — изначальное изображение, <math>a, b</math> — произвольные границы свёртки. Стоит заметить, что операция будет применена в диапазоне от <math>-a</math> до <math>a</math> и от <math>-b</math> до <math>b</math> для координат <math>x</math> и <math>y</math> соответственно.

В зависимости от ядра, операция может создавать разные графические эффекты, такие как:

Операция Ядро Изображение
Тождественное отображение <math>\begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}</math> Файл:Кот до обработки.png
Выделение границ <math>\begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \end{bmatrix}</math> Файл:Кот с выделенными границами.png
Резкость <math>\begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \end{bmatrix}</math> Файл:Кот с фильтром резкости.png
Размытие по Гауссу (3 х 3) <math>\frac{1}{16} \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix}</math> Файл:Кот с размытием по Гауссу.png
Тиснение <math>\begin{bmatrix} -2 & -1 & 0 \\ -1 & 1 & 1 \\ 0 & 1 & 2 \end{bmatrix}</math> Файл:Тиснённый кот.png

Алгоритм

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

для каждой строки пикселей в изображении:
   для каждого пикселя строки в строке пикселей:
       переменная буфер = 0
       для каждой строки элементов в ядре:
           для каждого элемента ядра в строке элементов:
               если позиция элемента ядра соответствует позиции пикселя строки тогда:
                   умножить элемент ядра на пиксель строки
                   добавить результат к буферу
               конецесли
       установить значение буфера в пиксель выходного изображения

Обработка краев

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

Файл:Кот с расширенными пикселями.png
Расширение
Расширение
Краевые пиксели экстраполируются за границы изображения, чтобы предоставить значения для матрицы
Зацикливание
Пиксели для матрицы берутся с противоположного края, «зацикливая» изображение
Обрезание
Файл:Кот с зацикленным расширением.png
Зацикливание
Любой пиксель изображения, который предполагает выход матрицы за границы, пропускается. В таком случае размер конечного изображения отличен от размера изначального изображения
Постоянное значение
При выходе за границу, используется постоянное значение цвета