Different results for seperable filtering v/s direct filtering on 2-D image in MATLAB 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
Turns out that when doing filtering by columns, i.e. for the following section

for j = 1:size(I,2)
   I_seperable(:,j) = imfilter(double(I2(:,j)),g1,'circular','same','conv');
end


we need to make sure the filter is aligned along columns. Changing g1 to g1' makes the difference almost zero as seen below.

ans =

   1.9782e-11