youcans 的 OpenCV 例程200篇174.LSC 超像素区域分割
Posted 小白YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了youcans 的 OpenCV 例程200篇174.LSC 超像素区域分割相关的知识,希望对你有一定的参考价值。
【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
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测
【youcans 的 OpenCV 例程200篇】148. 图像分割之线检测
【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型
【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子
【youcans 的 OpenCV 例程200篇】151. 边缘检测中的平滑处理
【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子
【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子
【youcans 的 OpenCV 例程200篇】154. 边缘检测之 Canny 算子
【youcans 的 OpenCV 例程200篇】155. 边缘连接的局部处理方法
【youcans 的 OpenCV 例程200篇】156. 边缘连接局部处理的简化算法
【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测
【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法
【youcans 的 OpenCV 例程200篇】159. 图像分割之全局阈值处理
【youcans 的 OpenCV 例程200篇】160. 图像处理之OTSU 方法
【youcans 的 OpenCV 例程200篇】161. OTSU 阈值处理算法的实现
【youcans 的 OpenCV 例程200篇】162. 全局阈值处理改进方法
【youcans 的 OpenCV 例程200篇】163. 基于边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】164.使用 Laplace 边缘信息改进全局阈值处理
【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法
【youcans 的 OpenCV 例程200篇】166.自适应阈值处理
【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理
【youcans 的 OpenCV 例程200篇】168.图像分割之区域生长
【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离
【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类
【youcans 的 OpenCV 例程200篇】171.SLIC 超像素区域分割
【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较
【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割
【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割
以上是关于youcans 的 OpenCV 例程200篇174.LSC 超像素区域分割的主要内容,如果未能解决你的问题,请参考以下文章
youcans 的 OpenCV 例程200篇184.鼠标交互标记的分水岭算法
youcans 的 OpenCV 例程200篇183.基于轮廓标记的分水岭算法