7. 图像分割实例

来源:互联网 发布:金十数据直播间喊单 编辑:程序博客网 时间:2024/06/13 14:58

  • 图像分割
  • 常用方法
  • 代码

1. 图像分割

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

2. 常用方法

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

3. 代码

import numpy as np# 用于加载创建图片import PIL.Image as image# 加载Kmeans算法from sklearn.cluster import KMeans############################################################## 加载图片并进行预处理def load_data(file_path):    # 以二进制形式打开文件    f = open(file_path, 'rb')    data = []    # 以列表形式返回图片像素值    img = image.open(f)    # 获得图片的大小    m, n = img.size    # 将每个像素点RGB颜色处理到0-1    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()    # 以矩阵形式返回data以及图片大小    return np.mat(data), m, nimg_data, row, col = load_data('Data/bull.jpg')############################################################## 对像素点进行聚类并输出# 聚类获得每个像素所属的类别label = KMeans(n_clusters=4).fit_predict(img_data)label = label.reshape([row, col])# 创建一张新的灰度图保存聚类后的结果pic_new = image.new("L", (row, col))# 根据所属类别向图片中添加灰度值for i in range(row):    for j in range(col):        pic_new.putpixel((i, j), int(256 / (label[i][j] + 1)))# 以JPEG格式保存图像pic_new.save("result-bull-4.jpg", "JPEG")