精华内容
下载资源
问答
  • 完整的 notebook 请看这里:slic-adj​data.kaizhao.net最近有个 idea 想以超像素为单位做一些 graph 的操作,需要输入 SLIC 分割之后的邻接矩阵。这本来应该挺简单的,但是 scipy 系列的文档实在是太分散了,查了好...

    c629e6680edb78e4877395e0409a814e.png

    完整的 notebook 请看这里:

    slic-adjdata.kaizhao.net
    fdb82898caedca8fa2c759b577dc55d0.png

    最近有个 idea 想以超像素为单位做一些 graph 的操作,需要输入 SLIC 分割之后的邻接矩阵。

    这本来应该挺简单的,但是 scipy 系列的文档实在是太分散了,查了好几个 package 的文档才找到,这里 mark 一下。

    需求是“计算 slic 分割中超像素之间的邻接矩阵”。

    不多说,上代码:

    import numpy as np
    from skimage.io import imread
    from skimage import segmentation
    from skimage.util import img_as_float
    from skimage.future import graph
    from networkx.linalg import adj_matrix
    import matplotlib
    %matplotlib inline
    import matplotlib.pyplot as plt
    
    img = imread("dog.jpg")
    img = img_as_float(img)
    # SLIC 分割
    labels = segmentation.slic(img, compactness=30, n_segments=400)
    # labels 转 graph
    g = graph.RAG(labels)
    # 算邻接矩阵
    adj = adj_matrix(g).todense()
    
    img_with_boundaries = segmentation.mark_boundaries(img, labels, color=[1,0,0])
    plt.imshow(img_with_boundaries)

    3fbb0373d70397f1388ea9d634f9e04f.png
    SLIC 分割结果

    是输入图片,
    是 SLIC 分割后的结果。每个 label 值对应分割中的一块区域,每块分割区域内的label值相同:
    fig,axes = plt.subplots(2,4,figsize=(8,4))
    for idx, ax in enumerate(axes.flatten()):
        ax.set_xticks([])
        ax.set_yticks([])
        ax.set_title("labels=%d"%(idx*40))
        ax.imshow(labels==(idx*40),cmap=cm.Greys_r)
    plt.tight_layout(pad=0)

    687ffbd76e921ae87b8aea8499aa6552.png

    最后算出的邻接矩阵 adj 为

    的矩阵(这里一共分割成了 390 个区域),

    adj[i,j]=1 表示区域 i 和区域 j 相邻:

    fig,axes = plt.subplots(2,2,figsize=(4,4))
    for idx, ax in enumerate(axes.flatten()):
        ax.set_xticks([])
        ax.set_yticks([])
    axes[0,0].imshow(np.logical_or(labels==25, labels==23), cmap=cm.Greys_r)
    axes[0,0].set_title("adj[%d,%d]=%d"%(25,23,adj[25,23]))
    
    axes[0,1].imshow(np.logical_or(labels==151, labels==128), cmap=cm.Greys_r)
    axes[0,1].set_title("adj[%d,%d]=%d"%(151,128,adj[151,128]))
    
    axes[1,0].imshow(np.logical_or(labels==251, labels==350), cmap=cm.Greys_r)
    axes[1,0].set_title("adj[%d,%d]=%d"%(251,350,adj[251,350]))
    
    axes[1,1].imshow(np.logical_or(labels==388, labels==373), cmap=cm.Greys_r)
    axes[1,1].set_title("adj[%d,%d]=%d"%(388,373,adj[388,373]))

    ff6cd1100106c11ae69a5928d3326238.png

    完整的 notebook 请看这里:http://data.kaizhao.net/notebooks/slic-adj.html

    展开全文
  • 概念理解超像素利用像素之间某些特征的相似性将像素分组(每个子区域内部之间某个特征具有很强的一致性),用少量的超像素代替大量的像素来表达图片特征,即我们把图像分割成很多小块,把这一整个块当成一个像素来处.....

    今天在读一篇Human parsing的论文时,读到了related works部分,本来像粗略地看一遍了解一下概况,快速地结束,但是,遇到了之前曾经留意过但是没有细究的问题,即superpixel。

    7388d4dd01a6137971837295283de30f.png

    概念理解

    超像素利用像素之间某些特征的相似性将像素分组(每个子区域内部之间某个特征具有很强的一致性),用少量的超像素代替大量的像素来表达图片特征,即我们把图像分割成很多小块,把这一整个块当成一个像素来处理,每一小块就是超像素,例如,每个子区域的灰度差不多。

    原理

    超像素是一种图像分割技术,可以将具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块

    好处

    • 很大程度上降低了图像后处理的复杂度,比如数据点数减少,或者这一块有图像语义,利于后续其他应用,所以通常作为分割算法的预处理步骤。
    • 超像素相对于像素可以去除冗余信息,提高运算速度,在显著性检测里可以作为预处理的一个常用手段,可以在尽量保存边缘信息的同时大幅提高运算效率,但同时会造成saliency map的边缘不连续的问题。

    超像素分割效果图

    a00170c1970a2c7e1a716237c96651f9.png
    展开全文
  • 问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发支持在计算机视觉中,图像分割是个非常重要且基础的研究方向。简单来说,图像分割...图像分割中的一些常见的术语有:superpixels(超像素)、Semantic...

    点击上方↑↑↑OpenCV学堂”关注我

    关注可学习更多的计算机视觉内容。问题或建议,请公众号留言;如果你觉得文章对你有帮助,欢迎转发支持

    在计算机视觉中,图像分割是个非常重要且基础的研究方向。简单来说,图像分割(image segmentation)就是根据某些规则把图片中的像素分成不同的部分(加不同的标签)。

    图像分割中的一些常见的术语有:superpixels(超像素)、Semantic Segmentation(语义分割)、Instance Segmentation(实例分割)、Panoptic Segmentation(全景分割)。他们之间到底有什么区别呢?如果你对这几个术语非常了解了,那么恭喜你!可以直接把文章拖到结尾,顺手点个广告,就可以返回了(笑)。

    不过很多刚接触这个领域的同学有点搞不太清楚上面的区别,那么跟我一起来学习一下吧!

    superpixels(超像素)

    第一次听说这个超像素很容易理解错误,以为是在普通的像素基础上继续像微观细分,如果这样理解就恰好理解反了,其实超像素是一系列像素的集合,这些像素具有类似的颜色、纹理等特征,距离也比较近。用超像素对一张图片进行分割的结果见下图,其中每个白色线条区域内的像素集合就是一个超像素。需要注意的是,超像素很可能把同一个物体的不同部分分成多个超像素。

    be362d2ba99f43f0e6fdc4b105b62981.gif

    超像素最早的定义来自2003年 Xiaofeng Ren等人的一篇论文《Learning a Classification Model for Segmentation》。

    其中超像素中比较常用的一种方法是SLIC(simple linear iterative clustering),是Achanta 等人2010年提出的一种思想简单、实现方便的算法,将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SLIC算法能生成紧凑、近似均匀的超像素,在运算速度,物体轮廓保持、超像素形状方面具有较高的综合评价,比较符合人们期望的分割效果。

    6081c698afa061f7b46703561592bc96.png

    Semantic Segmentation(语义分割)

    语义分割还是比较常见的,就是把图像中每个像素赋予一个类别标签(比如汽车、建筑、地面、天空等),比如下图就把图像分为了草地(浅绿)、人(红色)、树木(深绿)、天空(蓝色)等标签,用不同的颜色来表示。

    不过这种分割方式存在一些问题,比如如果一个像素被标记为红色,那就代表这个像素所在的位置是一个人,但是如果有两个都是红色的像素,这种方式无法判断它们是属于同一个人还是不同的人。也就是说语义分割只能判断类别,无法区分个体。

    0ea963d4322cee259d50462df0291aeb.png

    但很多时候我们更需要个体信息,想要区分出个体怎么办呢?继续往下看吧

    Instance Segmentation(实例分割)

    实例分割方式有点类似于物体检测,不过物体检测一般输出的是 bounding box,实例分割输出的是一个mask。

    实例分割和上面的语义分割也不同,它不需要对每个像素进行标记,它只需要找到感兴趣物体的边缘轮廓就行,比如下图中的人就是感兴趣的物体。该图的分割方法采用了一种称为Mask R-CNN的方法。我们可以看到每个人都是不同的颜色的轮廓,因此我们可以区分出单个个体。

    22373ca172677b5849386dd3d5b9f517.png

    Panoptic Segmentation(全景分割)

    最后说说全景分割,它是语义分割和实例分割的结合。如下图所示,每个像素都被分为一类,如果一种类别里有多个实例,会用不同的颜色进行区分,我们可以知道哪个像素属于哪个类中的哪个实例。比如下图中黄色和红色都属于人这一个类别里,但是分别属于不同的实例(人),因此我们可以通过mask的颜色很容易分辨出不同的实例。

    0d7b427fd8fcfbf149ca1b8b67a608c2.png

    现在是不是对这几个术语了然于胸了呢!

    b929b17a7318ab982dc9add279ccdb76.png

    展开全文
  • 代码链接:交通标志牌检测 限速标志 matlab2.实现步骤2. 1 CLAHE增强图像局部对比度 观察图片可以看出,有些图片的局部亮度过大(test18),或者局部较暗(test16),在进行ostu阈值分割时与背景融合在一起,所以进行...

    bad3492bb019ed9f9b260ab6cc6cbf25.png

    1.设计总目标

    能够识别出不同场景环境下图片中的交通限速标志,将限速标志及其里面的数字分别标志出来,具有较强的鲁棒性。

    02c90343353c8b71957d546b54f85aea.png

    代码链接:交通标志牌检测 限速标志 matlab

    2.实现步骤

    5d48a8e830aa7b9c868c09a9e8437dba.png

    2. 1 CLAHE增强图像局部对比度

    观察图片可以看出,有些图片的局部亮度过大(test18),或者局部较暗(test16),在进行ostu阈值分割时与背景融合在一起,所以进行对比度的增强。

      直方图均衡经典算法对整幅图像的像素使用相同的变换,对于像素值分布比较均衡的图像来说,经典算法的效果不错。但是如果图像中包括明显亮的或者暗的区域,在这些部分的对比度并不能得到增强。AHE算法通过对局部区域的直方图均衡解决该问题。由于AHE算法存在放大噪声等问题,CLAHE在局部直方图均衡化(又称自适应直方图均衡化AHE)的基础上,对每个子块直方图做了限制,很好的控制了AHE带来的噪声。

      使用CLAHE增强图像局部对比度,再进行ostu阈值分割。

    figure,
    subplot(1,2,1),imshow(Image);title('原图');
    if length(size(Image))>2 %判断图像的通道数是否大于2 
        rimg = Image(:,:,1);  %r分量
        gimg = Image(:,:,2);  %g分量
        bimg = Image(:,:,3);  %b分量
        resultr = adapthisteq(rimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original');  %使用CLAHE增强图像的局部对比度
        resultg = adapthisteq(gimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original');  %使用CLAHE增强图像的局部对比度
        resultb = adapthisteq(bimg,'NumTiles', [35 35], 'ClipLimit', 0.015,'Range','original');  %使用CLAHE增强图像的局部对比度
        result = cat(3, resultr, resultg, resultb); %处理后的CLAHE图像
        subplot(1,2,2),imshow(result);title('CLAHE处理后');
    end
    grayImg=rgb2gray(Image);%原图转换为灰度图片
    grayResult=rgb2gray(result);%CLAHE处理后的rgb图片转换为灰度图片
    grayImg= imadjust(grayImg,[0,1],[1,0]);%反色
    grayResult= imadjust(grayResult,[0,1],[1,0]);%反色
    %对原始图像进行ostu阈值分割
    levelOrignal=graythresh(grayImg);%阈值
    bwOrignal=im2bw(grayImg,levelOrignal);%二值化
    [imgW,imgH] = size(bwOrignal);
    %figure,imshow(bwOrignal),title('orginalbw')
     
    %CLAHE处理后的图像进行ostu阈值分割
    levelResult=graythresh(grayResult);%阈值
    bwResult=im2bw(grayResult,levelResult);%二值化
    %figure,imshow(bwResult),title('enhancebw')
     
    bwFinal=bwOrignal|bwResult;%将原始的二值图像与CLAHE二值图像相或
    %figure,imshow(bwFinal),title('final')
    

    6bd297337958682830434802f1ae8078.png

    2.2 基于HSV颜色空间的图片分割

      在RGB图像中,由于每一个像素点由R,G,B三个分量组成,每一个分量的变化都能直接导致彩色图像中该像素点颜色的变化,并且两种颜色的视觉差异不能采用该颜色空间中两个颜色点之间的距离来表示。而在不同的光照条件下,所表示的色彩不大相同。受光照变化影响很大。而在HSV模型,H表示色调,S表示饱和度,V表示数值(对应图像亮度),V分量与图像的彩色信息无关,可以将亮度信息和色度信息从图像中分离开,并且能够独立的表示,受光照影响较小,因此,本次作业中选取的基于HSV彩色模型对图片进行分割。

      通过查阅资料以及实验对比得出相应的hsv取值范围

    ((h1<=0.056&h1>=0)|(h1>=0.740&h1<=1.0))&s1>=0.169&s1<=1.0&v1>=0.180&v1<=1.0;

    %%%%%%%%%%%  HSV颜色分割图像  %%%%%%%%%%%%%%%%%%%%%%%%%
    hsvImg=rgb2hsv(Image);%转换到HSV空间
    h1=hsvImg(:,:,1);%H分量
    s1=hsvImg(:,:,2);%S分量
    v1=hsvImg(:,:,3);%V分量
    %提取红色分量   
    hsvReg1=((h1<=0.056&h1>=0)|(h1>=0.740&h1<=1.0))&s1>=0.169&s1<=1.0&v1>=0.180&v1<=1.0;
    figure,imshow(hsvReg1);title('原图hsv检测图像');
    

    f2eff97a066984c7cd9a2039db455610.png

    2.3. 基于圆度的图片分割

    利用HSV颜色空间分割的图片含有较多背景红色的冗余部分,利用交通标志牌的圆形形状特征再次进行分割。本次作业中采用计算闭合连通区域的圆形度进行形状的判别。对于圆形度小于0.77的图像区域进行排除。

    e8f26687aa54254fb4004ab364229b9f.png

    2.4. 区分限速标志

    通过上面两个步骤基本上分割出来感兴趣的圆形区域。通过观察限速标志和类似的标志图片,可以看出,禁止标志通常有一条斜线贯穿整个圆形,对其二值化处理后,整体作为一个连通区域,限速标志牌至少含有两个连通区域。结合限速标志牌中数字的长宽比以及占据整个圆形区域的面积比可以区别其它交通标志。

      将处理后的感兴趣图像区域中的连通域的面积进行由大到小的排序,由大的连通域开始进行循环,根据大的连通域的范围进行判别其中是否包含其它的连通域,如果不包含则表示不是限速标志区域,若包含,计算该连通区域的长宽比以及相应的占据大的连通域的面积比例,如果符合则标志出数字区域,并且标注出包含其大的圆形区域,并标记该数字连通区域已经使用过。

      由于拍摄图片的视角问题,所以设置数字连通区域的宽高比范围为0.2~1.5。占据圆形区域的比例为大于0.03。

    b863411a5b10e32a19b7149162f8c53f.png

    3.实现结果

    成功识别结果展示

    2dbc4f2bea114ac7bbd2c9e63942a5ae.png

    89168f2b0506ce119fa6f57fd23d98ae.png

    df6a95f14c4a115170c69d33a3ff6206.png

    未成功识别结果展示

    aa93f44a0e03fe9e47f193fa66ad22b0.png
    展开全文
  • ​图像分辨率是指由一幅低分辨率图像或图像序列恢复出高分辨率图像。图像分辨率技术分为分辨率复原和超分辨率重建。一位 Reddit 网友贴出了自己基于 Keras 的图像分辨率项目,可以让照片放大后依然清晰。该...
  • 超像素分割算法SLIC的matlab实现

    千次阅读 多人点赞 2020-08-20 16:59:05
    SLIC是一种基于网格化KMeans聚类的超像素分割算法,其计算复杂度为O(N),其中N为像素点个数。SLIC的原理比较简单精致,具体的原理我这里就不介绍了,推荐大家自己去读原始论文加深理解。SLIC的算法流程如下: 如...
  • SNIC超像素分割算法

    2019-10-11 21:50:52
    超像素分割为图像分割,图像处理的基础,文件为MATLAB和C混编的代码,demo为主程序,运行demo主程序进行超像素分割
  • 超像素分割算法,亲测可用,内含数据图片,不用mex,直接matlab运行
  • 本文介绍了一种基于图论的超像素分割及其合并算法,主要在检测图像的边界,图的分割准则,超像素区域特征的提取,度量超像素区域间的相似性这几个方面进行了研究. 首先,针对图像的边界检测这一问题,本文对最...
  • 直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。 2个算法参数:邻域半径R和最少点数目minpoints 这两个算法参数实际可以刻画什么叫密集——当邻域半径R内的点的...
  • SLIC: simple linear ... 这是一个基于聚类算法超像素分割,由LAB空间以及x、y像素坐标共5维空间来计算。不仅可以分割彩色图,也可以兼容分割灰度图,它还有一个优点就是可以人为的设置需要分割的超像素的数量。
  • 直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。 2个算法参数:邻域半径R和最少点数目minpoints 这两个算法参数实际可以刻画什么叫密集——当邻域半径R内的点的...
  • matlab 超像素分割代码

    2017-09-24 21:20:18
    超像素分割代码 超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的...
  • SLIC超像素分割算法MATLAB算法代码实现,超像素分割关键代码形式
  • 不提供针对算法的学习,仅提供在matlab环境下的调用以完成SLIC超像素分割的功能。 调用格式如下: I = imread('你要读的图像路径'); [height,width,ch]=size(I); J = zeros(height,width,'uint32'); K = uint32(I); ...
  • (a)是原始图像,(b)是基于人类视角的分割图(groundtruth),(c)是超像素分割的图像,(d)是基于(c)进行分割的图像。 超像素最大的功能之一是作为图像处理其他算法的预处理,在不牺牲太
  • 超像素分割

    2014-12-14 16:18:07
    该程序代码是完整的Matlab代码,实现了超像素分割算法功能。超像素分割能将很小的区域目标准确分割,是现在研究的热点分割算法!这个程序供广大研究者参考!
  • 发现很多算法的基础是超像素分割,而正在看的Saliency Optimization from Robust Background Detection算法的预处理是SLIC算法,于是便找了SLIC算法的论文进行学习,在学习过程中也顺便翻译了论文:...
  • 发现很多算法的基础是超像素分割,而正在看的Saliency Optimization from Robust Background Detection算法的预处理是SLIC算法,于是便找了SLIC算法的论文进行学习,在学习过程中也顺便翻译了论文:...
  • SLIC方法的超像素分割

    热门讨论 2014-11-01 11:00:07
    基于SLIC方法的超像素分割算法代码,纯MATLAB编写。
  • 原图与分割结果 ...%用Superpixels算法对图像进行分割 I=imread('D:\Gray Files\lena.jpg'); %提取各颜色分量 B = double(I(:,:,3)); G = double(I(:,:,2)); R = double(I(:,:,1)); %种子点数量 nu...
  • 1. 说明 关于超像素分割的背景不在过多说明,大致作用就是将区域内相似属性的超像素集合到一起,合成一个有更多属性的块区域。其中SLIC算法应用最广泛,现在在图像处理和计算机领域有很广泛的应用。作用如图所示: ...
  • SLIC超像素算法

    千次阅读 2018-09-27 12:16:12
    原文 https://blog.csdn.net/zhj_matlab/article/details/52986700 ...最近在看显著性检测,发现很多算法的基础是超像素分割,而正在看的Saliency Optimization from Robust B...
  • 超像素经典的算法SLIC就属于上述1%的一员,他有论文的介绍原理性的东西,有数学公式的推导,有和其他算法的比较数据,更重要的是他还有和论文完全对应的参考代码,而且有C++、matlab以及GPU版本,可以说是非常有良心...
  • (a)是原始图像,(b)是基于人类视角的分割图(groundtruth),(c)是超像素分割的图像,(d)是基于(c)进行分割的图像。 超像素最大的功能之一是作为图像处理其他算法的预处理,在不牺牲太
  • 多尺度的图切超像素分割算法,基于matlab写的,效果计较好。
  • SLIC算法理解(仅为个人笔记)

    千次阅读 2019-07-23 19:14:06
    MATLAB中有超像素分割算法superpixels函数,https://ww2.mathworks.cn/help/images/ref/superpixels.html?s_tid=doc_ta#bu1_lce-4,原理就是SLIC超像素分割。 1.SLIC超像素分割论文(翻译版) ...
  • SLIC_mex.zip

    2020-04-24 20:02:10
    整个算法的输入只有一个,即超像素的个数K。 图片原有N个像素,要分割成K个像素,那么每个像素的大小是N/K。超像素之间的距离(即规则情况下超像素的边长)就是S=√N/K。 我们的目标是使代价函数(cost function)...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

超像素分割算法matlab

matlab 订阅