算法源于西瓜书309页介绍的约束种子k均值算法

1.事先标注好一部分数据:

绿色部分是前景 对应的rgb是[0,255,0]

蓝色部分是背景 rgb[0,0,255]

2.

根据标注好的数据,遍历原始图片中的每一个像素点

计算该像素点与前景、背景的距离

与前景距离小就并入前景,否则并入背景

循环往复,直至前景,背景不再变化

代码:

import matplotlib.image as mpimg
import numpy as np
from PIL import Imageim = mpimg.imread('D:\\pythonProject\\data\\selectedimages\\monkey.bmp')
im2 = mpimg.imread('D:\\pythonProject\\data\\selectedimages\\monkey_marker.bmp')
im = np.array(im)
im2 = np.array(im2)
dst = np.zeros((im2.shape[0], im2.shape[1], 3))
S_f = []
S_b = []def init_S():for i in range(im2.shape[0]):for j in range(im2.shape[1]):if (im2[i][j] == [0, 255, 0]).all():S_f.append([i, j])if (im2[i][j] == [0, 0, 255]).all():S_b.append([i, j])def count_ave_color_f():R_a = 0G_a = 0B_a = 0for k in S_f:R_a += im[k[0]][k[1]][0]G_a += im[k[0]][k[1]][1]B_a += im[k[0]][k[1]][2]ave_color_f = np.array([int(R_a / len(S_f)), int(G_a / len(S_f)), int(B_a / len(S_f))])return ave_color_fdef count_ave_color_b():R_b = 0G_b = 0B_b = 0for k in S_b:R_b += im[k[0]][k[1]][0]G_b += im[k[0]][k[1]][1]B_b += im[k[0]][k[1]][2]ave_color_b = np.array([int(R_b / len(S_b)), int(G_b / len(S_b)), int(B_b / len(S_b))])return ave_color_bT = 0
init_S()
count = []
num = 0
while T < 10:T += 1a_c_f = count_ave_color_f()a_c_b = count_ave_color_b()count.append([a_c_f, a_c_b])if T >= 2:x = count.pop(0)if (x[0] == a_c_f).any() and (x[1] == a_c_b).any():print('均值向量不再变化')breakS_f = []S_b = []for i in range(im2.shape[0]):for j in range(im2.shape[1]):d_f = np.sqrt(sum(np.power((a_c_f - im[i][j]), 2)))d_b = np.sqrt(sum(np.power((a_c_b - im[i][j]), 2)))if d_f < d_b:S_f.append([i, j])else:S_b.append([i, j])print('前景像素:', len(S_f), '\t', '背景像素:', len(S_b))print('第%d轮迭代结束,' % T, '前景的均值为:', a_c_f, '背景的均值为:', a_c_b)##画图
for i in S_f:dst[i[0], i[1]] = [255, 255, 255]  ###将前景转为白色
for j in S_b:dst[j[0], j[1]] = [0, 0, 0]  ###将背景转为黑色img2 = Image.fromarray(np.uint8(dst))
img2.show(img2)
img2.save("output.png", "png")

运行结果:

这个聚类方法只能处理特定的图像,也就是前景背景均值向量差距较大的图片,实际运用效果不怎么样,但是练练手还可以。

k均值聚类 图像分割实战 python相关推荐

  1. VTK:K均值聚类用法实战

    VTK:K均值聚类用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkDoubleArray.h> ...

  2. k均值聚类图像分割matlab代码_用K均值聚类法为人类拍摄的首张黑洞照片进行分割...

    众所周知,人类最近拍摄了首张黑洞照片.网友们纷纷表示,这明明就是一个甜甜圈嘛!以前以为黑洞是这个世界上最最高冷的存在,而此刻突然现出真身,形象却是如此的人畜无害!不但如此,还勾起了网友的食欲!简直是罪 ...

  3. python图像分割_基于K均值聚类算法的Python图像分割

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

  4. 机器学习算法与Python实践之k均值聚类(k-means)

    机器学习算法与Python实践之(五)k均值聚类(k-means) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是 ...

  5. Python,OpenCV中的K均值聚类——K-Means Cluster

    Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...

  6. Python OpenCV应用K均值聚类进行颜色量化

    Python OpenCV应用K均值聚类进行颜色量化 1. 效果图 2. 颜色量化是什么? 3. MiniBatchKMeans & KMeans 4. 源码 参考 在这篇博客文章中,我将向您 ...

  7. K均值聚类关于初始聚类中心选取的一种改进(python程序)

    本程序是K均值聚类关于初始聚类中心选取的一种改进,原理来自于周志华的机器学习,这里只是尝试用python实现下.刚开始学习python,可能有问题大家觉得有用就借鉴下,如果哪里有问题还望指正.关于K均 ...

  8. python机器学习案例系列教程——k均值聚类、k中心点聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 上一篇我们学习了层次聚类.层次聚类只是迭代的把最相近的两个聚类匹配起来.并没有给出能给出多少的分组.今天我们来研究一个K均值聚类.就是 ...

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

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

最新文章

  1. jQuery使用blur()方法触发两次的解决方法
  2. 智能小车设计指导 第二版
  3. Mjpeg‐stream移植
  4. 采用信号量机制实现消费者与生产者的线程同步_你还能聊聊常用的进程同步算法? 上篇[五]...
  5. IP地址,子网掩码,默认网关,路由,形象生动阐述
  6. java.util.ComparableTimSort中的sort()方法简单分析
  7. .NET Core2使用Azure云上的Iot-Hub服务
  8. 如何设置PP视频允许PPAP驻留
  9. php inner.html,javascript – PHP:如何获得CURRENT innerHTML?
  10. 数据结构与算法--Tree(二叉树、B±树、红黑树)
  11. typescript + react 项目开发体验之起手式
  12. DT大数据梦工厂 第55,56讲
  13. c# 以太坊代币_C代币
  14. 老年代的更新机制_魔兽世界:60年代五大“远古”机制,这根胡萝卜,可是当年的神器...
  15. Debian下安装万兆网卡驱动
  16. 关于Linux中网络连接配置(NetworkManager)的一些笔记
  17. 华为网络设备与基础配置
  18. 增强型Rabin签名算法
  19. 计算机在语文教学中的用场,信息技术在语文教学中的作用
  20. 【微信小程序】echarts视图层会悬浮在所有视图之上问题原因

热门文章

  1. 什么叫给密码“加盐”?如何安全的为你的用户密码“加盐”?
  2. [该视频仅限大陆地区播放的最优解决方案] Ginnay v0.23
  3. excel日期设定每隔七天自动提醒?
  4. 安琪拉教鲁班学堆排序
  5. python中所有元素必须为相同类型的数据_Python之常用数据类型详解
  6. 分布式存储原理:TiDB
  7. Cache in BlueStore
  8. idea引入在线jquery后无效,并且没有语法显示(已解决)
  9. EasyX的安装与使用详细教程
  10. BitTorrent一种内容分发协议