失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > vl_Feat---vl_slic的使用

vl_Feat---vl_slic的使用

时间:2020-12-06 00:34:49

相关推荐

vl_Feat---vl_slic的使用

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

% im contains the input RGB image as a SINGLE arrayregionSize = 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:mfor j = 1:nlabel = segments(i,j);labelTop = label;if i>1labelTop = segments(i-1,j);endlabelBottom = label;if i<m-1labelBottom = segments(i+1,j);endlabelLeft = label;if j > 1 labelLeft = segments(i,j - 1);endlabelRight = label;if j < n-1 labelRight = segments(i,j + 1);endif label ~= labelTop || label ~= labelBottom || label ~= labelLeft || label ~= labelRightI(i,j,1)=0;I(i,j,2)=0;I(i,j,3)=0;endendo = I;endend

实现效果:

方法二:

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

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

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

如果觉得《vl_Feat---vl_slic的使用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。