I compared the difference between seperable and direct filtering for MATLAB's cameraman image. The difference is huge. I would like to understand the reason for this. Code below.
I = imread('cameraman.tif');
% Do seperable 1-D filtering
H = 11;
sigma = 2;
g1 = fspecial('gaussian',[1 H],sigma);
I2 = double(I);
I_seperable = double(I);
for i = 1:size(I,1)
I2(i,:) = imfilter(double(I(i,:)),g1,'circular','same','conv');
end
for j = 1:size(I,2)
I_seperable(:,j) = imfilter(double(I2(:,j)),g1,'circular','same','conv');
end
% Do direct 2-D filtering
g2 = fspecial('gaussian',[H H],sigma);
% How much do the results differ ?
I_direct = imfilter(double(I),g2,'circular','same','conv');
delta_I = double(I_direct) - double(I_seperable);
norm(delta_I,'fro')
The result of last computation
ans =
2.1879e+03