失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图片聚类——k-means算法的python实现

图片聚类——k-means算法的python实现

时间:2022-09-01 09:49:04

相关推荐

图片聚类——k-means算法的python实现

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实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。