Если вам просто нужно быстрое и грязное решение из-за ограничения размера OpenCV, то вы можете разделить ядро 35x35 на 5x5 набор «плиток ядра» 7x7, применить каждую «плитку ядра» к изображению, чтобы получить вывод , затем сдвиньте результат и объедините их, чтобы получить окончательную сумму.
Общие рекомендации по свертке с большими 2D ядрами:
- Попробуйте использовать разделимые ядра, то есть ядро, являющееся внешним произведением вектора столбца и вектора строки. Другими словами, матрица, которая представляет ядро, имеет ранг-1.
- Попробуйте использовать метод FFT. Свертка в пространственной области такая же, как поэлементное сопряженное умножение в частотной области.
- Если ядро имеет полный ранг и для целей приложения оно не может быть изменено, тогда рассмотрите возможность использования SVD для разложения ядра на набор из 35 матриц ранга 1 (каждая из которых может быть выражена как внешний продукт вектор столбца и вектор строки), и выполняют свертку только с матрицами, связанными с наибольшими сингулярными значениями. Это вносит ошибки в результаты, но ошибка может быть оценена на основе единичных значений. (например, метод MATLAB)
Другие особые случаи:
- Ядра, которые могут быть выражены в виде суммы перекрывающихся прямоугольных блоков, могут быть вычислены с использованием интегрального изображения (метод, используемый при распознавании лиц Виолы-Джонса).
- Ядра, которые являются гладкими и модальными (с небольшим количеством пиков), могут быть аппроксимированы суммой двумерных гауссианов.