diff options
Diffstat (limited to 'gabor_example.m')
-rw-r--r-- | gabor_example.m | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/gabor_example.m b/gabor_example.m new file mode 100644 index 0000000..88d0bc0 --- /dev/null +++ b/gabor_example.m @@ -0,0 +1,43 @@ +function gabor_example()
+% an example to demonstrate the use of gabor filter.
+% requires lena.jpg in the same path.
+% the results mimic:
+% http://matlabserver.cs.rug.nl/edgedetectionweb/web/edgedetection_examples
+% .html
+% using default settings (except for in radians instead of degrees)
+%
+% note that gabor_fn only take scalar inputs, and multiple filters need to
+% be generated using (nested) loops
+%
+% also, apparently the scaling of the numbers is different from the example
+% software at
+% http://matlabserver.cs.rug.nl
+% but are consistent with the formulae shown there
+lambda = 8;
+theta = 0;
+psi = [0 pi/2];
+gamma = 0.5;
+bw = 1;
+N = 8;
+img_in = im2double(imread('lena.jpg'));
+img_in(:,:,2:3) = []; % discard redundant channels, it's gray anyway
+img_out = zeros(size(img_in,1), size(img_in,2), N);
+for n=1:N
+ gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...
+ + 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);
+ % gb is the n-th gabor filter
+ img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');
+ % filter output to the n-th channel
+ theta = theta + 2*pi/N;
+ % next orientation
+end
+figure(1);
+imshow(img_in);
+title('input image');
+figure(2);
+img_out_disp = sum(abs(img_out).^2, 3).^0.5;
+% default superposition method, L2-norm
+img_out_disp = img_out_disp./max(img_out_disp(:));
+% normalize
+imshow(img_out_disp);
+title('gabor output, L-2 super-imposed, normalized');
\ No newline at end of file |