【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割

本文介绍了OpenCV中的LSC(LinearSpectralClustering)超像素区域分割算法,作为SLIC的改进版,LSC提供更紧凑且均匀的超像素。通过cv.ximgproc.createSuperpixelLSC函数实现,它具有线性计算复杂性和高内存效率。示例代码展示了如何使用LSC进行超像素分割,并与SLIC进行了对比展示。
摘要由CSDN通过智能技术生成

【OpenCV 例程200篇 总目录-202206更新】**

【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割


5.5 LSC 超像素区域分割

线性谱聚类(Linear Spectral Clustering,LSC)是 SLIC 的改进方案,可以生成紧凑且均匀的超像素,将图像分割成大小均匀,边界光滑的小块。

LSC 可以生成具有低计算成本的紧凑且均匀的超像素。

谱聚类是从图论中演化出来的算法,其基本思想是把所有数据看做空间中的点,点之间可以用边连接。距离较远的点之间的边权重值较低,而距离较近的点之间的边权重值较高。通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。

LSC 具有线性计算复杂性和高内存效率,并且能够保留图像的全局属性。


例程 11.31: LSC 超像素区域分割

OpenCV 在 ximgproc 模块提供了 cv.ximgproc.createSuperpixelLSC 函数实现 LSC 算法。

函数说明:

cv.ximgproc.createSuperpixelLSC(image[, region_size[, ratio]]) → retval

参数说明:

  • image:输入图像
  • region_size:区域尺寸,平均超像素大小,默认值 10
  • ratio:超像素的紧凑度因子,默认值 0.075

    # 11.31 LSC 超像素区域分割
    # 注意:本例程需要 opencv-contrib-python 包的支持
    img = cv2.imread("../images/imgLena.tif", flags=1)  # 读取彩色图像(BGR)
    imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)  # BGR-HSV 转换

    # SLIC 算法
    slic = cv2.ximgproc.createSuperpixelSLIC(img, region_size=20, ruler=10.0)  # 初始化 SLIC
    slic.iterate(10)  # 迭代次数,越大效果越好
    mask_slic = slic.getLabelContourMask()  # 获取 Mask,超像素边缘 Mask==1
    img_slic = cv2.bitwise_and(img, img, mask=cv2.bitwise_not(mask_slic))  # 在原图上绘制超像素边界

    # LSC 算法 (Linear Spectral Clustering)
    lsc = cv2.ximgproc.createSuperpixelLSC(img)
    lsc.iterate(10)
    mask_lsc = lsc.getLabelContourMask()
    label_lsc = lsc.getLabels()
    number_lsc = lsc.getNumberOfSuperpixels()
    mask_inv_lsc = cv2.bitwise_not(mask_lsc)
    img_lsc = cv2.bitwise_and(img, img, mask=mask_inv_lsc)

    plt.figure(figsize=(9, 7))
    plt.subplot(221), plt.axis('off'), plt.title("Origin image")
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))  # 显示 img(RGB)
    plt.subplot(222), plt.axis('off'), plt.title("LSC mask")
    plt.imshow(mask_lsc, 'gray')
    plt.subplot(223), plt.axis('off'), plt.title("SLIC image")
    plt.imshow(cv2.cvtColor(img_slic, cv2.COLOR_BGR2RGB))
    plt.subplot(224), plt.axis('off'), plt.title("LSC image")
    plt.imshow(cv2.cvtColor(img_lsc, cv2.COLOR_BGR2RGB))
    plt.tight_layout()
    plt.show()

在这里插入图片描述


(本节完)


版权声明:

OpenCV 例程200篇 总目录-202205更新
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/124643704)

Copyright 2022 youcans, XUPT
Crated:2022-5-8


欢迎关注 『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更新】

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

youcans_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值