梯度直方图(HOG)用于图像多分类和图像推荐(上)

简介: 梯度直方图(HOG)用于图像多分类和图像推荐

介绍

机器学习的神奇之处在于,我们对原理的概念和思路理解得越多,它就变得越容易。在本文中,我们将研究在图像分类和图像推荐中使用定向梯度直方图的方法。

数据集

640.png

来源:Kaggle Fashion图像分类数据集(Small)

https://www.kaggle.com/paramaggarwal/fashion-product-images-small

数据集有主类别、子类别、性别、季节和每个图像的标签。目的是将数据集用于图像分类和推荐。让我们先看看数据分布!

640.png

每个列的惟一值。对于每个性别,masterCategory、subCategory、gender、usage和season列使用KNN分类器进行图像分类,然后使用K个最近邻数据进行图像推荐

这个设计的目标是提出一个解决方案,将所有的类别分为不同的类(类是在下面的图表中提到的分布)。然后构建推荐引擎,根据用户选择的测试图像,给出最匹配的n幅图像。

640.png

640.png

640.png


640.png

每列下不同类的数据(只显示前10个)

分类和推荐是建立在一种局部特征提取和描述方法上的,即定向梯度直方图(Histogram of Oriented Gradients, HOG)。使用不同的特征检测器(例如:SIFT, Shi-Thomas, ORB, FAST等),我们可以定位特征,并在多幅图像之间匹配提取的特征。但是为了使用这些信息来训练一个模型,我们需要提取一维向量形式的特征(如[x1,x2,..,xn])。HOG(“Histogram of Oriented Gradients for Human Detection\”——Dalal & Triggs, 2005)的想法就是基于同样的原理。下面让我们看看HOG是如何工作的,以及如何在Python中配置它。

注意:HOG最初是由Dalal & Triggs(2005)发明的,他们使用特定的参数来获得最佳的人体检测性能。但是,这些参数不是通用的,并且根据图像类型的不同而变化。

计算HOG的步骤:

HOG是一种将图像转换为梯度直方图,然后使用直方图制作用于训练模型的一维矩阵的技术。

在我们计算之前,让我们先导入相关库!

importosimportnumpyasnpimportpandasaspdimportcv2ascvfrompathlibimportPathimportwarningsfromskimage.featureimporthogimporttqdmfromsklearn.neighborsimportKNeighborsClassifierfromsklearnimportmetricsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportMinMaxScalerfromsklearn.neighborsimportNearestNeighborswarnings.filterwarnings("ignore")
pd.options.display.max_columns=None

然后读取图片

all_images= []
#labels= []defload_image(ids,path=image_folder):
img=cv.imread(image_folder+ids+'.jpg',cv.IMREAD_GRAYSCALE) #loadatgrayscale#img=cv.cvtColor(img, cv.COLOR_BGR2GRAY) #converttograyscalereturnimg,ids#20ksamplesweretakenformodelingforidsintqdm(list(styles.id)[:20000]):
img,ids=load_image(str(ids))
ifimgisnotNone:
all_images.append([img,int(ids)])
#labels.append(ids)
len(all_images)

现在让我们考虑下面的图像,

640.png

让我们假设红色的方框用8x8矩阵表示,每个单元格中都有数字。在进行图像特征工程之前,建议做以下几件事:

  1. Resize:将所有图像调整为统一形状,以避免任何与计算相关的隐患。在本例中,所有图像的形状统一(60x80)。如果您想执行调整大小操作,请参阅以下内容:
defresize_image(img,ids):
returncv.resize(img, (60, 80),interpolation=cv.INTER_LINEAR)
all_images_resized= [[resize_image(x,y),y] forx,yinall_images]
len(all_images_resized)
目录
相关文章
|
7月前
|
算法 计算机视觉
图像处理之积分图应用四(基于局部均值的图像二值化算法)
图像处理之积分图应用四(基于局部均值的图像二值化算法)
561 0
|
7月前
|
算法 C语言 计算机视觉
图像处理之图像快速插值放缩算法
图像处理之图像快速插值放缩算法
41 0
|
8月前
|
编解码 Android开发 计算机视觉
多分辨率找图sift和直方图
牙叔教程 简单易懂
269 0
|
机器学习/深度学习 算法 数据可视化
基于线性SVM的CIFAR-10图像集分类
基于线性SVM的CIFAR-10图像集分类
770 0
基于线性SVM的CIFAR-10图像集分类
|
编解码 算法 Java
基于Gabor-小波滤波深度图表面法线的特征提取算法【通过正常Gabor-小波的直方图进行2D或3D特征提取】研究(Matlab代码实现)
基于Gabor-小波滤波深度图表面法线的特征提取算法【通过正常Gabor-小波的直方图进行2D或3D特征提取】研究(Matlab代码实现)
118 0
|
机器学习/深度学习 传感器 算法
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
【图像分割】基于局部空间信息直方图模糊聚类FGFCM 实现图像图像分割附matlab代码
|
机器学习/深度学习 传感器 算法
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
|
资源调度 算法 机器人
图像特征提取与描述_角点特征02:SIFT算法+SURF算法
前面两节我们介绍了Harris和Shi-Tomasi角点检测算法,这两种算法具有旋转不变性,但不具有尺度不变性,以下图为例,在左侧小图中可以检测到角点,但是图像被放大后,在使用同样的窗口,就检测不到角点了。
228 0
|
机器学习/深度学习 算法 数据可视化
梯度直方图(HOG)用于图像多分类和图像推荐(下)
梯度直方图(HOG)用于图像多分类和图像推荐
171 0
梯度直方图(HOG)用于图像多分类和图像推荐(下)