最简单的SLIC算法实现
超像素由一系列位置相邻且颜色、亮度、纹理等特征相似的像素点组成的小区域。这些小区域大多保留了进一步进行图像分割的有效信息,且一般不会破坏图像中物体的边界信息,用少量的超像素代替大量像素表达图像特征,降低了图像处理的复杂度,一般作为分割算法的预处理步骤。
SLIC算法生成的像素块相对紧凑,领域特征容易表达;同时需要设置调整的参数少,操作简单,速度快,对于图像的紧凑度、轮廓保持拥有很好的效果;兼容灰度图和彩色图的分割。
代码如下:
import cv2 as cvimg = 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 cvimg = 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算法源码阅读
超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...
- julia 调用python库_Julia调用Python实现超像素分割SLIC算法
最近想要在julia中实现 Simple Linear Iterative Clustering (SLIC) 算法对图像进行超像素分割,关于SLIC超像素分割算法,请参考SLIC Superpixe ...
- 机器学习:simple linear iterative clustering (SLIC) 算法
图像分割是图像处理,计算机视觉领域里非常基础,非常重要的一个应用.今天介绍一种高效的分割算法,即 simple linear iterative clustering (SLIC) 算法,顾名思义,这 ...
- 实现SLIC算法生成像素画
前言 像素风最早出现在8bit的电子游戏中,受制于电脑内存大小以及显示色彩单一, 只能使用少量像素来呈现内容,却成就了不少经典的像素游戏.随着内存容量与屏幕分辨率的提升,内存与显示媒介的限制不再是问题 ...
- SLIC算法介绍与Python实现
SLIC(simple linear iterative clustering)算法介绍与Python实现 本文转载自:https://blog.csdn.net/shinian1987/articl ...
- 教你用OpenCV实现机器学习最简单的k-NN算法
前言:OpenCV 的构建是为了提供计算机视觉的通用基础接口,现在已经成为经典和最优秀的计算机视觉和机器学习的综合算法工具集.作为一个开源项目,研究者.商业用户和政府部门都可以轻松利用和修改现成的代码 ...
- 图像处理之简单脸谱检测算法
from: http://blog.csdn.net/jia20003/article/details/7596443 图像处理之简单脸谱检测算法(Simple Face Detection Algo ...
- TP5 实现基于标签简单的推荐算法
1.算法思想 1.1.理解算法过程 我们在写算法的时候要先理解我们的对象和之间的关系,我这里举例供求信息和用户设置标签,两者关系是,系统会根据用户设置的标签来匹配与其相似度较高的,同时用户发布的供求信 ...
- 通讯录排序 (20分)_算法入门篇:简单的排序算法
作者:dorseyCh来源:http://www.imooc.com/article/264180 很久之前有过一次面试,被问到一个问题,能不能写一个冒泡排序?说实话,尽管在这之前曾经写过不少比这个更 ...
最新文章
- 了解下Lua 环境安装
- 布局类型java_java – 我们可以为所有屏幕大小制作一种布局类型
- NHibernate学习系列一
- 云效故障定位研究论文被ICSE 2021 SEIP track收录
- php cbd架构,CBD模式
- 前端学习(1734):前端系列javascript之添加动画
- 数据标准化处理方法_机器学习系列-数据预处理-数据标准化(归一化)-理论
- python为什么用class_python为什么会有@classmethod?
- gets函数用不了_函数篇:指数函数
- Jquery瀑布流插件
- 在线安装Eclipse插件时,出现错误
- 图书管理系统需求分析
- 机器学习(周志华) 第五章神经网络
- ios免越狱脚本实现方案
- c语言 源文件未编译,源文件未编译什么意思
- 如何计算机网络打印机,如何共享网络打印机 共享网络打印机教程详解
- GitHub Star 13.9k,顶级项目全新开源表格识别算法
- 百度连续四年亮相全球量子信息处理顶会QIP 宣布量子战略规划升级
- 【焊接】 焊接技巧
- 计算机管理guest用户在哪,电脑来宾账户权限设置怎么设置
热门文章
- python 显示 “SyntaxWarning: “is“ with a literal. Did you mean “==“?” 警告
- 你看过的知识最多、含金量最好、质量最棒的书是什么?
- Gridview 换行
- 我的第一篇博客“遇见未来的自己”
- [遥感]利用python爬虫获取美国冰雪数据中心的数据
- 网口数据采集卡+光纤传输来实现信号的远距离采集和监测传输
- mouseover事件
- MLOps极致细节:16. Azure ML Pipeline(机器学习管道),Azure Compute Instance搭建与使用
- CPU不得不知的秘密
- 一款基于flask框架的音乐网站