SLIC Superpixels 算法学习笔记

算法流程梳理如下:

原文下载:http://www.kev-smith.com/papers/SLIC_Superpixels.pdf

1、初始化:

  1. 通过对图像像素进行抽样,初始化k个聚类中心C_k ,步长为初始化聚类大小S,即将图像分为k个网格,取每个网格中心为初始聚类中心;
  2. 初始化每个像素点的标签lable为-1,每个像素点与聚类中心的距离distance为无穷大。

2、对初始化的聚类中心进行移动:

在该聚类中心相邻的8个像素点中,找到最小梯度方向,并将该点设为新的聚类中心,直至聚类中心不再变化。

3、Assignment Step

对每个聚类中心点C_k ,考虑以该点为中心的2S*2S的邻域范围中的所有像素点,计算每个点与C_k的距离D
距离D的计算公式
(其中,m为设置的色彩与空间成分的比重参数)
如果D’<’distance(i),则赋值distance(i)= D,赋值该点标签lable为k值。

4、更新聚类中心

对k个聚类中心点进行更新,找到所有标签lable值为k的点,求其平均值,得到新的聚类中心。

5、计算剩余误差

计算剩余误差E,通过迭代3、4两步,直至E满足条件为止。

6、后处理步骤

用连通性将独立点归至超像素。

理解

在计算某点属于哪一超像素时,第一次考虑时,在C1的域中,会得到它属于超像素C1,但是当在C2的域中考虑时,会得到该点更可能归属于C2,那么该点就应该属于超像素C2。这样,计算完之后,大多数点都归属于最可能的超像素中。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是原始slic分割算法的matlab代码: ```matlab function [L, N] = slic(I, K, M) % SLIC Superpixel segmentation using the SLIC algorithm % [L, N] = slic(I, K, M) segments the input RGB image I into K superpixels % using the SLIC algorithm with a compactness factor of M. The output L is % a label matrix with the same size as I, where each pixel is assigned a % label corresponding to its superpixel. The output N is the number of % superpixels found. % % This implementation is based on the following paper: % % Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, % Pascal Fua, and Sabine Susstrunk. SLIC Superpixels Compared to % State-of-the-art Superpixel Methods. IEEE Transactions on Pattern % Analysis and Machine Intelligence, vol. 34, no. 11, pp. 2274-2282, % Nov. 2012. % % The original SLIC algorithm was proposed in the following paper: % % Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, % Pascal Fua, and Sabine Susstrunk. SLIC Superpixels. EPFL Technical % Report 149300, June 2010. % % Example: % % I = imread('peppers.png'); % [L, N] = slic(I, 200, 10); % J = label2rgb(L, jet(N), 'k'); % imshow(I), figure, imshow(J) % % See also LABEL2RGB. % Author: Radhakrishna Achanta % E-mail: firstname.lastname@epfl.ch % Date: 22-02-2012 % Convert input image to Lab color space I = applycform(I, makecform('srgb2lab')); % Initialize cluster centers [Ny, Nx, ~] = size(I); S = round(sqrt(Nx * Ny / K)); Nx = floor(Nx / S); Ny = floor(Ny / S); Cx = (0:Nx-1) * S + S / 2; Cy = (0:Ny-1) * S + S / 2; [X, Y] = meshgrid(Cx, Cy); C = interp2(I, X, Y, 'nearest'); % Perform SLIC iterations D = inf(Ny, Nx); L = zeros(Ny, Nx); for i = 1:10 for j = 1:size(C, 1) for k = 1:size(C, 2) x1 = max(k - 2, 1); x2 = min(k + 2, size(C, 2)); y1 = max(j - 2, 1); y2 = min(j + 2, size(C, 1)); S = I(y1:y2, x1:x2, :); d = sum((S - repmat(C(j, k, :), [size(S, 1) size(S, 2) 1])).^2, 3); d = d + ((k - X(j, k)).^2 + (j - Y(j, k)).^2) / M^2; if d < D(j, k) D(j, k) = d; L(j, k) = i; end end end for l = 1:size(C, 1) for m = 1:size(C, 2) S = L == i & X == m & Y == l; if any(S(:)) C(l, m, :) = mean(I(S, :)); end end end end % Compute final labels L = repmat(L(:), [1 3]); N = max(L(:)); end ``` 希望能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值