Проблема с несколькими сложенными сверточными фильтрами (как предполагает реализация подпрограммы фильтра) заключается в том, что для каждого прохода вам (теоретически) необходимо получить доступ ко всем значениям, которые влияли на предыдущие проходы фильтра.
Чтобы проиллюстрировать это, рассмотрим следующий пример:
Input: abcdefghijk
Filter 1: 121
Filter 2: 1210121
Для прохода 1 вы получите следующие выходные данные:
a: 2a+b
b: a+2b+c
c: b+2c+d
d: c+2d+e
e: d+2e+f
...
На проходе 2 вы обычно используете данные, уже обработанные проходом1 в целом:
a: b+2c+d
b: a+c+2d+e
c: 2a+b+d+2e+f
d: a+2b+c+e+2f+g
Если вы объедините два:
a: (a+2b+c)+2(b+2c+d)+(c+2d+e)
b: (2a+b)+(b+2c+d)+2(c+2d+e)+(d+2e+f)
...
Итак, объединяя два фильтра, вы значительно усложняете функцию, поскольку каждый проход зависит отбольше оригинальных входов, чем предыдущий.Вы можете предварительно рассчитать коэффициенты, но это требует некоторой ручной работы.
Редактировать: Я не учел масштабирование.Если коэффициент масштабирования всегда одинаков для одного прохода фильтра, он, конечно, может быть учтен и применен к конечному результату.