IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python学习 | 2021-11-05 Scipy聚类色彩提取 -> 正文阅读

[人工智能]Python学习 | 2021-11-05 Scipy聚类色彩提取

目录

一、聚类分析

1、聚类

2、Scipy中的聚类算法(K-Means)

3、聚类示例

?完整代码:

运行结果:

函数使用:

二、图像色彩聚类

操作步骤:

完整代码:

运行结果:

三、合并至Flask软件

部分代码:

运行结果:


一、聚类分析

1、聚类

聚类是把相似数据并成一组(group)的方法。不需要类别标注,直接从数据中学习模式。

2、Scipy中的聚类算法(K-Means)

  1. ? 随机选取K个数据点作为“种子”
  2. ? 根据数据点与“种子”的距离大小进行类分配
  3. ? 更新类中心点的位置,以新的类中心点作为“种子”
  4. ? 按照新的“种子”对数据归属的类进行重新分配
  5. ? 更新类中心点(-->3-->4),不断迭代,直到类中心点变得很小

3、聚类示例

?完整代码:

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]))    #N维数组对象
print("book: \n",book)
codebook, distortion = kmeans(fe, book)
print("codebook: \n", codebook)
print("distortion: ", distortion)    

plt.scatter(fe[:,0], fe[:,1], c='g')    #展示聚类子集内的样本点
plt.scatter(codebook[:, 0], codebook[:, 1], c='r')    #展示各聚类子集的中心
plt.show()

运行结果:

(红点为聚类中心/质心)?

函数使用:

kmeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, ?copy_x=True, n_jobs=None, algorithm='auto')

n_clusters? ? ? ? k值,生成的聚类数,即产生的质心(centroids)数

max_iter????????最大迭代次数(如果数据集不是凸集,可能很难收敛,可以通过指定最大的迭代次数让算法可以及时退出循环)

n_init????????使用不同的初始化质心运行算法的次数(k值较大时,可以适当增大这个值)


二、图像色彩聚类

操作步骤:

  1. 用resize或者thumbnail生成缩略图




  2. getcolors()返回图像的色彩和频次
  3. 聚类分析并生成示意图

完整代码:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten

im=np.array(Image.open('hm.jpg'))
 
def colorz(filename):
    img=Image.open(filename)
    img.thumbnail((200,200))    #thumbnail后的图片保持原有长宽比例,resize后的图片为设置的比例
    w,h=img.size
    print(w,h)
    print('w*h=',w*h)
    plt.axis('off')
    plt.imshow(img)
    plt.show()
    points=[]
    for count,color in img.getcolors(w*h):  
        points.append(color)
    return points

points=colorz('hm.jpg')
fe = np.array(points,dtype=float)   #聚类需要Float或者Double
book =np.array((fe[100],fe[1],fe[8],fe[8]))   #聚类中心,初始值
print("book: \n",book)
codebook, distortion = kmeans(fe,7)   #7是聚类中心个数
print("codebook:\n", codebook)   #聚类中心
centers=np.array(codebook,dtype=int)  #变为色彩,需要转为整数
print("distortion: ", distortion)

plt.scatter(fe[:,0], fe[:,2], c='b')
plt.scatter(codebook[:, 0], codebook[:,2], c='r')   
plt.show()

运行结果:

(七个聚类中心)


三、合并至Flask软件

部分代码:

from flask import Flask,render_template,request
import imageColor
import numpy as np
from PIL import Image
from scipy.cluster.vq import vq, kmeans, whiten
import os

app=Flask(__name__)

def colorz(filename,n=3):
    img=Image.open(filename)
    img=img.rotate(-90)
    img.thumbnail((200,200))
    w,h=img.size
    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():
    picname=request.args.get("picname", type=str)
    if not picname:
        picname='static/hash/image0.jpg'
    pic='static/hash/image'
    imgcolors = imageColor.kmeansColor(picname, 5)
    path = 'static/hash'
    filename = os.listdir(path)
    framecount = len(filename)
    filename.sort(key=lambda x: int(x[5:-4]))
    return render_template('index.html',pic1=pic,imgcolors=imgcolors,filename=filename,framecount=framecount)

if "__main__"==__name__:
    app.run(port="5008")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask分镜</title>
</head>
<body style="background-color:#74759b">
视频分镜
<br>
<video width="640" height="480" controls autoplay>
  <source src="static/ghz.mp4" type="video/mp4">
  <object data="static/ghz.mp4" width="640" height="480">
    <embed width="640" height="480" src="static/ghz.mp4">
  </object>
</video>
<br>
哈希分镜帧数:{{framecount}}<br>
{{imgcolors}}<br>
{% for c in imgcolors %}
<font style="color:rgb({{c[0]}},{{c[1]}},{{c[2]}})">图像色彩</font>
{% endfor %}
<br>
{% for i in range(framecount) %}
<a href="/?picname=static/hash/{{filename[i]}}"><img height="40" src="static/hash/{{filename[i]}}" /></a>
{{filename[i]}}
{% endfor %}
</body>
</html>

运行结果:

(点击分镜头图像,即可显示对应的聚类图像色彩)?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:35:32  更:2021-11-12 19:38:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:30:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码