引言:在图像处理领域,HOG可算是技术元老了,它在深度学习还没出生之前,可所谓是爆红,相对于是当时的网红,红人,热搜。
1.HOG原理
HOG主要是统计图像的梯度信息,类似于直方图,只不过直方图统计的是像素值,HOG统计的是像素的梯度信息,可以这样理解,HOG是在直方图的基础上做了梯度信息,有点像站在巨人的肩膀上。(小琼的简单粗暴理解,如果理解错误,欢迎大家批评指正)
2.主要内容(算法流程)
1》标准化。
规范的术语叫,主要目的是将图像的像素值归一化到0-1区间,有利于计算,减少计算量。
img=img/255 ;(像素值是0-255)
2》Gamma矫正。
HOG的算法首先第二步是进行Gamma矫正,(类似于直方图均衡化,夸大灰度图像的区间,一般取值为0.5-0.8,主要是消除强烈光照影响)
公式:Gamma=IMG^gamma ;(gamma=0.8)
(加强理解)对原图像进行指数变换。
3》计算梯度。
这是核心部分,计算图像的X、Y方向的梯度信息。公式如下:
Gx[ i , j ]=img[ i+1, j ]- img[ i-1,j ]
Gy[ i , j ]=img[ i, j+1 ]- img[ i , j-1 ]
然而最终的梯度图像Gimg[ i , j ] 的像素值取X、Y方向梯度的幅值。
Gimg[ i , j ] = (Gx[ i , j ]**2 + Gy[ i , j ]**2)**0.5
4.代码实现:
1》首先展示一下效果图:(总感觉怪怪的!)
HOG特征图
X、Y方向上的梯度图和HOG特征图
代码实现:
import cv2 import numpy as np import matplotlib.pyplot as plt path='./cat1.png' img = cv2.imread(path) gamma = 0.8 Gamma = ((pic/255) ** (1/gamma)) img=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) Gyimg=img.copy() Gximg=img.copy() Gimg=img.copy() grad_G=[] for i in range(1,img.shape[0]-1): for j in range(1,img.shape[1]-1): Gximg[i,j]=img[i+1,j]-img[i-1,j] Gyimg[i,j]=img[i,j+1]-img[i,j-1] Gimg[i,j]=np.sqrt(Gyimg[i,j]**2+Gximg[i,j]**2) # image=Gyimg+Gximg plt.figure(figsize = (25,10)) plt.subplot(131) plt.imshow( Gximg) plt.subplot(132) plt.imshow(Gyimg) plt.subplot(133) plt.imshow(Gimg) plt.show()
#
5.结束:
GAME OVER
如果理解错误,欢迎大家批评,及时纠正小琼的错误哦,真心感谢你的纠正!!!
如果小伙伴梦有疑问欢迎在评论区留言哦!!!
如果感觉不错的话!点个赞呗,不用客气!(O(∩_∩)O哈哈~)
欢迎和小伙伴梦一起学习,共同努力,加油!!!