Kmeans python 可视化
来源:互联网 发布:项目经理考试软件app 编辑:程序博客网 时间:2024/06/07 13:05
就是用PLT,
上一篇中主要写了kmeans图像分割的算法主体
这里对他做可视化
可视化两个函数,
第一个是visualize,遍历一遍不同的K值的图像,每个暂停0.01s,嘿嘿嘿可以做动画
第二个是交互式的inter_vis 写了两个按钮,+K和-K。
然后为了方便命令行使用又加了parser解析
啊,就是这样
嗯就是这样,UI果然好麻烦。以后还是少写,感觉代码风格都变丑了
from scipy.misc import imread,imshow,imsaveimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.widgets import Buttonfrom functools import partialfrom optparse import OptionParserdef kmeans(img,K,epsilon): img = img.astype(np.float64) randpos = partial(np.random.randint,0,min(img.shape[0],img.shape[1])) cx,cy = [randpos(K) for i in range(2)] center = img[cx,cy] img = img.reshape(1, img.shape[0], img.shape[1], -1) center = center.reshape(K, 1, 1, 3) # ite = 0 diff = np.inf pre_center = np.sum(center) while(diff>epsilon): dis = (img - center) ** 2 pos_label = np.sum(dis, axis=3).argmin(axis=0) for i in range(K): center[i] = np.mean(img[0,pos_label == i],axis=0) diff = np.abs(np.sum(center)-pre_center) pre_center = np.sum(center) # ite+=1 # print(ite,diff) for i in range(K): img[0,pos_label == i] = center[i] return np.squeeze(img).astype(np.float16)I = 10def inter_vis(img): def draw_button(): global button_sub, button_plus point_sub = plt.axes([0.3, 0.03, 0.1, 0.03]) point_plus = plt.axes([0.6, 0.03, 0.1, 0.03]) button_sub = Button(point_sub, "-") button_sub.on_clicked(on_press_sub) button_plus = Button(point_plus, "+") button_plus.on_clicked(on_press_plus) def on_press_plus(event): if event.inaxes == None: print("none") return global I I = I + 1 fig = event.inaxes.figure ax1 = fig.add_subplot(111) nimg = kmeans(img, I, 1e-4) nimg = nimg.astype(np.uint8) plt.title("K = " + str(I)) ax1.imshow(nimg) plt.axis("off") fig.canvas.draw() def on_press_sub(event): if event.inaxes == None: print("none") return global I if(I==2): print("at least 2 center!") return I = I - 1 fig = event.inaxes.figure ax1 = fig.add_subplot(111) nimg = kmeans(img, I, 1e-4) nimg = nimg.astype(np.uint8) plt.title("K = " + str(I)) ax1.imshow(nimg) plt.axis("off") fig.canvas.draw() plt.ioff() fig = plt.figure() draw_button() ax1 = fig.add_subplot(111) nimg = kmeans(img, I, 1e-4) nimg = nimg.astype(np.uint8) plt.title("K = " + str(I)) ax1.imshow(nimg) plt.axis("off") plt.show()def visualize(img,start=2,end=100): plt.ion() plt.axis("off") for i in range(start,end): nimg = kmeans(img, i, 1e-4) nimg = nimg.astype(np.uint8) plt.title("K = " + str(i)) plt.imshow(nimg) plt.pause(0.01)if __name__ == '__main__': parser = OptionParser() parser.add_option("-v", "--visualize", action="store_true", dest="visualize", default=False, help="visualize kmeans automatically from 2 to 100") parser.add_option("-i", "--interactive", action="store_true", dest="interactive", default=False, help="use interactive mode to change K") img = np.floor(imread("/home/ryan/Desktop/cat.jpg")) (options, args) = parser.parse_args() if options.visualize == True: visualize(img) if options.interactive == True: inter_vis(img) if (options.visualize == False) and (options.interactive == False): visualize(img)
0 0
- Kmeans python 可视化
- Python Kmeans
- python-kmeans
- KMeans聚类算法思想与可视化
- Kmeans聚类过程的动态可视化
- KMeans聚类算法思想与可视化
- kmeans python实现
- Kmeans聚类Python程序
- python kmeans算法
- python 实现 Kmeans
- kmeans 算法,python
- python KMeans算法学习
- Kmeans python 实现
- kmeans++ Python 实现
- Python-kmeans算法实践
- Python KMeans聚类分析
- python-opencv-kmeans聚类
- python kmeans实战
- 数据结构——二叉树定义
- NIO 框架Netty4.x 整体流程和使用
- git 基本命令
- BZOJ 4403: 序列统计 Lucas
- 8天学通MongoDB——第二天 细说增删查改
- Kmeans python 可视化
- thinkphp怎样获取控制器名称和操作名称(不是在模板里面获取)
- *指针_函数指针、指针控制数组、链表(结构体指针)
- leetcode-329. Longest Increasing Path in a Matrix
- 基于SpringBoot的微服务与“头文件”
- tomcat 远程调试配置
- MySql 外键
- highcharts绘制饼图html页面源码
- 解决easyUI跨域问题