Как мне показать Gaussian Kernel для 2d? (OpenCV) - PullRequest
0 голосов
/ 23 апреля 2020

Я использую это:

 blur = cv2.GaussianBlur(dst,(5,5),0)

И я хотел показать матрицу ядра следующим образом:

print(cv2.getGaussianKernel(ksize=(5,5),sigma=0))

Но я получаю ошибку типа:

TypeError: an integer is required (got type tuple)

Если я поставлю только 5, я получу матрицу 5x1. Разве ядро ​​размытия не 5х5? Или мне не хватает чего-то фундаментального?

1 Ответ

1 голос
/ 23 апреля 2020

Ядро Гаусса отделимо. Следовательно, сгенерированное ядро ​​является 1D. Функция GaussianBlur применяет это одномерное ядро ​​по очереди к каждому измерению изображения. Свойство отделимости означает, что этот процесс дает точно такой же результат, как и применение двумерной свертки (или трехмерной в случае трехмерного изображения). Но объем работы сильно сокращается. Для вашего ядра 5x5, 2D свертка делает 25 умножений и сложений, отделимая реализация делает только 5 + 5 = 10. Для более крупных ядер усиление становится все более значительным.

Чтобы увидеть полное двумерное ядро, примените функцию GaussianBlur к изображению со всеми нулями и одним пикселем в середине, установленным в 1. Это дискретный эквивалент дельта-функции Дира c, который мы можем использовать для анализа линейных не зависящих от времени функций (== сверточные фильтры).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...