建物流网站,咖啡网站设计,网络营销方法的典型案例,微信公众号服务号网站开发流程OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较 5. 区域分割之聚类方法 5.3 SLIC 超像素区域分割
SLIC 基于网格化 K-means 聚类方法#xff0c;原理简单#xff0c;计算复杂度为O(N)#xff0c;N 为像素点个数。
S…OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较 5. 区域分割之聚类方法 5.3 SLIC 超像素区域分割
SLIC 基于网格化 K-means 聚类方法原理简单计算复杂度为O(N)N 为像素点个数。
SLIC 通常使用包含三个颜色分量和两个空间坐标的五维向量例如 z[r,g,b,x,y]Tz[r,g,b,x,y]^Tz[r,g,b,x,y]T。以均匀的规则网格取样点的初始的聚类中心用 k-means 聚类算法计算出聚类中心和边界。
对彩色图像可以使用 RGB 颜色空间也可以转化为 CIELab 或其它颜色空间。对于灰度图像则使用灰度级与空间坐标构成的三维向量。
SLIC 算法能生成紧凑、近似均匀的超像素在运算速度物体轮廓保持、超像素形状方面具有较高的综合评价比较符合人们期望的分割效果。
SLIC 的优点是1生成的超像素紧凑整齐邻域特征比较容易表达2可以应用于彩色图像或灰度图像3参数设置少基本参数只有超像素数量4运行速度、超像素紧凑度、轮廓保持都比较理想。 OpenCV 在 ximgproc 模块提供了 cv.ximgproc.createSuperpixelSLIC 函数实现SLIC算法。
该函数用于初始化输入图像的 SuperpixelSLIC 对象。它设置所选超级像素算法的参数即区域大小和标尺。它为给定图像上的未来计算迭代预先分配了一些缓冲区。对于最终结果建议彩色图像使用一个小的3 x 3内核预处理具有少量高斯模糊的图像并将其额外转换为CieLAB颜色空间。SLIC与SLICO和MSLIC的对比示例如下图所示。
函数说明
cv.ximgproc.createSuperpixelSLIC(image[, algorithmSLICO, region_size10, ruler10.0f]) → retval参数说明
image原始图像algorithm选择算法 SLIC 使用所需的区域大小分割图像SLICO 使用自适应紧致因子进行优化MSLIC 使用流形方法进行优化 region_size区域尺寸以像素为单位的超像素大小默认值 10ruler超像素的平滑因子默认值 10
MSLIC 是对 SLIC 的优化密集区域的超像素较小稀疏区域的超像素较大从而产生对内容更敏感的超像素。 例程 11.29 SLIC 超像素区域分割之算法比较 # 11.29 SLIC 超像素区域分割之算法比较# 注意本例程需要 opencv-contrib-python 包的支持img cv2.imread(../images/imgLena.tif, flags1) # 读取彩色图像(BGR)imgHSV cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL) # BGR-HSV 转换plt.figure(figsize(9, 7))plt.subplot(221), plt.axis(off), plt.title(Origin)plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # 显示 img1(RGB)algorithms [(SLIC, cv2.ximgproc.SLIC), # 使用所需的区域大小分割图像(SLICO, cv2.ximgproc.SLICO), # 使用自适应紧致因子进行优化(MSLIC, cv2.ximgproc.MSLIC)] # 使用流形方法进行优化产生对内容更敏感的超像素region_size 20ruler 10edgeColor np.ones((img.shape[0], img.shape[1], 3), np.uint8) * 255for i in range(3):slic cv2.ximgproc.createSuperpixelSLIC(imgHSV, algorithms[i][1], region_size, float(ruler))slic.iterate(5) # 迭代次数默认 10 次slic.enforceLabelConnectivity(100) # 最小尺寸mask_slic slic.getLabelContourMask() # 获取Mask超像素边缘Mask1mask_color np.array([mask_slic for i in range(3)]).transpose(1, 2, 0) # 转为 3通道img_slic cv2.bitwise_and(img, img, maskcv2.bitwise_not(mask_slic)) # 在原图上绘制超像素边界plt.subplot(2,2,i2), plt.axis(off), plt.title(Slic ({}).format(algorithms[i][0]))plt.imshow(cv2.cvtColor(img_slic, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()本节完 版权声明
OpenCV 例程200篇 总目录-202205更新 youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/124576598)
Copyright 2022 youcans, XUPT Crated2022-5-4 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列持续更新中 【youcans 的 OpenCV 例程200篇】171.SLIC 超像素区域分割 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割 【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较 更多内容请见 【OpenCV 例程200篇 总目录-202206更新】