最简单形式的霍夫变换是一种检测直线的方法,但它也可用于检测圆或椭圆。该算法假设检测到边缘并且它对噪声或缺失点具有鲁棒性。

圆检测

在以下示例中,Hough变换用于检测硬币位置并匹配其边缘。我们提供一系列合理的半径。对于每个半径,提取两个圆圈,我们最终保留五个最突出的候选者。结果表明,硬币位置被很好地检测到。

算法概述

给定白色背景上的黑色圆圈,我们首先猜测其半径(或半径范围)以构建新圆。该圆圈应用于原始图像的每个黑色像素,并且该圆圈的坐标在累加器中进行投票。从这种几何结构,原始圆心位置获得最高分。请注意,累加器大小构建为大于原始图像,以便检测帧外的中心。它的尺寸扩大了半径更大的两倍。

import numpy as np
import matplotlib.pyplot as pltfrom 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, 2)
hough_res = hough_circle(edges, hough_radii)# Select the most prominent 5 circles
accums, cx, cy, radii = hough_circle_peaks(hough_res, hough_radii,total_num_peaks=3)# Draw them
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(20, 10))
image = color.gray2rgb(image)
for center_y, center_x, radius in zip(cy, cx, radii):circy, circx = circle_perimeter(center_y, center_x, radius)image[circy, circx] = (220, 20, 20)ax.imshow(image, cmap=plt.cm.gray)
plt.show()

data.coins()[160:230, 70:270]改为data.coins(),total_num_peaks取15


椭圆检测

在该第二示例中,目的是检测咖啡杯的边缘。 基本上,这是圆的投影,即椭圆。 要解决的问题要困难得多,因为必须确定五个参数,而不是三个参数。

算法概述

该算法采用属于椭圆的两个不同点。 它假定它是主轴。 所有其他点上的循环确定椭圆传递给它们的程度。 良好的匹配对应于高累加器值。

import matplotlib.pyplot as pltfrom skimage import data, color, img_as_ubyte
from skimage.feature import canny
from skimage.transform import hough_ellipse
from skimage.draw import ellipse_perimeter# Load picture, convert to grayscale and detect edges
image_rgb = data.coffee()[0:220, 160:420]
image_gray = color.rgb2gray(image_rgb)
edges = canny(image_gray, sigma=2.0,low_threshold=0.55, high_threshold=0.8)# Perform a Hough Transform
# The accuracy corresponds to the bin size of a major axis.
# The value is chosen in order to get a single high accumulator.
# The threshold eliminates low accumulators
result = hough_ellipse(edges, accuracy=20, threshold=250,min_size=100, max_size=120)
result.sort(order='accumulator')# Estimated parameters for the ellipse
best = list(result[-1])
yc, xc, a, b = [int(round(x)) for x in best[1:5]]
orientation = best[5]# Draw the ellipse on the original image
cy, cx = ellipse_perimeter(yc, xc, a, b, orientation) #生成椭圆周长坐标。返回属于椭圆周长的像素指数。 可用于直接索引到数组
image_rgb[cy, cx] = (0, 0, 255) #蓝色
# Draw the edge (white) and the resulting ellipse (red)
edges = color.gray2rgb(img_as_ubyte(edges))
edges[cy, cx] = (250, 0, 0)  #红色fig2, (ax1, ax2) = plt.subplots(ncols=2, nrows=1, figsize=(8, 4),sharex=True, sharey=True)ax1.set_title('Original picture')
ax1.imshow(image_rgb)ax2.set_title('Edge (white) and result (red)')
ax2.imshow(edges)plt.show()

scikit-image库-- 圆形和椭圆形霍夫变换(十七)相关推荐

  1. html设置按钮样式变为椭圆,css border-radius圆形变为椭圆形,位置:绝对

    我正在围绕字体真棒图标创建一个圆圈.我的问题是,当我添加position: absolute圆成为一个椭圆.css border-radius圆形变为椭圆形,位置:绝对 同样的情况,如果我是设置dis ...

  2. 显示一张桌子的信息,包括桌子的形状(长方形、方形、圆形、椭圆形;使用Rect、Square、Circle、Ellipse)、腿数、高度、桌面面积。定义变量来保存桌子的信息,并显示各个信息的值。要点提示

    [问题描述] 显示一张桌子的信息,包括桌子的形状(长方形.方形.圆形.椭圆形:使用Rect.Square.Circle.Ellipse).腿数.高度.桌面面积.定义变量来保存桌子的信息,并显示各个信息 ...

  3. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  4. 圆形或者椭圆形交通标志图像匹配模板

    圆形或者椭圆形交通标志图像匹配模板.jpeg from: https://blog.csdn.net/Fate_fjh/article/details/74784634

  5. php gd库 圆形头像,基于 GD 库生成圆形头像

    基于 GD 库生成圆形头像 laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD ...

  6. muduo网络库源码复现笔记(十七):什么都不做的EventLoop

    Muduo网络库简介 muduo 是一个基于 Reactor 模式的现代 C++ 网络库,作者陈硕.它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程 ...

  7. css椭圆圆形边框_使用CSS在弧形,圆形和椭圆形中制作动画元素

    css椭圆圆形边框 Web animation is most often created between two points: from and to a state, or between po ...

  8. Altium Designer圆形、椭圆形铺铜

    首先在任何层,用"Place"-"Full Circle"画出圆形,半径之类的可以设置. 然后选中画出的圆,执行"Tools"-" ...

  9. Python之数据挖掘实践--scikit learn库介绍和下载、实践、采坑

    文章目录 前言 A sklearn库是什么? A1 依赖库介绍 1.Numpy库 2.Scipy库 3. matplotlib A2 下载安装 B 实践过程 B1 主成分分析(PCA) B2 实现Km ...

最新文章

  1. Linux下的find命令
  2. PHP中try{}catch{}是异常处理.
  3. 《深入理解Android:卷III A》一一2.4本章小结
  4. 程序员修炼之路:你该知道的 7 个必经阶段
  5. 从 Google 的一道面试题谈谈数学基础的重要性
  6. java实现一个gui面板_JAVA GUI自定义JPanel画板背景
  7. MySQL5日期类型DATETIME和TIMESTAMP相关问题详解
  8. 在阿里云 ECS 上配置 SSH
  9. drools动态配置规则_关于规则引擎
  10. shell -eom_EOM的完整形式是什么?
  11. 利用PowerShell Empire实现Word文档DDE攻击控制(简单没啥用)
  12. Anaconda创建虚拟环境报错—UnavailableInvalidChannel: The channel is not accessible or is invalid
  13. 安装ps2021后,解决adobe一直发送消息的办法
  14. 关于csdn打不开的问题
  15. pk188 安装方法 最新微信陌陌站街神器 uber 平安易贷
  16. Ceph 知识摘录(Ceph对象存储网关中的索引工作原理)
  17. 漫画:鉴权与安全访问控制的技术血脉
  18. 游戏一直被攻击掉线卡顿是什么原因?服务器被攻击怎么办?
  19. 2018ACM-ICPC焦作站 补题
  20. 手机数据线种类有哪些

热门文章

  1. eclipse中@override报错的解决方法
  2. springboot 自定义注解拦截器
  3. 计算机组成原理(静态随机存取存取器)
  4. C语言:判断两数是否互质
  5. W5100S SPI+DMA 中的片选信号处理
  6. python操作CAD转存dwg文件
  7. 求100以内所有的素数和
  8. 驾考 科目一 复习的内容
  9. UE4 场景展示Demo
  10. 【蓝桥杯】历届试题 对局匹配(C++)