80行Python实现-HOG梯度特征提取
本文用80行代码的Python实现了HOG算法,代码在Github Hog-feature,虽然OpenCV有实现好的Hog描述器算法,但是本文目的是完全理解HOG特征提取的具体方法和实现原理,以及检验相关参数对实验结果的影响,提升检测到的特征的性能以及优化代码的运行速度。
Python numpy在slide的过程中也会有对象传递,也就是地址传递,并不是直接copy过去,这个问题困扰我一天了,详情见下例,c数组中的第一个元素随着第二个元素的增加而改变了.
解决方案是用c.append(np.array(a[1]))
,将a[1]
用np.array()
方法重新申明为numpy数组,因为np.array()
默认copy矩阵中的元素再创建一个新的numpy.ndarray对象,但是与之很相近的np.asarray()
则不copy,这两个方法在使用的时候要注意了,关于np.asarray()
和np.array()
的区别,详情见asarray vs array
# 声明a为3*3的矩阵
>>> import numpy as np
>>> a=np.zeros((3,3))
>>> a
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
# 声明b为3*1的矩阵,并赋值给a的第一行
>>> b=np.ones((1,3))
>>> a[1]=b
>>> a
array([[ 0., 0., 0.],
[ 1., 1., 1.],
[ 0., 0., 0.]])
# 声明c为空矩阵,把a的第一行append到c
>>> c=[]
>>> c.append(a[1])
>>> c
[array([ 1., 1., 1.])]
# 改变b,同时赋值给a的第一行
>>> b=np.array([1,2,3])
>>> a[1]=b
>>> a
array([[ 0., 0., 0.],
[ 1., 2., 3.],
[ 0., 0., 0.]])
# 再次把a的第一行append到c中,发现c的第一个元素也跟着改变了
>>> c.append(a[1])
>>> c
[array([ 1., 2., 3.]), array([ 1., 2., 3.])]
LEAVE COMMENT ON: