В свертке две математические функции объединяются для получения третьей функции. При обработке изображений функции обычно называются ядрами. Ядро - это не что иное, как квадратный массив пикселей (так сказать, маленькое изображение). Обычно значения в ядре складываются в единицу. Это делается для того, чтобы убедиться, что энергия не добавляется и не удаляется с изображения после операции.
В частности, ядро Гаусса (используется для размытия по Гауссу) представляет собой квадратный массив пикселей, где значения пикселей соответствуют значениям кривой Гаусса (в 2D).
Каждый пиксель в изображении умножается на ядро Гаусса. Это делается путем размещения центрального пикселя ядра на пикселе изображения и умножения значений в исходном изображении на пиксели в ядре, которые перекрываются. Значения, полученные в результате этих умножений, суммируются, и этот результат используется для значения в целевом пикселе. Глядя на изображение, вы бы умножили значение в (0,0) во входном массиве на значение в (i) в массиве ядра, значение в (1,0) во входном массиве на значение в (ч). ) в массиве ядра и так далее. и затем добавьте все эти значения, чтобы получить значение для (1,1) на выходном изображении.
Чтобы ответить на ваш второй вопрос первым, чем больше ядро, тем дороже операция. Таким образом, чем больше радиус размытия, тем больше времени займет операция.
Чтобы ответить на ваш первый вопрос, как объяснялось выше, свертка может быть сделана путем умножения каждого входного пикселя на все ядро. Однако, если ядро симметрично (то есть ядро Гаусса), вы также можете умножить каждую ось (x и y) независимо, что уменьшит общее количество умножений. В правильных математических терминах, если матрица отделима, она может быть разложена на (M × 1) и (1 × N) матрицы. Для ядра Gaussian выше это означает, что вы также можете использовать следующие ядра:
1256⋅ ⎡⎣⎢⎢⎢⎢⎢⎢1464141624164624362464162416414641⎤⎦⎥⎥⎥⎥⎥⎥= 1256⋅ ⎡⎣⎢⎢⎢⎢⎢⎢14641⎤⎦⎥⎥⎥⎥⎥⎥⋅ [ 14641]
Теперь вы должны умножить каждый пиксель во входном изображении на оба ядра и добавить результирующие значения, чтобы получить значение для выходного пикселя.
Для получения дополнительной информации о том, как увидеть, является ли ядро отделимым, перейдите по этой ссылке .
Изменить: два ядра, показанные выше, используют немного разные значения. Это связано с тем, что параметр (сигма), используемый для кривой Гаусса для создания этих ядер, немного отличался в обоих случаях. Для объяснения того, какие параметры влияют на форму кривой Гаусса и, следовательно, значения в ядре, перейдите по этой ссылке
Редактировать: на втором изображении выше написано, что используемое ядро перевернуто. Это, конечно, имеет значение, только если ядро, которое вы используете, не симметрично. Причина, по которой вам нужно перевернуть ядро, связана с математическими свойствами операции свертки (см. Ссылку для более подробного объяснения свертки). Проще говоря: если вы не перевернете ядро, результат операции свертки будет перевернут. Перевернув ядро, вы получите правильный результат.