实现HOG(histogram oriented gradient)并且将结果转换成可视化图像展示
- 本博客采用skimage,因为如果直接采用opencv中的
HOGDescriptor()
,并不具备将HOG处理后的梯度直方图再结合原图像显示功能,因此使用skimage,代码如下:
import cv2
import os
import numpy as np
from skimage import exposure
from skimage.feature import hog
from skimage import data, color, exposure
def read_path(file_pathname):
for filename in os.listdir(file_pathname):
print(filename)
img = cv2.imread(file_pathname+'/'+filename)
image = color.rgb2gray(img)
fd, hog_image = hog(image, orientations=8, pixels_per_cell=(16, 16),cells_per_block=(1, 1), visualise=True)
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
final_img = image * hog_image_rescaled
print(type(hog_image_rescaled))
cv2.imshow('final_img',final_img)
cv2.waitKey(0)
read_path("/tool/HOGCNN/xixi")
- 结果如下:(原图是一个火车)
关于HOG和CNN同样作为特征提取,能否混合使用的思考(HOG-CNN、CNN-HOG、或者二者并行使用)
- 想通过opencv实现HOG之后,同时将最后的特征图可视化出来,发现opencv不提供该方法,遂通过
scikit-image
来使用HOG方法,以及其中自带的可视化;
- 考虑能否将HOG先处理再利用CNN的做法不合理,HOG特征提取能力有限,在这个过程中可能损失掉了图像的大多数信息,导致后续的CNN不能充分利用图像信息(等于将CNN的特征提取能力封印了),因此只需要采用HOG+SVM或者CNN+SVM的手段,并不需要将HOG和CNN 并行利用起来;