最简单形式的霍夫变换是一种检测直线的方法,但它也可用于检测圆或椭圆。该算法假设检测到边缘并且它对噪声或缺失点具有鲁棒性。
圆检测
在以下示例中,Hough变换用于检测硬币位置并匹配其边缘。我们提供一系列合理的半径。对于每个半径,提取两个圆圈,我们最终保留五个最突出的候选者。结果表明,硬币位置被很好地检测到。
算法概述
给定白色背景上的黑色圆圈,我们首先猜测其半径(或半径范围)以构建新圆。该圆圈应用于原始图像的每个黑色像素,并且该圆圈的坐标在累加器中进行投票。从这种几何结构,原始圆心位置获得最高分。请注意,累加器大小构建为大于原始图像,以便检测帧外的中心。它的尺寸扩大了半径更大的两倍。
import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color
from skimage.transform import hough_circle, hough_circle_peaks
from skimage.feature import canny
from skimage.draw import circle_perimeter
from skimage.util import img_as_ubyte
%matplotlib inline
# Load picture and detect edges
image = img_as_ubyte(data.coins()[160:230, 70:270]) #将图像转换为8位无符号整数格式。
edges = canny(image, sigma=3, low_threshold=10, high_threshold=50)
# Detect two radii
hough_radii = np.arange(20, 35,