MATLAB显示slic,quickshift超像素分割结果图

首先介绍vlfeat库函数:vl_slic,vl_quickshift,vl_quckseg

vl_slic  SLIC superpixels

  • segments = vl_slic(im,regionsize,regularizer)
  • segments:每个像素值是超像素标号
  • regionsize:超像素的起始大小
  • regularizer:用于聚类时控制超像素呈现的空间规则性,值越大超像素块越规则
  • im:需要转为single类型

vl_quickshift  Quick shift image segmentation

  • [map,gaps] = vl_quickshift(im, kernelsize, maxdist)
  • [map, gaps] = vl_quickshift(I, kernelsize)
  • [map, gaps,e] = vl_quickshift(I, kernelsize, maxdist)
  • kernelsize:估计density的Parzen window的bandwidth
  • maxdist:控制所连接邻域的最大L2距离
  • map和gaps代表结果forest的trees:map每个像素表示forest的parent元素,gaps包含对应的分支长度

vl_quickseg  Produce a quickshift segmentation of a grayscale or color image

  • vl_quickseg要调用vl_quickshift
  • [iseg, labels, maps, gaps, e] = vl_quickseg (im, ratio, kernelsize, maxdist)
  • iseg:color image。每个像素被其区域平均color标记
  • labels:labeled image。标号为类别号
  • maps:pointer。指向最近的增大其density估计值的像素
  • gaps:distance。距最近的增大其density估计值的像素的距离
  • e:density的估计值
  • im:需要转换为double类型
  • kernelsize:标准差
  • maxdist:tree nodes之间的最大距离。用于cut links in the tree to 构成分割结果
  • ratio:空间一致性和颜色一致性之间的比率。ratio越小空间比重越大,空间距离在归一化之前计算。类似vl_slic参数regularizer,不过ratio越小超像素块越规则

对于vl_slic得到的segments或者labels,可以有以下两种方式显示超像素分割结果

1、以颜色标记形式显示:imagesc();

imagesc(SEGMENTS);  %Scale data and display image object
axis equal off tight; %关闭坐标
colormap gray;  %以灰度图形式显示

2、显示超像素边界:vl_grad()求梯度,“|”逻辑或——找边界

[sx,sy]=vl_grad(double(SEGMENTS), 'type', 'forward') ; %求梯度
s = find(sx | sy) ;  % or - Find logical OR
imp = im ;
imp([s s+numel(im(:,:,1)) s+2*numel(im(:,:,1))]) = 255 ;  %边界置为白色
imshow(imp);

MATLAB显示slic,quickshift超像素分割结果图_第1张图片颜色形式。MATLAB显示slic,quickshift超像素分割结果图_第2张图片边界形式。

%完整代码
im=imread('CASE1.bmp');
REGIONSIZE=25;
REGULARIZER=0.05;
[m,n,c]=size(im);
if(c==1)
    im=cat(3,im,im,im);
end
I =  vl_rgb2xyz(im);
I_single = single(I);
SEGMENTS = vl_slic(I_single, REGIONSIZE, REGULARIZER);
imagesc(SEGMENTS);
axis equal off tight;
colormap gray;
[sx,sy]=vl_grad(double(SEGMENTS), 'type', 'forward') ;
s = find(sx | sy) ;
imp = im ;
imp([s s+numel(im(:,:,1)) s+2*numel(im(:,:,1))]) = 255 ;
figure;imshow(imp);

 

你可能感兴趣的:(Matlab,图像处理)