【python3】实现HOG(histogram oriented gradient)并且将结果转换成可视化图像展示

实现HOG(histogram oriented gradient)并且将结果转换成可视化图像展示

  1. 本博客采用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)
        ####change to hog
        image = color.rgb2gray(img)
        fd, hog_image = hog(image, orientations=8, pixels_per_cell=(16, 16),cells_per_block=(1, 1), visualise=True)
        # Rescale histogram for better display
        hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
        #hog_image_rescaled = np.repeat(hog_image_rescaled[:,:,np.newaxis], 3, axis=2)
        final_img = image * hog_image_rescaled
        print(type(hog_image_rescaled))
        cv2.imshow('final_img',final_img)
        cv2.waitKey(0)
        #cv2.imwrite('/tool/HOGCNN/xixi'+"/"+filename,h)       

read_path("/tool/HOGCNN/xixi")
#print(os.getcwd())

  1. 结果如下:(原图是一个火车)
    在这里插入图片描述在这里插入图片描述
关于HOG和CNN同样作为特征提取,能否混合使用的思考(HOG-CNN、CNN-HOG、或者二者并行使用)
  1. 想通过opencv实现HOG之后,同时将最后的特征图可视化出来,发现opencv不提供该方法,遂通过scikit-image来使用HOG方法,以及其中自带的可视化;
  2. 考虑能否将HOG先处理再利用CNN的做法不合理,HOG特征提取能力有限,在这个过程中可能损失掉了图像的大多数信息,导致后续的CNN不能充分利用图像信息(等于将CNN的特征提取能力封印了),因此只需要采用HOG+SVM或者CNN+SVM的手段,并不需要将HOG和CNN 并行利用起来;

猜你喜欢

转载自blog.csdn.net/qq_43348528/article/details/108638030
今日推荐