function [ nObject ] = label( filename )
%Label label and segment the image
%  [ nObject ] = label( filename )

im = imread(filename,'bmp');


[sizeY,sizeX] = size(im);
label = 1;
map = zeros(sizeY,sizeX);

for y=1:sizeY
    for x=1:sizeX
        if im(y,x)
            if (x-1) > 0 & (y-1)>0 & map(y-1,x-1)
                map(y,x) = map(y-1,x-1);
                continue;
            end
            
            if (x-1) > 0
                left = map(y,x-1);
            else
                left = 0;
            end;
            
            if (y-1) > 0
                top = map(y-1,x);
            else
                top = 0;
            end;
            
            if top == 0 & left == 0
                map(y,x) = label;
                larray(label) = label;
                label = label+1;
            elseif top == 0 & left
                map(y,x) = left;
            elseif top & left == 0
                map(y,x) = top;
            else
                map(y,x) = top;
                temp = larray(left);
                for i=1:label-1
                    if larray(i) == temp
                        larray(i) = larray(top);
                    end
                end
            end
        end
    end
end

for y=1:sizeY
    for x=1:sizeX
        if map(y,x)
            map(y,x) = larray(map(y,x));
        end
    end
end

objects = unique(larray);

for i=1:size(objects,2)
    seg = map == objects(i);
    file = sprintf('segment%d.bmp',i);
    imwrite(seg,file,'bmp');
end
