最简单的SLIC算法实现

Posted 一只会飞的猪️

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简单的SLIC算法实现相关的知识,希望对你有一定的参考价值。

超像素由一系列位置相邻且颜色、亮度、纹理等特征相似的像素点组成的小区域。这些小区域大多保留了进一步进行图像分割的有效信息,且一般不会破坏图像中物体的边界信息,用少量的超像素代替大量像素表达图像特征,降低了图像处理的复杂度,一般作为分割算法的预处理步骤。

SLIC算法生成的像素块相对紧凑,领域特征容易表达;同时需要设置调整的参数少,操作简单,速度快,对于图像的紧凑度、轮廓保持拥有很好的效果;兼容灰度图和彩色图的分割。

代码如下:

import cv2 as cv

img = cv.imread("reba.jpg")
# 初始化slic项,region_size设置分割图片尺寸大小 ruler设置平滑因子
slic = cv.ximgproc.createSuperpixelSLIC(img,region_size=10, ruler=20.0)
slic.iterate(10)    # 设置迭代次数,迭代次数相对来说越大越好
mask_slic = slic.getLabelContourMask()  # 获取Mask,超像素边缘Mask==1
mask_inv_slic = cv.bitwise_not(mask_slic)  # 对mask_slic进行逻辑取反运算
img_slic = cv.bitwise_and(img, img, mask=mask_inv_slic)  # 在原图上绘制超像素边界
cv.imshow("img_slic", img_slic)
cv.waitKey(0)
cv.imwrite('./SLIC.jpg', img_slic)
cv.destroyAllWindows()

运行结果如下:

如果不懂代码可以尝试输出mask_slic和mask_inv_slic的图像,就明白了是怎么分割的了。

代码如下:

import cv2 as cv

img = cv.imread("reba.jpg")
# 初始化slic项,region_size设置分割图片尺寸大小 ruler设置平滑因子
slic = cv.ximgproc.createSuperpixelSLIC(img,region_size=10, ruler=20.0)
slic.iterate(10)    # 设置迭代次数,迭代次数相对来说越大越好
mask_slic = slic.getLabelContourMask()  # 获取Mask,超像素边缘Mask==1

# 显示mask_slic图像
cv.imshow('mask_slic', mask_slic)
cv.waitKey(0)
cv.destroyAllWindows()
mask_inv_slic = cv.bitwise_not(mask_slic)  # 对mask_slic进行逻辑取反运算

# 显示mask_inv_slic图像
cv.imshow('mask_inv_slic',mask_inv_slic)
cv.waitKey(0)
cv.destroyAllWindows()

img_slic = cv.bitwise_and(img, img, mask=mask_inv_slic)  # 对边界和原图进行与运算,在原图上绘制超像素边界
cv.imshow("img_slic", img_slic)
cv.waitKey(0)
cv.imwrite('./SLIC.jpg', img_slic)
cv.destroyAllWindows()

输出mask_slic图片如下:

 对mask_slic取反后的结果图片mask_inv_slic图像如下:

其实在我理解OpenCV实现SLIC算法的过程就是先对图像绘制出分割图像,在进行逻辑运算绘制在原图上,对原图实现SLIC超分辨率重建算法。

以上是关于最简单的SLIC算法实现的主要内容,如果未能解决你的问题,请参考以下文章

SLIC超像素分割slicmex源代码在windows下matlab中mex出错的修正

youcans 的 OpenCV 例程200篇172.SLIC 超像素区域分割算法比较

gSLicr:nfydream gSLICr: SLIC superpixels at over 250Hz (using cuda)

gSLicr:nfydream gSLICr: SLIC superpixels at over 250Hz (using cuda)

SLIC超像素(superpixel)算法

代码片段 - Golang 实现简单的 Web 服务器