www.gusucode.com > images 案例代码 matlab源码程序 > images/ApplyMultipleFiltersToIntegralImageExample.m

    %% Apply Multiple Filters to Integral Image
% This example shows how to apply multiple box filters of varying sizes to
% an image using integral image filtering. Integral image is a useful image
% representation from which local image sums can be computed rapidly. A box
% filter can be thought of as a local weighted sum at each pixel. 
%% 
% Read an image into the workspace and display it.

% Copyright 2015 The MathWorks, Inc.

originalImage = imread('cameraman.tif');

figure
imshow(originalImage)
title('Original Image')
%%
% Define the sizes of the three box filters.
filterSizes = [7 7;11 11;15 15];
%%
% Pad the image to accommodate the size of the largest box filter. Pad each
% dimension by an amount equal to half the size of the largest filter. Note
% the use of replicate-style padding to help reduce boundary artifacts.
maxFilterSize = max(filterSizes);
padSize = (maxFilterSize - 1)/2;

paddedImage = padarray(originalImage,padSize,'replicate','both');
%%
% Compute the integral image representation of the padded image using the
% |integralImage| function and display it. The integral image is 
% monotonically non-decreasing from left to right and top to bottom. Each
% pixel represents the sum of all pixel intensities to the top and left of
% the current pixel in the image.
intImage = integralImage(paddedImage);

figure
imshow(intImage,[])
title('Integral Image Representation')
%%
% Apply three box filters of varying sizes to the integral image. The
% |integralBoxFilter| function can be used to apply a 2-D box filter to the
% integral image representation of an image.
filteredImage1 = integralBoxFilter(intImage, filterSizes(1,:));
filteredImage2 = integralBoxFilter(intImage, filterSizes(2,:));
filteredImage3 = integralBoxFilter(intImage, filterSizes(3,:));
%%
% The |integralBoxFilter| function returns only parts of the filtering that
% are computed without padding. Filtering the same integral image with
% different sized box filters results in different sized outputs. This is
% similar to the |'valid'| option in the |conv2| function.
whos filteredImage*
%%
% Because the image was padded to accommodate the largest box filter prior
% to computing the integral image, no image content is lost.
% |filteredImage1| and |filteredImage2| have additional padding that can be
% cropped.
extraPadding1 = (maxFilterSize - filterSizes(1,:))/2;
filteredImage1 = filteredImage1(1+extraPadding1(1):end-extraPadding1(1),...
    1+extraPadding1(2):end-extraPadding1(2) );

extraPadding2 = (maxFilterSize - filterSizes(2,:))/2;
filteredImage2 = filteredImage2(1+extraPadding2(1):end-extraPadding2(1),...
    1+extraPadding2(2):end-extraPadding2(2) );

figure
imshow(filteredImage1,[])
title('Image filtered with [7 7] box filter')

figure
imshow(filteredImage2,[])
title('Image filtered with [11 11] box filter')

figure
imshow(filteredImage3,[])
title('Image filtered with [15 15] box filter')