最简单的SLIC算法实现
2021/11/20 17:12:17
本文主要是介绍最简单的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算法实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在使用平台私钥进行解密时提示 "私钥解密失败" 错误信息是什么原因?-icode9专业技术文章分享
- 2024-11-15Layui框架有哪些方式引入?-icode9专业技术文章分享
- 2024-11-15Layui框架中有哪些减少对全局环境的污染方法?-icode9专业技术文章分享
- 2024-11-15laydate怎么关闭自动的日期格式校验功能?-icode9专业技术文章分享
- 2024-11-15laydate怎么取消初始日期校验?-icode9专业技术文章分享
- 2024-11-15SendGrid 的邮件发送时,怎么设置回复邮箱?-icode9专业技术文章分享
- 2024-11-15使用 SendGrid API 发送邮件后获取到唯一的请求 ID?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 tags标签最多有多少个?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 怎么批量发送给多个人?-icode9专业技术文章分享
- 2024-11-15如何搭建web开发环境并实现 web项目在浏览器中访问?-icode9专业技术文章分享