mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-28 19:17:18 +08:00
46 lines
1.0 KiB
Python
Executable File
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()
|