美文网首页
numpy.gradient

numpy.gradient

作者: 张王李刘赵孙杨 | 来源:发表于2018-11-21 18:36 被阅读86次

numpy.gradient(): 计算n维数组的梯度,返回和原始数组同样大小的结果。

说明

对于1维的数组:两个边界的元素直接用后一个减去前一个值,得到梯度,即b-a;对于中间的元素,取相邻两个元素差的一半,即(c-a) / 2
如:

In [2]: f = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)

In [3]: np.gradient(f)
Out[3]: array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])

对于2维数组:分别计算每个维度上的梯度,每个维度上的梯度和上面的1维数组梯度求法相同。
如:

In [4]: np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float))
Out[4]: 
[array([[ 2.,  2., -1.],
        [ 2.,  2., -1.]]), array([[1. , 2.5, 4. ],
        [1. , 1. , 1. ]])]

对于高维数组,在上面的基础上继续扩展即可。

应用

对于图像来说,我们使用2维数组比较多,因此这里以求一个灰度图像的梯度为例,说明下numpy.gradient的用法:

  9 def norm(x, axis=0):
 10     return np.sqrt(np.sum(np.square(x), axis=axis))
 11 
 12  
 13 if  __name__ == '__main__':
 14     img = imread('./1.png')
 15     img = rgb2gray(img)
 16     img = gaussian(img, sigma=3)
 17     img = img - np.mean(img)
 18    
 19     img_grad = np.gradient(img)
 20     img_grad = norm(img_grad)
 21    
 22 
 23     fig = plt.figure()
 24     ax = fig.add_subplot(1, 2, 1)
 25     ax.imshow(img, 'gray')
 26    
 27     ax = fig.add_subplot(122)
 28     ax.imshow(img_grad, 'gray')
 29 
 30     plt.show()

结果

gradient

相关文章

  • numpy.gradient

    numpy.gradient(): 计算n维数组的梯度,返回和原始数组同样大小的结果。 说明 对于1维的数组:两个...

网友评论

      本文标题:numpy.gradient

      本文链接:https://www.haomeiwen.com/subject/fvycqqtx.html