Add some tests on different variations of Hough algorithm.
[master-thesis.git] / src / Tests_hough / test_hough_gradient.m
1 function test_hough_gradient(images_path, image_name, use_edges_mask)
2     i = imread([images_path image_name]);
3
4     green = i(:,:,2);
5     green_filtered = imgaussfilt(green, 1.0);
6
7     edges = zeros(size(green));
8     if use_edges_mask
9         otsu = ~im2bw(green_filtered, graythresh(green_filtered));  
10         se = strel('rectangle', [3 3]);
11         edges = imdilate(otsu, se) - imerode(otsu, se);
12     end
13
14     s = [-1 0 1; -2 0 2; -1 0 1];
15     x_edge = conv2(cast(green_filtered, 'double'), s , 'valid');
16     y_edge = conv2(cast(green_filtered, 'double'), s', 'valid');
17
18     magnitudes = sqrt(x_edge .^ 2 + y_edge .^ 2);
19
20     if use_edges_mask
21         magnitudes(~edges(2:end-1, 2:end-1)) = 0;
22     end
23
24     disp('Applying Houg...');
25     tic
26     [acc_votes, acc_radius] = HTCircleGradient(magnitudes, [25, 35]);
27     toc
28
29     disp('Finding ellipses...');
30     tic
31     ellipses = find_ellipses(acc_votes, acc_radius);
32     toc
33
34     name = ['Hough gradient - ' image_name];
35     if use_edges_mask
36         name = [name ' (with edges)'];
37     end
38
39     show_figures(name, {...
40         {green_filtered, 'original filtered with a gaussian, sigma=1'},...
41         {edges, 'edges (otsu -> dilate - erode)'},...
42         {magnitudes, 'magnitudes'},...
43         {expand_matrix(acc_votes), 'votes'}}, green, ellipses);
44 end
45