--- a +++ b/libraries/lib_FastCMeans/LUT2label.m @@ -0,0 +1,49 @@ +function L=LUT2label(im,LUT) +% Create a label image using a look-up-table (LUT) obtained from clustering +% of image intensities using either 'FastFCMeans' or 'FastCMeans' functions. +% +% INPUT: +% - im : N-dimensional grayscale image in integer format. +% - LUT : L-by-1 array that specifies the intensity-class relations, +% where L is the dynamic intensity range of the input image. +% Specifically, LUT(1) corresponds to the label assigned to +% min(im(:)) and LUT(L) corresponds to the label assigned +% to max(im(:)). +% +% OUTPUT: +% - L : label image of the same size as the input image. +% +% AUTHOR : Anton Semechko (a.semechko@gmail.com) +% + + +% Check image format +if isempty(strfind(class(im),'int')) + error('Input image must be specified in integer format (e.g. uint8, int16)') +end + +% Intensity range +Imin=min(im(:)); +Imax=max(im(:)); +I=Imin:Imax; + +% Create label image +L=zeros(size(im),'uint8'); +idx=unique(LUT); +for k=1:numel(idx) + + % Intensity range for k-th class + i=find(LUT==idx(k)); + i1=i(1); + if numel(i)>1 + i2=i(end); + else + i2=i1; + end + + % Map the intensities in the range [I(i1),I(i2)] to class k + bw=im>=I(i1) & im<=I(i2); + L(bw)=idx(k); + +end +