ИнтВиз

Математический анализ · модуль 3 из 14

Свёртка: как работают фильтры и свёрточные нейросети

Ядро 3×3 проходит по каждому пикселю и считает взвешенную сумму соседей. Девять чисел решают, будет картинка размыта, станет резче или превратится в контуры.

Исходное изображение (оттенки серого)
Результат свёртки

Теория

Полутоновое изображение — это матрица яркостей пикселей от 0 (чёрный) до 255 (белый). Дискретная свёртка с ядром $K$ размера 3×3 вычисляет новое значение каждого пикселя как взвешенную сумму его окрестности:

$$ (I * K)(i, j) = \sum_{m=-1}^{1} \sum_{n=-1}^{1} I(i - m,\, j - n) \, K(m, n). $$

Ядро «скользит» по изображению, и в каждой позиции выполняется одна и та же операция. Свойства результата полностью определяются девятью числами ядра:

  • размытие — все веса положительны и в сумме дают 1, поэтому пиксель заменяется средним по окрестности;
  • повышение резкости — центральный вес больше суммы остальных, и разница между пикселем и соседями усиливается;
  • выделение границ — сумма весов равна 0, поэтому на однотонной области результат нулевой, а на перепаде яркости — большой. Ядро Собеля $\begin{pmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{pmatrix}$ — разностное приближение производной по $x$.

Если сумма весов не равна 1, общая яркость меняется; делитель ядра нормирует результат. Значения за пределами диапазона 0–255 обрезаются или берутся по модулю.

Где это применяется в IT

  • Свёрточные нейросети (CNN). Распознавание лиц, медицинских снимков и дорожных знаков начинается со свёрточных слоёв. В отличие от этого модуля, ядра там не задаются вручную, а подбираются при обучении; первые слои обычно сами приходят к ядрам, похожим на фильтры Собеля.
  • Фото- и видеоредакторы. Размытие, резкость, тиснение и выделение контуров в графических редакторах реализованы свёрткой.
  • Компьютерное зрение. Библиотека OpenCV использует свёртку для поиска границ (детектор Кэнни), шумоподавления и подготовки изображений к распознаванию.

Код на Python

Загружаю пример…