Files
scikit-image/doc/examples/plot_circular_hough_transform.py
T
2013-02-25 22:56:28 +01:00

46 lines
1.0 KiB
Python
Executable File

#!/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()