Понимание матрицы свертки

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

Я знаю, однако, что эта формула даст мне эффект размытия, но я понятия не имею, почему.

float[] sharpen = new float[] {
     1/9f, 1/9f, 1/9f,
     1/9f, 1/9f, 1/9f,
     1/9f, 1/9f, 1/9f
};

Может ли кто-нибудь объяснить мне, как это работает, или указать мне на какую-то статью, которая объясняет это? Я хотел бы заранее знать, каким будет возможный вывод матрицы, не угадывая.

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


person Get Off My Lawn    schedule 28.11.2012    source источник
comment
В общем случае ваша матрица должна составлять 1,0 или 0,0 в зависимости от желаемого эффекта.   -  person Mark Ransom    schedule 28.11.2012


Ответы (3)


Эта ссылка объясняет, как матрица свертки работает с простой пример.

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

new_value = (1/9)(top-left-neighbor)    + (1/9)(top-neighbor)    + (1/9)(top-right-neighbor) +
            (1/9)(left-neighbor)        + (1/9)(self)            + (1/9)(right-neighbor)     +
            (1/9)(bottom-left-neighbor) + (1/9)(bottom-neighbor) + (1/9)(bottom-right-neighbor)

Новое значение составляет 1/9 от 9 пикселей (включая исходное значение пикселя), что оказывается «средним» значением для квадрата 3x3, с которым работает матрица. Этот «средний» эффект создает размытие, которое вы видите после применения матрицы.

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

person hall.stephenk    schedule 28.11.2012
comment
Можно ли отредактировать изображение в фотошопе и получить для него матрицу свертки? Есть ли инструмент? - person Zen; 23.10.2015

Ознакомьтесь с руководством по матрице свертки с кодом Java.

person Rohan Pawar    schedule 05.09.2013

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

Вы можете начать с прочтения этой статьи. более глубокий поиск в Википедии для свертки - немного реального анализа и знания теории обработки сигналов приветствуется, но если вам интересно, вы можете придумать это.

person moonwave99    schedule 28.11.2012