zoukankan      html  css  js  c++  java
  • 1.5:基于聚类的“图像分割”实例编写

    把像素扔进K-Means函数里,然后给像素添加不同的灰度并输出。
     

    图像分割常用方法:

    1. 阈值分割:对图像灰度值进行度量,设置不同类别的阈值,达到分割的目的。
    2. 边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片
    区域的边缘。
    3. 直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜
    色值的范围,来达到分割的目的。
    4. 特定理论:基于聚类分析、小波变换等理论完成图像分割。
     
     

    实例描述

    目标:

    利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割

    输出:

    同一聚类中的点使用相同颜色标记,不同聚类颜色不同

    技术路线:sklearn.cluster.KMeans

    实验过程

    使用算法:Kmeans

    实现步骤:

    1.建立工程并导入sklearn包
    2.加载图片并进行预处理
    3.加载Kmeans聚类算法
    4.对像素点进行聚类并输出

    关于一些相关包的介绍:

    • PIL包:因为本实验涉及图像的加载和创建,因此需要使用到PIL包,如未安装,请下载相关包自行安装。
     1 import numpy as np
     2 import PIL.Image as image
     3 from sklearn.cluster import KMeans
     4  
     5 def loadData(filePath):
     6     f = open(filePath,'rb')
     7     data = []
     8     img = image.open(f)
     9     m,n = img.size
    10     for i in range(m):
    11         for j in range(n):
    12             x,y,z = img.getpixel((i,j))
    13             data.append([x/256.0,y/256.0,z/256.0])
    14     f.close()
    15     return np.mat(data),m,n
    16  
    17 imgData,row,col = loadData('kmeans/bull.jpg')
    18 label = KMeans(n_clusters=4).fit_predict(imgData)
    19  
    20 label = label.reshape([row,col])
    21 pic_new = image.new("L", (row, col))
    22 for i in range(row):
    23     for j in range(col):
    24         pic_new.putpixel((i,j), int(256/(label[i][j]+1)))
    25 pic_new.save("result-bull-4.jpg", "JPEG")
  • 相关阅读:
    冒泡排序
    快速排序
    玩转git版本控制软件
    django内容总结
    ajax图片上传功能
    随机验证码
    制作博客系统
    django自带的用户认证和form表单功能
    COOKIE 与 SESSION
    Ajax知识
  • 原文地址:https://www.cnblogs.com/nishida-rin/p/12275057.html
Copyright © 2011-2022 走看看