www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I2_09_4_5_mySuperPixel.m

    %% SLIC 僗乕僷乕僺僋僙儖傪梡偄偨僙僌儊儞僥乕僔儑儞(椞堟暘妱)
% SLIC丗simple linear iterative clustering
clc;clear;close all;imtool close all;rng('default');

%% 夋憸偺撉崬傒丒昞帵丒L*a*b*怓嬻娫傊偺曄姺
I = imread('lighthouse.png');
figure; imshow(I);
Ilab = rgb2lab(I);     % 嬒摍怓嬻娫

%% 僗乕僷乕僺僋僙儖傪梡偄彫椞堟偵暘妱
%    栚昗丗偱偒傞偩偗摨偠僒僀僘偺丄600屄偺椶帡怓椞堟偵側傞傛偆偵暘妱
[Ls, N] = superpixels(Ilab, 600, 'IsInputLab',true);     % 僨僼僅儖僩偱偼撪晹偱L*a*b*傊曄姺
N                             % N :寢壥揑偵惗惉偝傟偨僗乕僷乕僺僋僙儖悢
imtool(Ls, []);               % Ls:夋慺抣傪尒偰丄儔儀儖夋憸偵側偭偰偄傞偺傪妋擣   

%% 僗乕僷乕僺僋僙儖偺昞帵
Bmask = boundarymask(Ls);             % 儔儀儖嫬奅傪僩儗乕僗乮2抣夋憸乯
I1 = imoverlay(I, Bmask,'cyan');      % 夋憸拞偵丄2抣夋憸傪巜掕怓偱忋彂偒
figure;imshow(I1); shg;

%% 僗乕僷乕僺僋僙儖枅偵暯嬒抣傪嶼弌偟丄偦偺椞堟偺怓傪抲姺偊\帵
pixIdxList = label2idx(Ls);    % 奺儔儀儖椞堟偺峴楍僀儞僨僢僋僗傪庢摼
sz = numel(Ls);                % 夋慺悢
for  i = 1:N    % 奺僗乕僷乕僺僋僙儖枅偵寁嶼
  superLab(i,1) = mean(Ilab(pixIdxList{i}      ));  % L*惉暘暯嬒抣
  superLab(i,2) = mean(Ilab(pixIdxList{i}+   sz));  % a*惉暘暯嬒抣
  superLab(i,3) = mean(Ilab(pixIdxList{i}+ 2*sz));  % b*惉暘暯嬒抣
end
I2 = label2rgb(Ls, lab2rgb(superLab));
figure; imshowpair(I, imoverlay(I2, boundarymask(Ls),'cyan'), 'montage'); truesize;

%% K-means偱偝傜偵丄怓偺椶帡搙傪梡偄僋儔僗僞儕儞僌
numColors = 3;  % 3偮偵暘椶
Lc = imsegkmeans(I2,numColors,'NormalizeInput',false);
I3  = label2rgb(Lc); % 儔儀儖夋憸傪RGB夋憸偵曄姺
% 夋憸拞偵丄2抣夋憸傪巜掕怓偱忋彂偒
imshow(I3); shg;

%% 摂戜晹暘傪拪弌
% 夋憸抂偵愙偟偰偄傞椞堟傪彍嫀乮儔儀儖枅偵張棟乯
Lm = imclearborder(Lc==1);
for i = 2:numColors
  Lm = [Lm imclearborder(Lc==i)];
end
% 柺愊偺戝偒偄忋埵2偮偺椞堟傪拪弌
maskA  = bwareafilt(Lm, 2);
% 儅僗僋偺惗惉媺蕚虝\帵
maskA1 = reshape(maskA, [size(Ls), numColors]);
maskA2 = sum(maskA1, 3);
maskA3 = imfill(maskA2, 'holes');       % 儅僗僋偺寠傪杽傔傞
Iout = imoverlay(I, ~maskA3, 'green');
figure; imshow(Iout);                   % 昞帵

%% Copyright 2018 The MathWorks, Inc.