【问题标题】:For histogram of oriented gradients, how to compute the gradient vector of pixels on the edges?对于定向梯度的直方图,如何计算边缘像素的梯度向量?
【发布时间】:2016-11-27 21:47:29
【问题描述】:

要计算图像的定向梯度直方图,我们需要计算每个像素的梯度向量。但是边缘上的像素缺少梯度向量的一些邻居。怎么处理?

例如,图像左边缘的像素在其左侧没有相邻像素。那么如何计算它在x方向的梯度呢?

【问题讨论】:

    标签: matlab opencv image-processing computer-vision gradient


    【解决方案1】:

    数值梯度参考MATLAB文档:http://www.mathworks.com/help/matlab/ref/gradient.html

    梯度计算内部数据点的中心差。例如,考虑一个具有单位空间数据 A 的矩阵,其水平梯度 G = gradient(A)。内部梯度值 G(:,j) 为:

    G(:,j) = 0.5*(A(:,j+1) - A(:,j-1)); 其中 j 在 2 和 N-1 之间变化,其中 N 是 size(A,2)。

    沿矩阵边缘的梯度值是用单边差计算的,所以

    G(:,1) = A(:,2) - A(:,1); G(:,N) = A(:,N) - A(:,N-1); 如果指定了点间距,则会适当缩放差异。如果指定了两个或多个输出,梯度也会以类似的方式计算沿其他维度的差异。与 diff 函数不同,gradient 返回一个与输入元素个数相同的数组。

    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
    

    通过复制填充边缘:
    对于过滤梯度过滤器(大小 [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
    

    图像边界内的公式示例:
    Gx(:, 2) = 0.5*(A(:, 3) - A(:, 1))

    例子:

    0.5*(A(:, 3) - A(:, 1))
    

    结果:

      -8.0000
      -8.0000
       4.5000
       4.5000
       7.0000
    

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2012-07-15
      • 2021-10-14
      • 2012-05-12
      • 2011-08-01
      • 2020-09-12
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多