function blockproc_demo()
try
clc;
close all;
workspace;
fontSize = 20;
if(~isdeployed)
cd(fileparts(which(mfilename)));
end
grayImage = imread('cameraman.tif');
[rows columns numberOfColorChannels] = size(grayImage);
subplot(2, 2, 1);
imshow(grayImage, []);
caption = sprintf('Original Image\n%d by %d pixels', ...
rows, columns);
title(caption, 'FontSize', fontSize);
set(gcf, 'Position', get(0,'Screensize'));
set(gcf, 'name','Demo by ImageAnalyst', 'numbertitle','off')
windowSize = 3;
myFilterHandle = @myFilter;
blockyImage = blockproc(grayImage,[windowSize windowSize], myFilterHandle);
[rowsP columnsP numberOfColorChannelsP] = size(blockyImage);
subplot(2, 2, 2);
imshow(blockyImage, []);
caption = sprintf('Image Processed in %d by %d Blocks\n%d by %d pixels\nCustom Box Filter', ...
windowSize, windowSize, rowsP, columnsP);
title(caption, 'FontSize', fontSize);
windowSize = 8;
myFilterHandle2 = @(block_struct) ...
std2(block_struct.data) * ones(size(block_struct.data));
blockyImageSD = blockproc(grayImage, [windowSize windowSize], myFilterHandle2);
[rowsSD columnsSD numberOfColorChannelsSD] = size(blockyImageSD);
subplot(2, 2, 4);
imshow(blockyImageSD, []);
caption = sprintf('Image Processed in %d by %d Blocks\n%d by %d pixels\nAnonymous Standard Deviation Filter', ...
windowSize, windowSize, rowsSD, columnsSD);
title(caption, 'FontSize', fontSize);
uiwait(msgbox('Done with demo'));
catch ME
errorMessage = sprintf('Error in blockproc_demo():\n\nError Message:\n%s', ME.message);
uiwait(warndlg(errorMessage));
end
return;
function singleValue = myFilter(blockStruct)
try
singleValue = 0;
kernel = [0 0.2 0; 0.2 0.2 0.2; 0 0.2 0];
if any(blockStruct.blockSize ~= size(kernel))
return;
end
array3x3 = blockStruct.data;
singleValue = sum(sum(double(array3x3) .* kernel));
catch ME
errorMessage = sprintf('Error in myFilter():\n\nError Message:\n%s', ME.message);
fprintf(1, '%s\n', errorMessage);
end
return;