Add some tests on different variations of Hough algorithm.
[master-thesis.git] / src / Tests_hough / test_hough_gradient.m
diff --git a/src/Tests_hough/test_hough_gradient.m b/src/Tests_hough/test_hough_gradient.m
new file mode 100644 (file)
index 0000000..15ca92b
--- /dev/null
@@ -0,0 +1,45 @@
+function test_hough_gradient(images_path, image_name, use_edges_mask)
+    i = imread([images_path image_name]);
+
+    green = i(:,:,2);
+    green_filtered = imgaussfilt(green, 1.0);
+
+    edges = zeros(size(green));
+    if use_edges_mask
+        otsu = ~im2bw(green_filtered, graythresh(green_filtered));  
+        se = strel('rectangle', [3 3]);
+        edges = imdilate(otsu, se) - imerode(otsu, se);
+    end
+
+    s = [-1 0 1; -2 0 2; -1 0 1];
+    x_edge = conv2(cast(green_filtered, 'double'), s , 'valid');
+    y_edge = conv2(cast(green_filtered, 'double'), s', 'valid');
+
+    magnitudes = sqrt(x_edge .^ 2 + y_edge .^ 2);
+
+    if use_edges_mask
+        magnitudes(~edges(2:end-1, 2:end-1)) = 0;
+    end
+
+    disp('Applying Houg...');
+    tic
+    [acc_votes, acc_radius] = HTCircleGradient(magnitudes, [25, 35]);
+    toc
+
+    disp('Finding ellipses...');
+    tic
+    ellipses = find_ellipses(acc_votes, acc_radius);
+    toc
+
+    name = ['Hough gradient - ' image_name];
+    if use_edges_mask
+        name = [name ' (with edges)'];
+    end
+
+    show_figures(name, {...
+        {green_filtered, 'original filtered with a gaussian, sigma=1'},...
+        {edges, 'edges (otsu -> dilate - erode)'},...
+        {magnitudes, 'magnitudes'},...
+        {expand_matrix(acc_votes), 'votes'}}, green, ellipses);
+end
+