обработать ядро ​​35 x 35 методом свертки - PullRequest
0 голосов
/ 02 октября 2010

Дорогие все, я хотел бы сделать свертку с использованием ядра 35 х 35.Любое предложение?или любой метод уже в OpenCV я могу использовать?Потому что теперь cvfilter2d может поддерживать только ядро ​​до 10 x 10.

1 Ответ

1 голос
/ 02 октября 2010

Если вам просто нужно быстрое и грязное решение из-за ограничения размера OpenCV, то вы можете разделить ядро ​​35x35 на 5x5 набор «плиток ядра» 7x7, применить каждую «плитку ядра» к изображению, чтобы получить вывод , затем сдвиньте результат и объедините их, чтобы получить окончательную сумму.

Общие рекомендации по свертке с большими 2D ядрами:

  1. Попробуйте использовать разделимые ядра, то есть ядро, являющееся внешним произведением вектора столбца и вектора строки. Другими словами, матрица, которая представляет ядро, имеет ранг-1.
  2. Попробуйте использовать метод FFT. Свертка в пространственной области такая же, как поэлементное сопряженное умножение в частотной области.
  3. Если ядро ​​имеет полный ранг и для целей приложения оно не может быть изменено, тогда рассмотрите возможность использования SVD для разложения ядра на набор из 35 матриц ранга 1 (каждая из которых может быть выражена как внешний продукт вектор столбца и вектор строки), и выполняют свертку только с матрицами, связанными с наибольшими сингулярными значениями. Это вносит ошибки в результаты, но ошибка может быть оценена на основе единичных значений. (например, метод MATLAB)

Другие особые случаи:

  1. Ядра, которые могут быть выражены в виде суммы перекрывающихся прямоугольных блоков, могут быть вычислены с использованием интегрального изображения (метод, используемый при распознавании лиц Виолы-Джонса).
  2. Ядра, которые являются гладкими и модальными (с небольшим количеством пиков), могут быть аппроксимированы суммой двумерных гауссианов.
...