1.前言
这篇文章是基于k-means算法进行图片聚类,而不是对单个图片的像素聚类,分别基于RGB、HSV和HOG特征进行聚类分析。
2.图片特征提取——RGB
RGB为图片最基本的特征,但很多时候RGB颜色空间并不能很好的作为图片聚类的聚簇依据,通常不符合人们对颜色相似性的主观判断,我尝试了用RGB进行聚类,但是效果并没有其他两种好。 其实现代码如下:def get_rgb_hist_feature(image_name):hist_feature = []img = cv2.imread(image_name)color = ('b', 'g', 'r')for index, value in enumerate(color):hist = cv2.calcHist([img], [index], None, [256], [0, 256])cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)hist_feature.append(hist)return list(np.array(hist_feature).ravel())
分别提取RGB颜色空间,最终返回列表。
3.图片特征提取——HSV
hsv能够简单的描述一张图片颜色的全局分布,适用于那些难以自动分割、不需要考虑物体空间位置的图像。hsv的三个分量分别为:色彩(Hue)、饱和度(Saturation)、值(Value)。 其代码实现如下:def get_hsv_hist_feature(image_name):hist_feature = []img = cv2.imread(image_name)img = cv2.resize(img, (256, 256))hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)hist_h = cv2.calcHist([hsv], [0], None, [180], [0, 180])hist_h = cv2.normalize(hist_h, hist_h)hist_feature[0:180] = hist_h[:,0]hist_s = cv2.calcHist([hsv], [1], None, [256], [0, 256])hist_s = cv2.normalize(hist_s, hist_s)hist_feature[180:436] = hist_s[:,0]hist_v = cv2.calcHist([hsv], [2], None, [256], [0, 256])hist_v = cv2.normalize(hist_v,hist_v)hist_feature[436:692] = hist_v[:,0]return list(np.array(hist_feature).ravel())
在hsv特征中,每个分量都有自己的取值范围,在提取特征时需要注意列表长度。
4.图片特征提取——HOG特征
HOG特征检测算法实现的几个步骤:颜色空间归一化、梯度计算、梯度方向直方图、重叠块直方图归一化、HOG特征。 其实现代码如下:def get_hog_feature(image_name):img = cv2.imread(image_name)img = cv2.resize(img, (256, 256))gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hog_feature = feature.hog(gray_image, orientations=8, pixels_per_cell=(16, 16),cells_per_block=(1, 1))return list(hog_feature.ravel())
如果觉得《图片聚类——k-means算法的python实现》对你有帮助,请点赞、收藏,并留下你的观点哦!