Как работает матрица свертки? - PullRequest
1 голос
/ 08 февраля 2010

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

Ответы [ 4 ]

4 голосов
/ 08 февраля 2010

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

1 1 1
1 1 1
1 1 1

Для этого необходимо заменить каждый пиксель средним значением блока 3х3 с центром в этом пикселе. Вот еще один:

0 0 0
0 1 0
0 0 0

Эта матрица ничего не делает, она возвращает оригинал.

Вес также может быть отрицательным. Эта матрица вычитает среднее значение пикселей рядом с пикселем:

 0 -1  0
-1  4 -1
 0 -1  0

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

3 голосов
/ 08 февраля 2010
1 голос
/ 08 февраля 2010

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

Простой пример взят из руководства по PHP для GD http://www.php.net/manual/en/function.imageconvolution.php:

Допустим, у вас есть такая матрица:

$M = array(array( 2,  0,  0),
           array( 0, -1,  0),
           array( 0,  0, -1));

Когда вы применяете эту матрицу свертки к изображению, то для каждого пикселя, расположенного в точке (x, y) на изображении, соответствующий пиксель на выходе становится:

$I = $in_image;
$out_image[x,y] = $I[x-1,y-1]*$M[0][0] + $I[x,y-1]*$M[0][1] + $I[x+1,y-1]*$M[0][2]
                + $I[x-1,y]  *$M[1][0] + $I[x,y]  *$M[1][1] + $I[x+1,y]  *$M[1][2]
                + $I[x-1,y+1]*$M[2][0] + $I[x,y+1]*$M[2][1] + $I[x+1,y+1]*$M[2][2];

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

Параметр делителя используется для деления всего результата на что-то (обычно это сумма всех значений в матрице), а смещение используется для добавления постоянного члена к конечному выходному значению.

0 голосов
/ 08 февраля 2010

Сверточная матрица работает на каждом канале пикселя изображения независимо.
Таким образом, вы должны сначала узнать о каналах .
Затем вы можете «поиграть» с этой матрицей в интерактивном режиме, если у вас есть Photoshop: перейдите в меню Filters-> Other-> Custom. Центральный элемент матрицы представляет текущий пиксель, все остальные представляют окружающие пиксели. И не забывайте о значении «Масштаб» внизу.
Я думаю, вы можете легко понять, как работает эта матрица.
Вы можете взглянуть на эту вещь здесь . Он также описывает матрицу свертки.

...