ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调

简介: ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调

输出结果

image.png

实现代码

#!/usr/bin/python

# coding:utf-8

from PIL import Image, ImageDraw  

from HierarchicalClustering import hcluster  

from HierarchicalClustering import getheight

from HierarchicalClustering import getdepth

import numpy as np

import os

def drawdendrogram(clust, imlist, jpeg= 'clusters.jpg'):

   h = getheight(clust)*20      

   w = 1200

   depth = getdepth(clust)    

   scaling = float(w - 150)/depth

 

   img = Image.new('RGB', (w, h), (255, 255, 255))

   draw = ImageDraw.Draw(img)                      

   draw.line((0, h/2, 10, h/2), fill=(255, 0, 0))  

   drawnode(draw, clust, 10, int(h/2), scaling, imlist, img)  

   img.save(jpeg)    

def drawnode(draw,clust,x,y,scaling,imlist,img):     if clust.id < 0:

       h1 = getheight(clust.left)*20

       h2 = getheight(clust.right)*20

       top = y - (h1 + h2)/2

       bottom = y + (h1 + h2)/2

       ll = clust.distance * scaling

       draw.line((x, top + h1/2, x, bottom - h2/2), fill=(255, 0, 0))

       draw.line((x, top + h1/2, x + ll, top + h1/2), fill=(255, 0, 0))

       draw.line((x, bottom - h2/2, x + ll, bottom - h2/2), fill=(255, 0, 0))

       drawnode(draw, clust.left, x + ll, top + h1/2, scaling, imlist, img)

       drawnode(draw, clust.right, x + ll, bottom - h2/2, scaling, imlist, img)

   else:

       nodeim = Image.open(imlist[clust.id])

       nodeim.thumbnail((20, 20))  

       ns = nodeim.size

       print (x,y - ns[1]//2)

       print (x + ns[0])

       print (img.paste(nodeim, (int(x), int(y - ns[1]//2), int(x + ns[0]),int(y + ns[1] - ns[1]//2))))

imlist=[]

folderpath = r'F:\File_Python\Crawler'        

for filename in os.listdir(folderpath):

   if os.path.splitext(filename)[1]=='.jpg':

       imlist.append(os.path.join(folderpath,filename))

n=len(imlist)  

print(n)

features =np.zeros((n,3))  

for i in range(n):        

   im=np.array(Image.open(imlist[i]))

   R = np.mean(im[:,:,0].flatten())    

   G = np.mean(im[:,:,1].flatten())

   B = np.mean(im[:,:,2].flatten())

   features[i]=np.array([R,G,B])

 

tree = hcluster(features)  

drawdendrogram(tree, imlist, jpeg=r'C:\Users\99386\Desktop\result.jpg')  #


相关文章
|
8月前
|
算法 数据可视化 数据挖掘
使用Python实现层次聚类算法
使用Python实现层次聚类算法
123 1
|
8月前
|
算法 Shell
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
通信系统中ZF,ML,MRC以及MMSE四种信号检测算法误码率matlab对比仿真
|
8月前
|
算法 数据挖掘 Python
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
606 0
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】层次聚类AGNES、二分K-Means算法的讲解及实战演示(图文解释 附源码)
【Python机器学习】层次聚类AGNES、二分K-Means算法的讲解及实战演示(图文解释 附源码)
245 0
|
3月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
161 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
161 0
|
6月前
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
|
8月前
|
机器学习/深度学习 算法 数据可视化
【机器学习】比较分层聚类(Hierarchical Clustering)和K-means聚类算法
【5月更文挑战第12天】【机器学习】比较分层聚类(Hierarchical Clustering)和K-means聚类算法
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】层次聚类算法的原理与应用
【4月更文挑战第30天】层次聚类是数据挖掘中的聚类技术,无需预设簇数量,能生成数据的层次结构。分为凝聚(自下而上)和分裂(自上而下)两类,常用凝聚层次聚类有最短/最长距离、群集平均和Ward方法。优点是自动确定簇数、提供层次结构,适合小到中型数据集;缺点是计算成本高、过程不可逆且对异常值敏感。在Python中可使用`scipy.cluster.hierarchy`进行实现。尽管有局限,层次聚类仍是各领域强大的分析工具。
378 3
|
8月前
|
机器学习/深度学习 数据采集 SQL
R语言K-Means(K均值聚类)和层次聚类算法对微博用户特征数据研究
R语言K-Means(K均值聚类)和层次聚类算法对微博用户特征数据研究

热门文章

最新文章