diff --git a/doc/examples/plot_circular_hough_transform.py b/doc/examples/plot_circular_hough_transform.py new file mode 100755 index 00000000..0caee3c4 --- /dev/null +++ b/doc/examples/plot_circular_hough_transform.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +# Author: Francois Boulogne +# License: GPL + +""" +======================== +Circular Hough Transform +======================== + + + +""" + + +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.patches as mpatches + +from skimage import data, filter +from skimage.transform import hough_circle +from skimage.feature import peak_local_max + +# Load picture and detect edges +image = data.coins()[0:95, 70:370] +edges = filter.canny(filter.sobel(image), sigma=2.8) + + +fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6)) +ax.imshow(image, cmap=plt.cm.gray) + +# Detect two radii +radii = np.array([21, 25]) +hough_res = hough_circle(edges, radii) + +for radius, h in zip(radii, hough_res): + # For each radius, keep two circles + maxima = peak_local_max(h, num_peaks=2) + for maximum in maxima: + center_x, center_y = maximum - radii.max() + circ = mpatches.Circle((center_y, center_x), radius, + fill=False, edgecolor='red', linewidth=2) + ax.add_patch(circ) + +plt.show()