基于聚类的“图像分割”实例编写

基于聚类的“图像分割”实例编写

图像分割 :

利用图像的灰度、颜色、纹理、形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区 域之间存在明显的差异性。然后就可以将分割的图像中具有独特性质的区域提取出来用于不同的研究。

图像分割技术已在实际生活中得到广泛的应用

例如:在机车检验领域, 可以应用到轮毂裂纹图像的分割,及时发现裂纹,保证行车安全;在生物医 学工程方面,对肝脏 CT 图像进行分割,为临床治疗和病理学研究提供帮助。

图像分割常用方法 :

  1. 阈值分割 : 对图像灰度值进行度量,设置不同类别的阈值,达到分割的目的。

  2. 边缘分割 : 对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片区域的边缘。

  3. 直方图法 : 对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜色值的范围,来达到分割的目的。

  4. 特定理论 : 基于聚类分析、小波变换等理论完成图像分割。

这里写图片描述

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 26 18:32:56 2017

@author: xiaolian
"""

import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans

def loadData(filepath):
    f = open(filepath, 'rb')
    data = []
    img = image.open(f)
    m, n = img.size
    for i in range(m):
        for j in range(n):
            x, y, z = img.getpixel( (i, j) )
            data.append( [x / 256.0, y / 256.0, z / 256.0] )

    f.close()
    return np.mat(data), m, n

imgData, row, col = loadData('bull.jpg')

print(imgData, row, col)

label = KMeans(n_clusters = 4).fit_predict(imgData)

label = label.reshape( [row, col] )

print(label)

pic_new = image.new( 'L', (row, col) )

print(pic_new)

for i in range(row):
    for j in range(col):
        pic_new.putpixel((i, j), int(256 / (label[i][j] + 1)))

pic_new.save('result_bull_4.jpg', 'JPEG')

* 输出:*

这里写图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值