Технические основы
Введение
Фильтр изображения может быть представлен следующей функцией:
где (i = 1,2). Обычно задаются условия и , где и — целые числа, что позволяет гарантировать нечетный размер измерений фильтра. Как правило, равно , поэтому, если опустить нижние индексы, фильтр имеет размер . Поскольку область фильтра представляет сетку пространственных координат, фильтр часто называют маской и визуализируют как сетку.
Например, маску можно изобразить так:
Значения называют коэффициентами фильтра.
Свертка и корреляция
Есть две основополагающие и тесно связанные операции, часто применяемые при фильтрации изображений. Это дискретная корреляция и свертка.
Операция корреляции, обозначаемая символом , определяется в двух измерениях выражением
в то время как соответствующая операция свертки, обозначаемая символом , определяется в двух измерениях выражением
Так как цифровое изображение имеет конечную протяженность, обе эти операции не определены на его границах. В частности, для изображения размером , the function is only defined for and . На практике эта проблема решается путем искусственного расширения области изображения. Например, изображение можно дополнить нулями. Возможны и другие стратегии дополнения, которые более подробно рассматриваются в разделе Параметры этой документации.
Одномерный пример
Различие между корреляцией и сверткой проще всего понять, обратившись к одномерному примеру, взятому с некоторыми изменениями из работы [1]. Предположим, фильтр имеет следующие коэффициенты:
Рассмотрим дискретную функцию единичного импульса f: \{x \in \mathbb{Z} \mid 1 \le x \le 7 \} \rightarrow \{0,1\}
, дополненную нулями. Эту функцию можно визуализировать как изображение:
Операцию корреляции можно рассматривать как проход по изображению и вычисление суммы произведений в каждой позиции. Например,
дает результат g: \{x \in \mathbb{Z} \mid 1 \le x \le 7 \} \rightarrow \mathbb{R}
, который при визуализации в виде цифрового изображения выглядит так:
Операцию свертки можно рассматривать аналогичным образом за тем исключением, что фильтр повернут на 180 градусов. В частности,
дает результат , что равносильно
Вместо поворота маски фильтра можно повернуть и получить тот же результат свертки. На самом деле традиционная форма записи свертки предполагает поворот , а не . В случае симметричности свертка и корреляция дают один и тот же результат.
Свертка и корреляция как умножение матриц
Дискретные операции свертки и корреляции можно также сформулировать как умножение матриц: один из входных объектов преобразуется в матрицу Теплица, а другой представлен в виде вектора столбцов. Например, рассмотрим функцию и фильтр . Тогда умножение матриц
эквивалентно свертке
Чтобы представить многомерную свертку как умножение матриц, необходимо преобразовать многомерные массивы в векторы столбцов и далее действовать так же. Естественно, результат умножения матриц потребуется преобразовать в соответствующий многомерный массив.