vl_Feat---vl_slic的使用

刚开始用这个函数很困惑,为什么生成的不是superpixel


% im contains the input RGB image as a SINGLE array
regionSize = 10 ;
regularizer = 10 ;
segments = vl_slic(im, regionSize, regularizer) ;

按照教程使用后得到的是一个uint32的矩阵,相同的一个数的为一个superpixel


所以需要自己编程实现这个显示过程,参照  http://davidstutz.de/running-vlfeats-slic-superpixels-using-cmake-c/  这里提供的C 代码

我写了一个Matlab 版本的函数

方法一:

function [ o ] = segment_slic( IMG )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
%IMG 为图片路径
%o 为输出图像
I =  vl_rgb2xyz(imread(IMG));
I_single = single(I);
segments = vl_slic(I_single, 30, 0.1) ;
[m n] = size(segments);
for i=1:m
    for j = 1:n
        label = segments(i,j);
        labelTop = label;
        if i>1
            labelTop = segments(i-1,j);
        end
        
        labelBottom = label;
        if i<m-1
            labelBottom = segments(i+1,j);
           
        end
        labelLeft = label;
            if j > 1 
                labelLeft = segments(i,j - 1);
            end
            
            labelRight = label;
            if j < n-1 
                labelRight = segments(i,j + 1);
            end
        if label ~= labelTop || label ~= labelBottom || label ~= labelLeft || label ~= labelRight
            I(i,j,1)=0;
            I(i,j,2)=0;
            I(i,j,3)=0;
        end
            
    end
    
    o = I;
end


end

实现效果:




方法二:

参看例子发现有更简便的方法:

求的是梯度。。。确实是好想法

function [ o ] = segment_slic( IMG ,SIZE,RATE)
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
%IMG 为图片路径
%o 为输出图像


I =  vl_rgb2xyz(imread(IMG));
II =  (imread(IMG));
im=II;

I_single = single(I);
segments = vl_slic(I_single, SIZE, RATE) ;
[sx,sy]=vl_grad(double(segments), 'type', 'forward') ;
 s = find(sx | sy) ;
 imp = II ;
 imp([s s+numel(im(:,:,1)) s+2*numel(im(:,:,1))]) = 0 ;

    o = imp;

end




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值