Обратитесь к документации MATLAB численного градиента: http://www.mathworks.com/help/matlab/ref/gradient.html
градиент вычисляет центральную разность для внутренних точек. Например, рассмотрим матрицу с единичными данными A, которая имеет горизонтальный градиент G = градиент (A). Значения внутреннего градиента G (:, j):
G(:,j) = 0.5*(A(:,j+1) - A(:,j-1));
где j изменяется от 2 до N-1, где N - размер (A, 2).
Значение градиента вдоль краев матриц вычисляются с односторонний разностями, так что
G(:,1) = A(:,2) - A(:,1);
G(:,N) = A(:,N) - A(:,N-1);
Если указан интервал точки, то различия масштабируются соответствующим образом. Если указаны два или более выходов, градиент также вычисляет различия по другим измерениям аналогичным образом. В отличие от функции diff, градиент возвращает массив с таким же количеством элементов, что и вход.
A = magic(5)
Результат:
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
[Gx, Gy] = gradient(A)
Результат:
Gx =
7.0000 -8.0000 -8.0000 7.0000 7.0000
-18.0000 -8.0000 4.5000 4.5000 2.0000
2.0000 4.5000 7.0000 4.5000 2.0000
2.0000 4.5000 4.5000 -8.0000 -18.0000
7.0000 7.0000 -8.0000 -8.0000 7.0000
Gy =
6.0000 -19.0000 6.0000 6.0000 1.0000
-6.5000 -9.0000 6.0000 6.0000 3.5000
-6.5000 3.5000 6.0000 3.5000 -6.5000
3.5000 6.0000 6.0000 -9.0000 -6.5000
1.0000 6.0000 6.0000 -19.0000 6.0000
Наиболее левая колонка Gx:
A(:, 2) - A(:, 1)
Результат:
7
-18
2
2
7
Как вы можете видеть, Gx(:, 1)
равно A(:, 2) - A(:, 1)
.
Тот же результат для Gy:
A(2, :) - A(1, :)
Результат:
6 -19 6 6 1
Padding края по репликации:
Для получения градиентного фильтра фильтра (размер [3, 1] и [1, 3]) заполнение является просто репликацией строки и столбца с каждой стороны:
17 17 24 1 8 15 15
17 17 24 1 8 15 15
23 23 5 7 14 16 16
4 4 6 13 20 22 22
10 10 12 19 21 3 3
11 11 18 25 2 9 9
11 11 18 25 2 9 9
Пример o е формула внутри границ изображения:
Сх (:, 2) = 0,5 * (А (:, 3) - А (:, 1))
Пример:
0.5*(A(:, 3) - A(:, 1))
Результат:
-8.0000
-8.0000
4.5000
4.5000
7.0000