2013-03-22 2 views
1

У меня есть Java-код, который принимает матрицу свертки (только 2D double[][]) и применяет ее к изображению. Я пытаюсь понять, как создать матрицу, которая даст размытие движения, учитывая угол (в градусах) и величину размытия.Матрица свертки Motion Blur с учетом угла и величины

Пример матрица для размытия с величиной = 1 (средний пиксель размыт на один пиксель в каждом направлении), 45 градусов движение размытости:

0  0 1/3 
0  1/3 0 
1/3 0  0 

Величина определяет размер матрицы (size = 2 * величина + 1), а одна линия ячеек не равна нулю в направлении движения.

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

Псевдо (или фактический) код был бы очень полезен!

ответ

1

Для размытия движения отличные от нуля элементы лежат вдоль одной линии. Вот почему ваш пример работает. [1/n 1/n (ntimes) ... 1/n] будет размываться в горизонтальном направлении, в то время как транспонирование будет размываться по вертикали. Для произвольного угла просто заполните ненулевые элементы, которые наилучшим образом приближаются к линии под нужным углом.

Редактировать.

Например, вы можете попытаться свести к минимуму некоторые функции индексов пикселей, чтобы определить, должен ли этот пиксель быть ненулевым. | (i - 3 * j) | < небольшое число, найдет пиксели вдоль линии склона 3.

+0

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

+0

ах, извините. смирился с моим эвристическим решением. – bogle

+0

@scaevity Вы нашли решение этой проблемы? – zanbri

Смежные вопросы