大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
摘要:本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理。
本文分享自华为云社区《[Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割》,作者: eastmount。
10余年的花溪网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整花溪建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“花溪网站设计”,“花溪网站推广”以来,每个客户项目都认真落实执行。
本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理。基础性文章,希望对你有所帮助。
注意 :该部分知识均为杨秀璋查阅资料撰写,未经授权禁止转载,谢谢!!如果有问题随时私聊我,只望您能从这个系列中学到知识,一起加油喔~
该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
第一部分知识主要参考自己的新书《Python网络数据爬取及分析从入门到精通(分析篇)》和之前的博客[Python数据挖掘课程] 二.Kmeans聚类数据分析。
K-Means聚类是最常用的聚类算法,最初起源于信号处理,其目标是将数据点划分为K个类簇,找到每个簇的中心并使其度量最小化。该算法的最大优点是简单、便于理解,运算速度较快,缺点是只能应用于连续型数据,并且要在聚类前指定聚集的类簇数。
下面是K-Means聚类算法的分析流程,步骤如下:
下图是对身高和体重进行聚类的算法,将数据集的人群聚集成三类。
在图像处理中,通过K-Means聚类算法可以实现图像分割、图像聚类、图像识别等操作,本小节主要用来进行图像颜色分割。假设存在一张100×100像素的灰度图像,它由个RGB灰度级组成,我们通过K-Means可以将这些像素点聚类成K个簇,然后使用每个簇内的质心点来替换簇内所有的像素点,这样就能实现在不改变分辨率的情况下量化压缩图像颜色,实现图像颜色层级分割。
在OpenCV中,Kmeans()函数原型如下所示:
retval, bestLabels, centers = kmeans(data, K, bestLabels, criteria, attempts, flags[, centers])
下面使用该方法对灰度图像颜色进行分割处理,需要注意,在进行K-Means聚类操作之前,需要将RGB像素点转换为一维的数组,再将各形式的颜色聚集在一起,形成最终的颜色分割。
# coding: utf-8 import cv2 import numpyas np import matplotlib.pyplotas plt #读取原始图像灰度颜色 img= cv2.imread('scenery.png', 0) print img.shape #获取图像高度、宽度 rows, cols= img.shape[:] #图像二维像素转换为一维 data= img.reshape((rows * cols, 1)) data= np.float32(data) #定义中心 (type,max_iter,epsilon) criteria= (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10, 1.0) #设置标签 flags= cv2.KMEANS_RANDOM_CENTERS #K-Means聚类 聚集成4类 compactness, labels, centers= cv2.kmeans(data, 4, None, criteria, 10, flags) #生成最终图像 dst= labels.reshape((img.shape[0], img.shape[1])) #用来正常显示中文标签 plt.rcParams['font.sans-serif']=['SimHei'] #显示图像 titles= [u'原始图像', u'聚类图像'] images= [img, dst] for i in xrange(2): plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()