2016-07-24 2 views
0

Чтобы вычислить гистограмму ориентированных градиентов для изображения, нам нужно вычислить векторы градиента для каждого пикселя. Но пиксели на краях не имеют некоторых соседей для векторов градиента. Как с этим бороться?Для гистограммы ориентированных градиентов, как вычислить вектор градиента пикселей по краям?

Например, пиксель на левом краю изображения не имеет соседнего слева. Тогда как вычислить его градиент в направлении x?

ответ

1

Обратитесь к документации 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 
Смежные вопросы