【计算机视觉】图像聚类&噪声

本文详细介绍了图像处理中的聚类与噪声处理技术。首先讲解了图像分类与聚类的区别,重点阐述了K-Means聚类算法的原理、优缺点以及在图像中的应用。接着讨论了层次聚类和DBSCAN聚类算法,分析了它们的特点。此外,还探讨了图像噪声的类型,如高斯噪声和椒盐噪声,以及如何通过滤波技术去除噪声,如均值滤波、中值滤波和最大最小滤波。文章通过代码实现展示了不同聚类和噪声处理方法的效果,是深入理解图像处理技术的宝贵资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 图像分类与聚类

以下算法不只能用于图像聚类

1.1 分类

  • 分类:从特定的数据中挖掘模式,作出判断的过程。(也就是给出一个标签)

  • 分类学习主要过程(有监督学习supervised Learning)

    (1)训练数据集存在一个类标记号,判断它是正向数据集(起积极作用,不垃圾邮件), 还是负向数据集(起抑制作用,垃圾邮件);

    (2)然后需要对数据集进行学习训练,并构建一个训练的模型;

    (3)通过该模型对预测数据集进预测,并计算其结果的性能。

    在这里插入图片描述

1.2 聚类

  • 聚类:从广义上说,聚类就是将数据集中在某些方面相似的数据成员放在一起。 一个聚类就是一些数据实例的集合,其中处于相同聚类中的数据元素彼此相似,但是处于不同聚类中的元素彼此不同

  • 聚类解释:将一些数据分成几堆,但是并不知道每一堆都有什么样的特点 、分别属于哪一类。也就是把相同特点的聚成一堆,但是不知道具体是什么特点。

  • 无监督学习:由于在聚类中那些表示数据类别的分类或分组信息是没有的,即这些数据是没有标签的,所以聚类通常被归为无监督学习(Unsupervised Learning)。

  • 聚类的目的:把数据分类,但是事先是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。

  • 分类与聚类区别:聚类主要是"物以类聚",通过相似性把相似元素聚集在一起,它没有标签;而分类通过标签来训练得到一个模型,对新数据集进行预测的过程,其数据存在标签。分类属于有监督学习,聚类属于无监督学习。

    分类 聚类
    有标签 有监督学习
    无标签聚类 无监督学习
    训练过程
  • 聚类样本间的属性:有序属性(西瓜的甜度:0.1,0.2,0.3)、无序属性(性别:男,女)

1.2.1 原型聚类:K-Means聚类(最常用算法)

K均值聚类算法(K-Means聚类)最初起源于信号处理,其目标是将数据点划分为K个类簇。

  • 优点:简单、便于理解,运算速度较快

  • 缺点:要在聚类前指定聚集的类簇数;必须事先给出k,对噪声和孤立点数据敏感

  • k-means聚类算法的分析流程

    • 第一步,确定K值(人为确定),即将数据集聚集成K个类簇或小组。

    • 第二步,从数据集中随机选择K个数据点作为质心(Centroid)或数据中心。

    • 第三步,分别计算每个点到每个质心之间的距离,并将每个点划分到离最近质心的小组。

    • 第四步,当每个质心都聚集了一些点后,重新定义算法选出新的质心。

      注释:一般来说对于每个簇,计算每个簇均值,即得到新的k个质心点。当然也可以计算每个簇的最大值最小值或者其他特殊值做质心,根据实际情况改变 。

    • 第五步,迭代执行第三步到第四步,直到迭代终止条件满足为止。

      注释:迭代终止条件一般指聚类结果不再变化,即最后每簇的数据不再变化。但也可以人为设置其他终止条件,根据实际情况而变。

  • Kmeans()函数原型:
    retval, bestLabels, centers = kmeans(data, K, bestLabels, criteria, attempts, flags[, centers])

    参数解释:

    • data表示聚类数据,最好是np.flloat32类型的N维点集

    • K表示聚类类簇数

    • bestLabels表示输出的整数数组,用于存储每个样本的聚类标签索引

    • criteria表示迭代停止的模式选择,这是一个含有三个元素的元组型数。

      格式为(type, max_iter, epsilon)其中,type有如下模式:
      —–cv2.TERM_CRITERIA_EPS :精确度(误差)满足epsilon停止。
      —-cv2.TERM_CRITERIA_MAX_ITER:迭代次数超过max_iter停止。
      —-cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,两者合体,任意一个满足结束。

    • attempts表示重复试验kmeans算法的次数,算法返回产生的最佳结果的标签

    • flags表示初始中心的选择,两种方法是cv2.KMEANS_PP_CENTERS ;cv2.KMEANS_RANDOM_CENTERS

    • centers表示集群中心的输出矩阵,每个集群中心为一行数据

  • 图像处理中的运用场景:图像分割、图像聚类、图像识别

【代码实现】直接调用K-Menas接口
# coding=utf-8  
from sklearn.cluster import KMeans
 
"""
第一部分:数据集
X表示二维矩阵数据,篮球运动员比赛数据
总共20行,每行两列数据
第一列表示球员每分钟助攻数:assists_per_minute
第二列表示球员每分钟得分数:points_per_minute
"""
X = [[0.0888, 0.5885],
     [0.1399, 0.8291],
     [0.0747, 0.4974],
     [0.0983, 0.5772],
     [0.1276, 0.5703],
     [0.1671, 0.5835],
     [0.1306, 0.5276],
     [0.1061, 0.5523],
     [0.2446, 0.4007],
     [0.1670, 0.4770],
     [0.2485, 0.4313],
     [0.1227, 0.4909],
     [0.1240, 0.5668],
     [0.1461, 0.5113],
     [0.2315, 0.3788],
     [0.0494, 0.5590],
     [0.1107, 0.4799],
     [0.1121, 0.5735],
     [0.1007, 0.6318],
     [0.2567, 0.4326],
     [0.1956, 0.4280]   
    ]
 
#输出数据集
print (X)

"""
第二部分:KMeans聚类
clf = KMeans(n_clusters=3) 表示类簇数为3,聚成3类数据,clf即赋值为KMeans
y_pred = clf.fit_predict(X) 载入数据集X,并且将聚类的结果赋值给y_pred
"""

clf = KMeans(n_clusters=3)
y_pred = clf.fit_predict(X)
 
#输出完整Kmeans函数,包括很多省略参数
print(clf)
#输出聚类预测结果
print("y_pred = ",y_pred)
 
"""
第三部分:可视化绘图
"""

import numpy as np
import matplotlib.pyplot as plt

#获取数据集的第一列和第二列数据 使用for循环获取 n[0]表示X第一列
x = [n[0] for n in X]
print (x)
y = [n[1] for n in X]
print (y)

''' 
绘制散点图 
参数:x横轴; y纵轴; c=y_pred聚类预测结果; marker类型:o表示圆点,*表示星型,x表示点;
'''
plt.scatter(x, y, c=y_pred, marker='x')
 
#绘制标题
plt.title("Kmeans-Basketball Data")
 
#绘制x轴和y轴坐标
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")
 
#设置右上角图例
plt.legend(["A","B","C"])
 
#显示图形
plt.show()

运行结果:

[[0.0888, 0.5885], [0.1399, 0.8291], [0.0747, 0.4974], [0.0983, 0.5772], [0.1276, 0.5703], [0.1671, 0.5835], [0.1306, 0.5276], [0.1061, 0.5523], [0.2446, 0.4007], [0.167, 0.477], [0.2485, 0.4313], [0.1227, 0.4909], [0.124, 0.5668], [0.1461, 0.5113], [0.2315, 0.3788], [0.0494, 0.559], [0.1107, 0.4799], [0.1121, 0.5735], [0.1007, 0.6318], [0.2567, 0.4326], [0.1956, 0.428]]
KMeans(n_clusters=3)
y_pred =  [0 2 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 1 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃_早餐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值