Add some tests on different variations of Hough algorithm.
[master-thesis.git] / src / Tests_hough / test_hough_ma.m
1 function test_hough_ma(images_path, image_name)
2     i = imread([images_path image_name]);
3
4     green = i(:,:,2);
5     green_filtered = imgaussfilt(green, 1.0);
6     otsu = ~im2bw(green_filtered, graythresh(green_filtered));
7
8     se = strel('rectangle', [3 3]);
9     edges = imdilate(otsu, se) - imerode(otsu, se);
10
11     s = [-1 0 1; -2 0 2; -1 0 1];
12     x_edge = conv2(double(green_filtered), s, 'valid');
13     y_edge = conv2(double(green_filtered), s', 'valid');
14
15     magnitudes = sqrt(x_edge .^ 2 + y_edge .^ 2);
16
17     % Unit gradient.
18     x_dir = x_edge ./ magnitudes; 
19     y_dir = y_edge ./ magnitudes;
20
21     disp('Applying Houg...');
22     tic
23     [acc_votes, acc_radius] = HTCircleMa(x_dir, y_dir, edges(2:end-1, 2:end-1), [25, 35]);
24     toc
25
26     disp('Finding ellipses...');
27     tic
28     ellipses = find_ellipses(acc_votes, acc_radius);
29     toc
30
31     name = ['Hough Ma - ' image_name];
32     show_figures(name,...
33         {{green_filtered, 'original filtered with a gaussian, sigma=1'},...
34         {edges, 'edges (otsu -> dilate - erode)'},...
35         {expand_matrix(x_edge), 'composante x du gradient'},...
36         {expand_matrix(acc_votes), 'votes'}}, green, ellipses);
37
38     f = figure;
39     img = green_filtered;
40     grayscale = linspace(0, 1, 255);
41     colormap([grayscale' grayscale' grayscale']);
42     img(~edges) = 0;
43     image(img);
44     axis image;
45     hold on;
46     [X, Y] = meshgrid(1:size(green, 2), 1:size(green, 1));
47     quiver(X, Y, expand_matrix(x_dir), expand_matrix(y_dir), 'Color', 'yellow');
48     savefig(['results/' name ' - gradient.fig']);
49 end