1个K均值算法

实际上,K-means算法是一种非常简单的算法,与算法思想或特定实现无关. 通过以一定方式测量样本之间的相似度,并迭代更新聚类中心,它属于无监督分类. 当聚类中心不再移动或移动差异小于阈值时,将样本分为不同的类别.

1.1算法思想

随机选择群集中心. 根据当前聚类中心,使用选择的测量方法对所有样本点进行分类,以计算每个类别的样本点的平均值,作为下一次迭代的聚类中心. 当类中心和当前聚类中心之间的距离(例如4中的距离)小于给定的迭代阈值时,迭代结束. 否则,请继续下一次迭代,直到2

1.2测量方法

根据聚类中心,所有采样点均分为最相似的类别. 这需要有效的巩固,并且平方差是最常用的度量,方法如下

2应用于图像分割

我们知道,无论是灰度图像还是RGB彩像,它实际上都是具有灰度值的矩阵. 因此聚类 图像分割,图像数据格式确定图像分割的方向. K-means聚类算法非常简单,非常具体.

2.1代码

导入必要的软件包

import numpy as np

import random

损失函数

def loss_function(present_center, pre_center):

'''

损失函数,计算上一次与当前聚类中的差异(像素差的平方和)

:param present_center: 当前聚类中心

:param pre_center: 上一次聚类中心

:return: 损失值

'''

present_center = np.array(present_center)

pre_center = np.array(pre_center)

return np.sum((present_center - pre_center)**2)

分类器

def classifer(intput_signal, center):

'''

分类器(通过当前的聚类中心,给输入图像分类)

:param intput_signal: 输入图像

:param center: 聚类中心

:return: 标签矩阵

'''

input_row, input_col= intput_signal.shape # 输入图像的尺寸

pixls_labels = np.zeros((input_row, input_col)) # 储存所有像素标签

pixl_distance_t = [] # 单个元素与所有聚类中心的距离,临时用

for i in range(input_row):

for j in range(input_col):

# 计算每个像素与所有聚类中心的差平方

for k in range(len(center)):

distance_t = np.sum(abs((intput_signal[i, j]).astype(int) - center[k].astype(int))**2)

pixl_distance_t.append(distance_t)

# 差异最小则为该类

pixls_labels[i, j] = int(pixl_distance_t.index(min(pixl_distance_t)))

# 清空该list,为下一个像素点做准备

pixl_distance_t = []

return pixls_labels

基于k均值算法的图像分割

def k_means(input_signal, center_num, threshold):

'''

基于k-means算法的图像分割(适用于灰度图)

:param input_signal: 输入图像

:param center_num: 聚类中心数目

:param threshold: 迭代阈值

:return:

'''

input_signal_cp = np.copy(input_signal) # 输入信号的副本

input_row, input_col = input_signal_cp.shape # 输入图像的尺寸

pixls_labels = np.zeros((input_row, input_col)) # 储存所有像素标签

# 随机初始聚类中心行标与列标

initial_center_row_num = [i for i in range(input_row)]

random.shuffle(initial_center_row_num)

initial_center_row_num = initial_center_row_num[:center_num]

initial_center_col_num = [i for i in range(input_col)]

random.shuffle(initial_center_col_num)

initial_center_col_num = initial_center_col_num[:center_num]

# 当前的聚类中心

present_center = []

for i in range(center_num):

present_center.append(input_signal_cp[initial_center_row_num[i], initial_center_row_num[i]])

pixls_labels = classifer(input_signal_cp, present_center)

num = 0 # 用于记录迭代次数

while True:

pre_centet = present_center.copy() # 储存前一次的聚类中心

# 计算当前聚类中心

for n in range(center_num):

temp = np.where(pixls_labels == n)

present_center[n] = sum(input_signal_cp[temp].astype(int)) / len(input_signal_cp[temp])

# 根据当前聚类中心分类

pixls_labels = classifer(input_signal_cp, present_center)

# 计算上一次聚类中心与当前聚类中心的差异

loss = loss_function(present_center, pre_centet)

num = num + 1

print("Step:"+ str(num) + " Loss:" + str(loss))

# 当损失小于迭代阈值时,结束迭代

if loss <= threshold:

break

return pixls_labels

3分类效果

聚类中心数= 3,迭代阈值= 1 = 1

聚类中心数= 3,迭代阈值= 1 = 1

4个GitHub

点击我

以上是本文的全部内容聚类 图像分割,希望对大家的学习有所帮助,并希望您支持脚本编写室.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-184687-1.html

python图像分割_基于K均值聚类算法的Python图像分割相关推荐

  1. python计算iris数据集的均值_模糊C均值聚类算法及python实现

    目录 本文采用数据集为iris,将iris.txt放在程序的同一文件夹下.请先自行下载好. 模糊理论 模糊控制是自动化控制领域的一项经典方法.其原理则是模糊数学.模糊逻辑.1965,L. A. Zad ...

  2. kmeans聚类图matlab,基于 K 均值聚类的图像分割

    将图像读入工作区.减小图像大小以使示例运行得更快. RGB = imread('kobi.png'); RGB = imresize(RGB,0.5); imshow(RGB) 使用 k 均值聚类将图 ...

  3. k均值聚类算法python_K均值和其他聚类算法:Python快速入门

    k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...

  4. python(scikit-learn)实现k均值聚类算法

    k均值聚类算法原理详解 示例为链接中的例题 直接调用python机器学习的库scikit-learn中k均值算法的相关方法 from sklearn.cluster import KMeans imp ...

  5. Python金融数据挖掘 第11章 复习思考题1 (聚类)给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,用K均值聚类算法来训练模型,分4类。

    1.题目 给出一个数据集data_multivar.txt,里面有200个点坐标,在平面坐标系下可以画出它的散点图,如图11-12所示. data_multivar.txt 图11-12 数据集 da ...

  6. Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索、模型初探

    Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索.模型初探 1 前言 分类和回归是强大易学的机器学习技术.需要注意的是:为了对新的样本预测未知的值, 必须从大量已知目标值的样 ...

  7. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真

    一. 实验目的 1.掌握K均值聚类算法的原理和实现过程: 2.掌握K均值聚类算法的应用方法. 二. 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图).步 ...

  8. python机器学习库sklearn——k均值聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 k均值聚类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/de ...

  9. 基于K均值聚类的葡萄酒品种判别

    特别注意:主要思路.程序和分析过程来源于:https://www.kaggle.com/xvivancos/tutorial-clustering-wines-with-k-means.本文在此基础上 ...

最新文章

  1. 基于matlab的退化图像复原(二)------逆滤波复原
  2. 用树莓派的方式打开小米手机:摇晃手机控制小车,前进后退加转弯,成本不到350元 | 开源...
  3. linux服务 ssh
  4. android init(system/core/init/init.c)分析
  5. 【Java线程】线程协作
  6. Java并发编程,3分分钟深入分析volatile的实现原理
  7. 狭义上讲侠义计算机安全,狭义的会计电算化是什么
  8. 1!+2!+3!+…+10!的和
  9. Java : Hibernate 动态+分页+自定义字段+自定义实体类查询
  10. python怎么安装pip
  11. cocos2d-X   CCSprite设置贴图(图片)大小
  12. 八.nginx网站服务实践应用
  13. ADOMDConnection连接字符串与AnalysisService服务器配置
  14. 极客书的编程教程合集
  15. 怎么用云便签实现家里的电脑和办公室电脑的数据共享?
  16. windows双系统--WSL 安装使用
  17. VB 对数据库access的模糊查询代码
  18. SQL2005导入数据至2000的问题
  19. Linux树莓派开发——刷机
  20. debug疯了_《尼尔机械纪元》调试房间Debug模式开启及设置教程 Debug模式怎么进...

热门文章

  1. 学生写字台灯用什么牌子的好?高品质学生台灯品牌推荐
  2. 《月亮与六便士》阅读笔记
  3. 爬虫 Python编程入门
  4. 11fdsf-02dsf
  5. 浅谈后端接口统一及原理
  6. 苏宁的张力与张近东的定力
  7. web前端之JavaScript的插件下载指令及介绍、npm、install、save、require
  8. ubuntu 使用阿里云镜像源快速搭建kubernetes 1.15.2集群
  9. Exception RunTimeException
  10. 图解常用的RAID 0, RAID 1, RAID 5, RAID 10