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');
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