HOG特征自己编程实现《python图像处理篇》

引言:在图像处理领域,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哈哈~)

欢迎和小伙伴梦一起学习,共同努力,加油!!!


版权声明:本文为m0_56654441原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。