Почему этот порядок фильтра Гаусса в scipy дает производную x и y? - PullRequest
0 голосов
/ 02 июля 2018

Я использую фильтр Гаусса со Scipy, и я увидел этот код онлайн, который мне любопытен.

imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (0,1), imx)
imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (1,0), imy)

Для первого вызова фильтра Гаусса порядок равен (0,1) и в соответствии с этой ссылкой , которая должна давать производную первого порядка гауссианы в направлении y. Однако, запустив код, я вижу, что гауссиан вдоль направления X.

То же самое относится и к imy. Почему код работает таким образом?

Для справки, работает:

filters.gaussian_filter(im, (sigma, sigma), (0, 1), output= imx)

в этом массиве:

[[0 3 2]
[1 4 1]
[3 4 2]]

Возвращает:

[[0.00071801 0.00148952 0.00077151]
 [0.0006947  0.00144284 0.00074815]
 [0.00067141 0.00139622 0.00072482]]

Что представляет собой гауссиан в направлении x, хотя порядок (0, 1) предполагает, что он должен быть в направлении y. Я думаю, что я мог что-то упустить.

1 Ответ

0 голосов
/ 02 июля 2018

SciPy работает с массивами, а не с изображениями. Массивы не имеют x-координаты и y-координаты, у них есть индексы. Таким образом, поведение SciPy объясняется в терминах индексов :

порядок: int или последовательность значений, необязательно
Порядок фильтра по каждой оси задается в виде последовательности целых чисел или в виде одного числа. Порядок 0 соответствует свертке с гауссовым ядром. Положительный порядок соответствует свертке с этой производной гауссиана.

Итак, [0, 1] - это производная в направлении изменения второго индекса, а [0, 0, 0, 1, 0] - это производная в направлении изменения четвертого индекса.

Когда двумерный массив представлен графически, обычно первый индекс интерпретируется как «номер строки», а второй индекс - как «номер столбца». Таким образом, первый индекс соответствует вертикальному направлению вниз , а второй индекс - горизонтальному (слева направо, если только мы не находимся в среде RTL).

Итак, (0, 1) является горизонтальным, а (1, 0) - вертикальным. Автор страницы, возможно, допустил терминологическую ошибку. Кроме того, нет закона, запрещающего называть горизонтальную ось y и вертикальную ось x, поэтому они могли это сделать.

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