image filter test

rgb = imread('test3.png');
g = int32(rgb2gray(rgb));
showMatrix(g);
  0  23  46  69  93 116 139 162 186 209 232 
  0  23  46  69  93 116 139 162 186 209 232 
  0  23  49 155 225 229 191 165 186 209 232 
  0  23 145 232 232 232 232 201 186 209 232 
  0  23 223 232 232 232 232 230 186 209 232 
  0  23 223 232 232 232 232 230 186 209 232 
  0  23 145 232 232 232 232 201 186 209 232 
  0  23  49 155 225 229 191 165 186 209 232 
  0  23  46  69  93 116 139 162 186 209 232 
  0  23  46  69  93 116 139 162 186 209 232 
  0  23  46  69  93 116 139 162 186 209 232 

mask = zeros(5);
mask(2,4)=1;
display('mask')
showMatrix(mask)
gf = imfilter(g,mask,'replicate');
showMatrix(gf);

disp('difference from Java program');
rgb = imread('out1.png');
g1 = int32(rgb2gray(rgb));
fprintf('max difference: %d\n',max(max(gf-g1)));
mask

  0   0   0   0   0 
  0   0   0   1   0 
  0   0   0   0   0 
  0   0   0   0   0 
  0   0   0   0   0 


 23  46  69  93 116 139 162 186 209 232 232 
 23  46  69  93 116 139 162 186 209 232 232 
 23  46  69  93 116 139 162 186 209 232 232 
 23  49 155 225 229 191 165 186 209 232 232 
 23 145 232 232 232 232 201 186 209 232 232 
 23 223 232 232 232 232 230 186 209 232 232 
 23 223 232 232 232 232 230 186 209 232 232 
 23 145 232 232 232 232 201 186 209 232 232 
 23  49 155 225 229 191 165 186 209 232 232 
 23  46  69  93 116 139 162 186 209 232 232 
 23  46  69  93 116 139 162 186 209 232 232 

difference from Java program
max difference: 0
mask = [1 2 1; 2 4 2; 1 2 1];
scl = sum(sum(mask));
fprintf('scale %g\n\n',scl);
display('mask');
showMatrix(mask);
gf = imfilter(g,mask,'replicate');
scl = int32(scl);
gf2 = (gf-mod(gf,scl))/scl;
showMatrix(gf2);

rgb = imread('out2.png');
g2 = int32(rgb2gray(rgb));
disp('difference from Java program');

%showMatrix(gf2-g2);
fprintf('max difference: %d\n',max(max(gf2-g2)));
scale 16

mask

  1   2   1 
  2   4   2 
  1   2   1 


  5  23  46  69  92 116 139 162 185 209 226 
  5  23  51  88 121 141 152 165 185 209 226 
  5  29  80 142 185 196 187 180 188 209 226 
  5  46 129 199 226 228 218 201 195 209 226 
  5  62 165 224 232 232 229 215 200 209 226 
  5  62 165 224 232 232 229 215 200 209 226 
  5  46 129 199 226 228 218 201 195 209 226 
  5  29  80 142 185 196 187 180 188 209 226 
  5  23  51  88 121 141 152 165 185 209 226 
  5  23  46  69  92 116 139 162 185 209 226 
  5  23  46  69  92 116 139 162 185 209 226 

difference from Java program
max difference: 0
mask = [ -1 0 1; -2 0 2; -1 0 1];
scl = sum(sum(abs(mask)));
fprintf('scale %g\n\n',scl);
display('mask');
showMatrix(mask);
gf = imfilter(g,mask/scl,'replicate');

gf3 = (gf+256)/2;
showMatrix(gf3);

floor(([-255 255] + 256)/2)

rgb = imread('out3.png');
g3 = int32(rgb2gray(rgb));
disp('difference from Java program');

showMatrix(gf3-g3);
fprintf('max difference: %d\n',max(max(gf3-g3)));
scale 8

mask

 -1   0   1 
 -2   0   2 
 -1   0   1 


134 140 140 140 140 140 140 140 140 140 134 
134 140 145 148 142 135 133 137 140 140 134 
134 146 161 159 140 127 121 128 137 140 134 
134 163 176 151 133 126 120 119 131 140 134 
134 179 181 135 128 128 126 117 125 140 134 
134 179 181 135 128 128 126 117 125 140 134 
134 163 176 151 133 126 120 119 131 140 134 
134 146 161 159 140 127 121 128 137 140 134 
134 140 145 148 142 135 133 137 140 140 134 
134 140 140 140 140 140 140 140 140 140 134 
134 140 140 140 140 140 140 140 140 140 134 


ans =

     0   255

difference from Java program

  1   1   1   1   1   1   1   1   1   1   1 
  1   1   1   1   1   1   1   1   1   1   1 
  1   0   1   1   0   0   0   1   1   1   1 
  1   0   1   1   1   0   0   0   1   1   1 
  1   1   1   0   0   0   0   1   0   1   1 
  1   1   1   0   0   0   0   1   0   1   1 
  1   0   1   1   1   0   0   0   1   1   1 
  1   0   1   1   0   0   0   1   1   1   1 
  1   1   1   1   1   1   1   1   1   1   1 
  1   1   1   1   1   1   1   1   1   1   1 
  1   1   1   1   1   1   1   1   1   1   1 

max difference: 1