图像处理——实现LSC和SEEDS分割算法

实现目标:

实现LSC和SEEDS分割算法,直接调用opencv的ximgproc库中的函数实现。

结果放在同一张图中进行比较。


代码如下:

import cv2
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseimg = cv2.imread("E:/Lena.PNG", flags=1)  # 读取彩色图像(BGR)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)  # BGR-HSV 转换# 线性谱聚类LSC 算法 (Linear Spectral Clustering)基本思想是把所有数据看做空间中的点,点之间可以用边连接。
# 距离较远的点之间的边权重值较低,而距离较近的点之间的边权重值较高。
# 通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。
lsc = cv2.ximgproc.createSuperpixelLSC(img)
lsc.iterate(10)  # 使用SuperpixelSEEDS对象中的初始化参数计算给定图像的超像素分割,迭代次数为10
mask_lsc = lsc.getLabelContourMask()  # 返回存储在SuperpixelSEEDS对象中的超像素分割的掩码 Mask,超像素边缘 Mask==1
img_lsc = cv2.bitwise_and(img, img, mask=cv2.bitwise_not(mask_lsc))# SEEDS 算法,注意图片长宽的顺序为 w, h, c 参数:宽度,高度,通道数,期望像素数,块级别数,直方图bins数,是否重复
seeds = cv2.ximgproc.createSuperpixelSEEDS(img.shape[1], img.shape[0], img.shape[2], 600, 10, 5, 5, True)
seeds.iterate(imgHSV, 10)  # 使用SuperpixelSEEDS对象中的初始化参数计算给定图像的超像素分割,迭代次数为10
mask_seeds = seeds.getLabelContourMask()  # 获取 Mask,超像素边缘 Mask==1
img_seeds = cv2.bitwise_and(img, img, mask=cv2.bitwise_not(mask_seeds))# 结果图像保存
cv2.imwrite("./result/img_seeds.png", img_seeds)
cv2.imwrite("./result/img_lsc.png", img_lsc)
cv2.imwrite("./result/mask_seeds.png", mask_seeds)
cv2.imwrite("./result/mask_lsc.png", mask_lsc)
# 图像对比展示
plt.figure(figsize=(9, 6), dpi=600)
plt.suptitle("LSC and SEEDS",fontsize=30,x=0.5,y=0.05)
plt.subplot(131)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("Origin image",fontsize=18)
plt.subplot(232)
plt.imshow(cv2.cvtColor(mask_lsc, cv2.COLOR_BGR2RGB))
plt.title("LSC mask",fontsize=18)
plt.subplot(233)
plt.imshow(cv2.cvtColor(img_lsc, cv2.COLOR_BGR2RGB))
plt.title("LSC image",fontsize=18)
plt.subplot(235)
plt.imshow(cv2.cvtColor(mask_seeds, cv2.COLOR_BGR2RGB))
plt.title("SEEDS mask",fontsize=18)
plt.subplot(236)
plt.imshow(cv2.cvtColor(img_seeds, cv2.COLOR_BGR2RGB))
plt.title("SEEDS image",fontsize=18)
plt.show()

 实现效果如下:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部