hog的英文,hog全称
什么是猪?
梯度直方图,也称为HOG,是一种特征描述符,类似于Canny边缘检测器。它用于计算机视觉和图像处理中的目标检测。
该技术统计图像局部区域中梯度方向的出现次数。这种方法类似于边缘方向直方图和尺度不变特征变换(SIFT)。
HOG描述符侧重于对象的结构或形状。它优于任何边缘描述符,因为它使用梯度的大小和角度来计算特征。对于图像区域,它使用梯度的大小和方向来生成直方图。
特征计算的第一步。获取要计算其特征的输入图像。将图像调整为128x64像素(高128像素,宽64像素)。本文使用了这个维度,作者建议将其作为这类检测的主要目标,以便在行人检测任务中获得更好的结果。由于这篇论文的作者在麻省理工学院的行人数据库上获得了极其完美的结果,他们决定制作一个新的、更具挑战性的数据集,名为“INRIA”数据集(http://Pascal . inrialpes . fr/data/human/),其中包含了从一组不同的个人照片中截取的1805张(128x64)人体图像。
图1:导入的图像。图2:灰度图像。图3:缩放导入图像和灰度图像:
2.计算图像的梯度。通过结合图像的大小和角度来获得梯度。考虑一个3x3像素的块,先计算每个像素的Gx和Gy。对于每个像素值,首先使用以下公式计算Gx和Gy。
计算Gx后,使用下面提到的公式计算每个像素的振幅和角度。
图4:图像振幅的可视化。图5:图像角度的视觉图片
3.获得每个像素的梯度后,将梯度矩阵(幅度和角度矩阵)分成88的单元,形成块。对于每个块,计算9个区间的直方图,每个区间的角度范围是20度。图8示出了9个区间的直方图,其中值在计算后分布。这些直方图中的每个间隔输出该块中梯度的幅度。由于该块包含64个不同的值,因此将对所有64个振幅和梯度值进行以下计算。由于我们使用9区间直方图,所以:
第j个区间的边界如下:
每个区间的中心值为:
图6:振幅图像上的88块。图7:角度图像上的8x8图片
图8: 9区间直方图的表示
对于块中的每个单元格,我们将首先计算第j个区间,然后计算将分别提供给第j个和(j-1)个区间的值。该值由以下公式给出:
将数组列作为区间的单位,将Vj和Vj 1的值附加到数组中,对每个像素计算的第j个和第(j 1)个单位进行索引。
计算出的复合矩阵形状为16x8x9。
在计算所有区间的直方图之后,9区间直方图矩阵中的四个区间被组合以形成新的区间(2x2)。以重叠的方式移动,步长为8个像素。对于区间中的所有4个单元,我们连接每个组成单元的所有9个区间直方图以形成36个特征向量。
上图说明了9区间直方图的计算方法。
遍历图像周围的2x2网格框,以从四个箱生成组合的fbi。
每个箱的fbi值由L2范数归一化:
其中,是一个小值,与fb的平方相加,以避免零分频误差。在代码中,值为1e-05。
为了归一化,首先通过以下公式计算k值:
进行这种标准化是为了减少同一物体的图像之间对比度变化的影响。从每个块中,收集36个点的特征向量。水平方向有7个部分,垂直方向有15个部分。因此,HOG特征的总长度为:71536=3780。获取所选图像的HOG特征。
使用浏览库可视化同一图像上的HOG特征
Python计算HOG特征导入库和所需图像。
所用图像的可视化。
plt.figure(figsize=(15,8))plt.imshow(img,cmap= gray )PLT。轴(“关闭”)PLT。显示()
img=np.array(img)计算图像的梯度和角度
mag=[]theta=[]for iinrange(128):magnitudeArray=[]angle array=[]for jinrange(64):#轴0的条件ifj-1=0orj 1=64:ifj-1=0:#第一个元素Gx=img[I][j 1]-0 elifj 1=len(img[0]):Gx=0-img[I][j-1]#第一个元素else:Gx=img[I][j 1]-img[I][j-1]#轴一的条件ifi-1=0 ori 1=128:ifi-1=0:Gy=0-img[I 1][j]elifi 1=128:Gy=img[I-1][j]-0 else:Gy=img[I-1][j]-img[I 1][j]#计算幅度magnitude=math.sqrt(pow(Gx,2) pow(Gy,2))magnitudearray。append(round(量值,9))#计算角度ifGx==0:角度=数学。度(0.0)否则:角度=数学。度(ABS(数学。atan(Gy/Gx)))角度阵列。附加(圆形(角度,9)mag。追加(magnitudeArray)theta追加(角度数组)mag=NP。阵列(mag)=NP。阵列()图像幅度的可视化
plt.figure(figsize=(15,8))plt.imshow(mag,cmap= gray )PLT。轴(“关闭”)PLT。显示()
图像角度的可视化
plt.figure(figsize=(15,8))plt.imshow(theta,cmap= gray )PLT。轴(“关闭”)PLT。显示()
箱数=9步长=180/箱数计算第j个区间的函数
defcalculate_j(angle):temp=(角度/步长)-0.5j=math.floor(temp)returnj计算第j个区间的中心值的函数
def calculate _ Cj(j):Cj=step _ size *(j 0.5)返回回合(Cj,9)计算第j个区间的值的函数
defcalculate_value_j(magnitude,angle,j):Cj=calculate _ Cj(j 1)Vj=magnitude *(Cj-angle)/step _ size)返回圆(Vj,9)为8x8单元格提供9区间直方图
histogram _ points _ nine=[]for iinrange(0,128,8):temp=[]forjinrange(0,64,8):magnitude _ values=[[mag[I][x]for xinrange(j,j 8)]for iinrange(j,j 8)]angle _ values=[[theta[I][x]for xinrange(j,j 8)]foriinrange(i,I 8)]for kin range(len(magnitude _ values)):for Lin range(len(magnitude _ values[0]):bins=[in为由2x2的块提供猪特征向量
(1个块由8x8个单元组成)
epsilon=1e-05 feature _ vectors=[]for iinrange(0,len(histogram_points_nine)-1,1):temp=[]forjinrange(0,len(histogram _ points _ nine[0])-1,1):values=[[histogram _ points _ nine[I][x]for xinrange(j,j 2)]foriinrange(i,I 2)]final _ vector=[]for invalues:for link:form in 1:final _ vector。append(m)k=round(数学。sqrt([动力(动力获得的猪特征数量
print(f hog特征数={ len(feature _ vectors)* len(feature _ vectors[0])* len(feature _ vectors[0][0])} )hog特征数=3780在计算机编程语言中使用撇除库的猪特征导入库
从fromskimage。ioimportmreadfromskimage。transformimportresizefromskimage。featureimporthogfromskimage importexposureimportmatplotlib。pyplotasplt读取图像
img=im read( b . jpg )PLT。轴(“关闭”)PLT。im show(img)print(img。形状)(781,794,3)
缩放
resized_img=resize(img,(128*4,64 * 4))PLT。轴(“关闭”)PLT。im show(调整大小_ img)print(调整大小_ img。形状)(512,256,3)
创建和可视化猪特征
fd,hog_image=hog(resized_img,orientations=9,pixels_per_cell=(8,8),cells_per_block=(2,2),visualize=True,channel=True)PLT。轴(“关闭”)PLT。im show(hog _ image,cmap=gray)plt.show()
科拉布链接:https://colab。研究。谷歌。com/drive/1 _ ydbx 68 ucxejk 448 y0 byaocuzw 5 hwr?usp=共享
参考引用
人体检测的方向梯度直方图:http://lear . inrialpes . fr/people/triggs/pubs/Dalal-cvpr 05 . pdf
撇除文件:https://scikit-image.org/docs/dev/api/skimage.feature.html?highlight=猪#脱脂年龄。特色。猪
猪(梯度方向直方图)特征(使用矩阵实验室和计算机编程语言的理论和实现):https://www.youtube.com/watch?v=QmYJCxJWdEs
END
如果你看到这个,说明你喜欢这篇文章,请转发,喜欢。微信搜索“大叔_pn”。欢迎添加小编微信“woshicver”,每天在朋友圈更新一篇高质量的博文。
扫描二维码添加边肖
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。