网站的地图要怎么做,视频网站的链接怎么做,有没有专门做标书的网站,wordpress中文翻译插件【OpenCV 例程200篇】 系列#xff0c;持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类 5. 区域分割之聚类方法
5.1 基于 k 均值聚类的区域分割
聚类方法的思想是将样本集合按照其特征的相似性划分为若干类别…【OpenCV 例程200篇】 系列持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类 5. 区域分割之聚类方法
5.1 基于 k 均值聚类的区域分割
聚类方法的思想是将样本集合按照其特征的相似性划分为若干类别使同一类别样本的特征具有较高的相似性不同类别样本的特征具有较大的差异性。
基于聚类的区域分割就是基于图像的灰度、颜色、纹理、形状等特征用聚类算法把图像分成若干类别或区域使每个点到聚类中心的均值最小。 argminC(∑i1k∑z∈Ci∥z−mi∥2)arg \min_{C} \Big( \sum^k_{i1} \sum_{z \in C_i} \lVert z - m_i \rVert ^2 \Big) argCmin(i1∑kz∈Ci∑∥z−mi∥2) k 均值k-means是一种无监督聚类算法。基于 k 均值聚类算法的区域分割算法步骤为
1首先从图像中选取 k 个点作为初始的聚类中心
2对所有的像素点计算像素到每个聚类中心的距离将像素分类到距离最小的一个聚类中
3根据分类结果计算出新的聚类中心
4如此反复迭代直到聚类中心收敛到稳定值。
OpenCV 提供了函数 cv.kmeans 来实现 k-means 聚类算法。函数 cv.kmeans 不仅可以基于灰度、颜色对图像进行区域分割也可以基于样本的其它特征如纹理、形状进行聚类。
函数说明
cv.kmeans(data, K, bestLabels, criteria, attempts, flags[, centers]) → compactness, labels, centersdst函数 cv.kmeans 实现 k-means 算法寻找聚类中心并按聚类对输入样本进行分组。
参数说明
data用于聚类的数据N 维数组类型为 CV_32F、CV_32FC2K设定的聚类数量bestLabels整数数组分类标签每个样本的所属聚类的序号criteria元组 (type, max_iter, epsilon)算法结束标准最大迭代次数或聚类中心位置精度 cv2.TERM_CRITERIA_EPS如果达到指定的精度 epsilon则停止算法迭代cv2.TERM_CRITERIA_MAX_ITER在指定的迭代次数max_iter之后停止算法cv2.TERM_CRITERIA_EPS cv.TERM_CRITERIA_MAX_ITER当满足上述任何条件时停止迭代 attempts标志指定使用不同聚类中心初值执行算法的次数flags像素邻域的尺寸用于计算邻域的阈值通常取 357 cv2. KMEANS_RANDOM_CENTERS随机产生聚类中心的初值cv2. KMEANS_PP_CENTERSKmeans 中心初始化方法cv2. KMEANS_USE_INITIAL_LABELS第一次计算时使用用户指定的聚类初值之后的计算则使用随机的或半随机的聚类中心初值 centers聚类中心数组每个聚类中心为一行可选项labels整数数组分类标签每个样本的所属聚类的序号centersdst聚类中心数组 例程 11.27图像分割之 k 均值聚类 # 11.27 图像分割之 k 均值聚类img cv2.imread(../images/imgB6.jpg, flags1) # 读取彩色图像(BGR)dataPixel np.float32(img.reshape((-1, 3)))criteria (cv2.TERM_CRITERIA_EPS cv2.TERM_CRITERIA_MAX_ITER, 200, 0.1) # 终止条件flags cv2.KMEANS_RANDOM_CENTERS # 起始的中心选择K 3 # 设置聚类数_, labels, center cv2.kmeans(dataPixel, K, None, criteria, 10, flags)centerUint np.uint8(center)classify centerUint[labels.flatten()] # 将像素标记为聚类中心颜色imgKmean3 classify.reshape((img.shape)) # 恢复为二维图像K 4 # 设置聚类数_, labels, center cv2.kmeans(dataPixel, K, None, criteria, 10, flags)centerUint np.uint8(center)classify centerUint[labels.flatten()] # 将像素标记为聚类中心颜色imgKmean4 classify.reshape((img.shape)) # 恢复为二维图像K 5 # 设置聚类数_, labels, center cv2.kmeans(dataPixel, K, None, criteria, 10, flags)centerUint np.uint8(center)classify centerUint[labels.flatten()] # 将像素标记为聚类中心颜色imgKmean5 classify.reshape((img.shape)) # 恢复为二维图像plt.figure(figsize(9, 7))plt.subplot(221), plt.axis(off), plt.title(Origin)plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 显示 img1(RGB)plt.subplot(222), plt.axis(off), plt.title(K-mean (k3))plt.imshow(cv2.cvtColor(imgKmean3, cv2.COLOR_BGR2RGB))plt.subplot(223), plt.axis(off), plt.title(K-mean (k4))plt.imshow(cv2.cvtColor(imgKmean4, cv2.COLOR_BGR2RGB))plt.subplot(224), plt.axis(off), plt.title(K-mean (k5))plt.imshow(cv2.cvtColor(imgKmean5, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()本节完 版权声明
youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/124550523)
Copyright 2022 youcans, XUPT Crated2022-4-30 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列持续更新中 【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长 【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离 【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类 更多内容请见 【OpenCV 例程200篇 总目录-202206更新】