Code covered by the BSD License  

Highlights from
Stereo testbed v0.1

image thumbnail
from Stereo testbed v0.1 by Raul Correal
Testbed for analysis, evaluation and comparison of stereo matching algorithm.

clusteringFilter(image, filter, num, connectivity)
%  
% Author: Raul Correal
% Date: Sept 2011
% (raulcorreal@hotmail.com)
%
% Filter disparities based on spatial continuity clusters
%
% Input:
% - image: original image path
% - filter: could be:
%     - 0: filter out all but the largets cluster
%     - 1: filter out the largets cluster
%     - 2: filter out clusters with less than "num" pixels
%     - 3: filter out the "num" smallest clusters
% - num: number of pixels to be uses with selected filter
%
% Output
% - filteredImage: filtered image
%

function [clusters filteredImage] = clusteringFilter(image, filter, num, connectivity)


image = uint8(image);

CC = bwconncomp(image, connectivity);

fprintf('%d clusters found!\n', CC(1).NumObjects);

numPixels = cellfun(@numel,CC.PixelIdxList);

clusters = zeros(size(image,1), size(image,2));

%S = regionprops(CC,'Centroid');

for i = 1:size(numPixels,2)
    fprintf('cluster %d: %d pixels\n', i, numPixels(i));
    clusters(CC.PixelIdxList{i}) = i;
end

%figure;imagesc(A);impixelinfo;

filteredImage = image;
filtered = 0;

if filter == 0
    
    %filter out all but the largets cluster
    [biggest,idx] = max(numPixels);

    %fprintf('Largest cluster: %d, with %d pixels\n', idx, biggest);

    for i = 1:size(numPixels,2)
        if i ~= idx
            filteredImage(CC.PixelIdxList{i}) = 0;
            filtered = filtered + numPixels(i);
        end
    end

elseif filter == 1
    
    %filter out the largets cluster
    [biggest,idx] = max(numPixels);

    %fprintf('Largest cluster: %d, with %d pixels\n', idx, biggest);

    filteredImage(CC.PixelIdxList{idx}) = 0;    
    filtered = filtered + numPixels(idx);
 
elseif filter == 2
    
    %filter out clusters with less than "num" pixels
    for i = 1:size(numPixels,2)
        if numPixels(i) < num
            filteredImage(CC.PixelIdxList{i}) = 0;
            filtered = filtered + numPixels(i);
        end
    end
    
elseif filter == 3
    
    %filter out the largets cluster
    for i = 1:num
        [smallest, idx] = min(numPixels);
        %fprintf('minimo cluster %d: con %d pixels\n', idx, numPixels(idx));
        
        filteredImage(CC.PixelIdxList{idx}) = 0;
        filtered = filtered + numPixels(idx);
        
        numPixels(idx) = intmax;        
    end
           
end

fprintf('%d pixels filtered out!\n', filtered);

end

Contact us