一、聚类:物以类聚
数组可以进行聚类,并找到数组的聚类中心。使用的第三方库是scipy,需要pip install scipy,先安装该库。数组聚类代码:
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten
import matplotlib.pyplot as plt
fe = np.array([[1.9,2.0],
[1.7,2.5],
[1.6,3.1],
[0.1,0.1],
[0.8,0.3],
[0.4,0.3],
[0.22,0.1],
[0.4, 0.3],
[0.4,0.5],
[1.8,1.9]])
book = np.array((fe[0], fe[1]))
print(type(book))
print("book:\n",book)
codebook, distortion = kmeans(fe,book)
print("codebook:",codebook)
print("distortion:",distortion)
plt.scatter(fe[:,0],fe[:,1],c="g")
plt.scatter(codebook[:,0],codebook[:,1],c="r")
plt.show()#红色的为聚类中心
运行结果:
二、色彩聚类提取
图像颜色是由不同的RGB数值组成的,因此除了数字,图像色彩同样可以进行聚类。并利用之前学过的Pycharm flask框架,将结果加载到网页中显示。
思路是先生成图像缩略图,对缩略图聚类,得到每个点的RGB值,再利用算法将色彩聚类,并得到聚类中心。色彩聚类最常使用的算法是Kmeans。
K均值聚类算法:一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
Python部分代码:
from flask import Flask,render_template
import numpy as np
from PIL import Image
from scipy.cluster.vq import vq, kmeans, whiten
import imageColor
app = Flask(__name__)
#用缩略图聚类
def colorz(filename, n=3):
img=Image.open(filename)
img=img.rotate(-90)
img.thumbnail((200,200))
w,h=img.size
print(w,h)
print('w*h=',w*h)
points=[]
for count,color in img.getcolors(w*h):
points.append(color)
return points
#对色彩聚类
def kmeansColor(img,n):
points=colorz(img,3)
fe = np.array(points,dtype=float)
codebook, distortion = kmeans(fe,n)
centers=np.array(codebook,dtype=int)
return centers
@app.route("/")
def index():
#genFrame()
pic = "static/fall.png"
imgcolors = imageColor.kmeansColor("static/fall.png",5)
return render_template("imageColor.html", pic1=pic, imgcolors=imgcolors)
if "__main__" == __name__ :
app.run()
html部分代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>聚类色彩提取</title>
</head>
<body>
聚类色彩提取<br>
<img height="400" src='static/fall.png'>
<br>
{{imgcolors}}<br>
{% for c in imgcolors %}
<font style="color:rgb({{c[0]}},{{c[1]}},{{c[2]}})">色彩提取</font>
{% endfor %}
</body>
</html>
运行结果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)