模式识别与机器学习(作业6)基于聚类的图片分割

简介: 流程:读图片(512, 512, 3)–>下采样,降低维度(256, 256, 3)–>将通道展平,data = (65536, 3)–>归一化

流程:


读图片(512, 512, 3)–>下采样,降低维度(256, 256, 3)–>将通道展平,data = (65536, 3)–>归一化


–>设置类别Class_num=3

–>初始阶段,取样本前三个,作为是三个类别的初始中心像素

–>计算所有样本点与3类中心坐标的距离,将类别分配距离中心坐标最小的哪一类

–>求各类样本的均值,更新中心坐标,重复迭代,直到分布不在改变


求出各类的平均像素,令各类别的像素均等于平均像素,显示出来。

python程序实现

import tensorflow as tf
import numpy as np
import cv2
import matplotlib.pyplot as plt 
from sklearn.cluster import KMeans
#%%数据读取归一化
img = cv2.imread(r"pepper.bmp")
#转换为RGB通道
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.axis("off")
plt.show()
#进行下采样,降低维度
img1 = cv2.pyrDown(img)
plt.imshow(img1)
plt.axis("off")
plt.show()
##通道展平[R,G,B]
data = img1.reshape((-1,3))
#数据归一化
data = data/255.0
#%%定义聚类
class C_means():
    def __init__(self):
        self.data = None
        self.label = None
        self.center = None
        self.Class_number = None
        #self.distacen = None
    def fit(self,data,Class_number):
        self.data = data
        self.Class_number = Class_number
        self.center = [data[i] for i in range(Class_number)]
        #求欧式距离
    def eucldist_vectorized(self,coords1, coords2):
        return np.sqrt(np.sum((coords1 - coords2)**2))
        #计算中心坐标
    def compute_center(self):
        self.center = np.array([np.mean(self.data[self.label==i,:],axis = 0) for i in range(self.Class_number)])
        #归类
    def classify(self):
        label = []
        for i in self.data:
            distance = [self.eucldist_vectorized(i,j) for j in self.center]
            index = np.argmin(distance)
            #将类别归类
            label.append(index)
        self.label = np.array(label)
    def predict(self):
        flag = True
        quenu = [1,43,100,10,3]
        while flag:
            self.classify()
            self.compute_center()
            quenu.append(self.label)
            quenu.pop(0)
            if np.sum(quenu[0]) == np.sum(quenu[-1]):
                flag = False
        return self.center,self.label
#%% 测试
cnn = C_means()
cnn.fit(data,Class_number = 3)
center,label = cnn.predict()
#%%  划分类,绘图
for j,i in enumerate(label):
    if i == 0:
        data[j] = center[0]
    if i == 1:
        data[j] = center[1]
    if i == 2:
        data[j] = center[2]
result = data.reshape((img1.shape))
plt.imshow(result)
plt.axis("off")
plt.show()      

结果

相关文章
|
10月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1038 6
|
11月前
|
机器学习/深度学习 算法 数据挖掘
机器学习第五次作业
机器学习第五次作业包含三个题目。第一题实现高斯贝叶斯分类和高斯朴素贝叶斯分类,分别用于判断瓜的好坏。第二题使用EM算法对数据进行聚类,输出两个类别的均值、方差和先验概率。第三题内容未完整展示。
128 0
机器学习第五次作业
|
机器学习/深度学习 自动驾驶 机器人
【机器学习知识点】3. 目标检测任务中如何在图片上的目标位置绘制边界框
【机器学习知识点】3. 目标检测任务中如何在图片上的目标位置绘制边界框
|
11月前
|
机器学习/深度学习 计算机视觉 Python
坐标下降求解人脸表示(机器学习作业04)
这是机器学习第四次作业的解答,包含两道题目。第一题涉及数学推导,给出了详细的求解过程。第二题则通过 Python 代码实现图像处理,包括读取单张图片和批量读取文件夹中的图片,并将图像数据转换为矩阵形式。
53 0
坐标下降求解人脸表示(机器学习作业04)
|
11月前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
562 0
|
11月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
100 0
|
11月前
|
机器学习/深度学习 算法 API
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)
|
机器学习/深度学习 数据采集 算法
【机器学习】K-Means聚类的执行过程?优缺点?有哪些改进的模型?
K-Means聚类的执行过程、优缺点,以及改进模型,包括K-Means++和ISODATA算法,旨在解决传统K-Means算法在确定初始K值、收敛到局部最优和对噪声敏感等问题上的局限性。
219 2
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
1106 1
|
机器学习/深度学习 算法 数据挖掘
【机器学习】Python详细实现基于欧式Euclidean、切比雪夫Chebyshew、曼哈顿Manhattan距离的Kmeans聚类
文章详细实现了基于不同距离度量(欧氏、切比雪夫、曼哈顿)的Kmeans聚类算法,并提供了Python代码,展示了使用曼哈顿距离计算距离矩阵并输出k=3时的聚类结果和轮廓系数评价指标。
250 1

热门文章

最新文章