/usr/share/octave/site/m/vlfeat/toolbox/quickshift/vl_quickseg.m is in octave-vlfeat 0.9.17+dfsg0-6+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | function [Iseg labels map gaps E] = vl_quickseg(I, ratio, kernelsize, maxdist)
% VL_QUICKSEG Produce a quickshift segmentation of a grayscale or color image
% [ISEG LABELS MAPS GAPS E] = VL_QUICKSEG(I, RATIO, KERNELSIZE, MAXDIST)
%
% Produces a Quickshift segmentation of an image. See VL_QUICKSHIFT for more
% details.
%
% Inputs:
% I Input image, may be RGB or Grayscale. RGB images are first
% converted to LAB.
% RATIO Tradeoff between spatial consistency and color consistency.
% Small ratio gives more importance to the spatial component.
% Note that distance calculations happen in unnormalized image
% coordinates, so RATIO should be adjusted to compensate for
% larger images.
% KERNELSIZE The standard deviation of the parzen window density estimator.
% MAXDIST The maximum distance between nodes in the quickshift tree. Used
% to cut links in the tree to form the segmentation.
%
% Outputs:
% ISEG A color image where each pixel is labeled by the mean color in its
% region.
% LABELS A labeled image where the number corresponds to the cluster identity
% MAP MAP as returned by VL_QUICKSHIFT: For each pixel, the pointer to the
% nearest pixel which increases the estimate of the density
% GAPS GAPS as returned by VL_QUICKSHIFT: For each pixel, the distance to
% the nearest pixel which increases the estimate of the density
% E E as returned by VL_QUICKSHIFT: The estimate of the density
%
% See also: VL_HELP().
% Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).
I = im2double(I);
% Add less than one pixel noise to break ties caused by constant regions in an
% arbitrary fashon
I = I + rand(size(I))/2550;
if size(I,3) == 1
Ix = ratio * I;
else
Ix = ratio * vl_xyz2lab(vl_rgb2xyz(I));
%Ix = Ix(:,:,2:3); % Throw away L
end
% Perform quickshift to obtain the segmentation tree, which is already cut by
% maxdist. If a pixel has no nearest neighbor which increases the density, its
% parent in the tree is itself, and gaps is inf.
[map,gaps,E] = vl_quickshift(Ix, kernelsize, maxdist) ;
% Follow the parents of the tree until we have reached the root nodes
% mapped: a labeled segmentation where the labels are the indicies of the modes
% in the original image.
% labels: mapped after having been renumbered 1:nclusters and reshaped into a
% vector
[mapped labels] = vl_flatmap(map) ;
labels = reshape(labels, size(map));
% imseg builds an average description of the region by color
Iseg = vl_imseg(I, labels);
|