Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HoughCircle找圆总结——opencv

HoughCircle找圆总结——opencv

作者头像
vv彭
发布于 2020-11-24 06:53:19
发布于 2020-11-24 06:53:19
1.4K0
举报
文章被收录于专栏:c#学习笔记c#学习笔记

Opencv内部提供了一个基于Hough变换理论的找圆算法,HoughCircle与一般的拟合圆算法比起来,各有优势:优势:HoughCircle对噪声点不怎么敏感,并且可以在同一个图中找出多个圆;反观拟合圆算法,单纯的拟合结果容易受噪声点的影响,且不支持一个输入中找多个圆 缺点:原始的Hough变换找圆,计算量很大,而且如果对查找圆的半径不加控制,不但运算量巨大,而且精度也不足,在输入噪声点不多的情况下,找圆效果远不如拟合找圆;为了提高找圆精度,相比拟合法,需要提供更多的参数加以控制,参数要求比较严格,且总体稳定性不佳 OpenCV内的HoughCircles对基础的Hough变换找圆做了一定的优化来提高速度,它不再是在参数空间画出一个完整的圆来进行投票,而只是计算轮廓点处的梯度向量,然后根据搜索的半径R在该梯度方向距离轮廓点距离R的两边各投一点,最后根据投票结果图确定圆心位置,其示意图如图1

图1是比较理想的情况,轮廓点1-6的梯度方向都经过了点7,因此都给点7投了一票,点7得分最高,也正是我们所要找的圆心;同时由此可以看出基于参数空间投票法来确定圆心,8-12点就算有投票,但由于投票太散,对整个投票结果也几乎不存在干扰,因而其天生抗干扰能力要比拟合法好 不过在这种思想优化下,也存在致命的缺陷,如图2:

实际情况是该点算出的梯度方向其实总是有误差的,有时因为图像原因或结构原因,偏差甚至超过30度;图2中由于梯度方向不精确,7点基本没有获得投票,反而不如ABC点。因此实际使用中HoughCircle的效果并没有想象中的理想,情况往往如下列所述: (参与投票的轮廓点如图3的右图,噪点非常多,比想要查找的轮廓本身还多,而且断断续续的,显然这种情况拟合法不适用) 1、半径范围限定不好时,如图3,可能找到的圆非常多且杂乱无章 2、在此情况下,如果只输出一个圆(Opencv的HoughCircle会默认按照投票结果的累加值排序),最好的圆是这样的,竟然差这么多

3、假设我们找的东西的半径我们是知道的,变化不大(+-8%),现在限定下半径。。。找出的排的靠前的圆是这样的;再看下默认最好的圆。。。

半径好像接近了一点,还是好坑爹啊。。。 4、常规来说,使用该函数的时候,为避免找到太多的几乎重合的圆,找圆的最小距离都设在一个比较合理的值(比如大于半径1/5),这样在找多个圆的时候,就不会找出太多重合的圆了;不过这里我试下不限制最小距离,如下,默认排序下得分最高的几个圆如左图:

貌似默认最好的圆并没有任何改善 很多初次使用该函数的看到这,或许就就觉得HoughCircles效果不咋地。。。本人刚开始使用时也感觉Opencv提供的这个算法太不稳定了,只能对某一个图调出相对好一点的效果,换一个图或者只改动其中某一个参数,找出来的圆就不知道跑哪去了,而且变化太大了

。。。 观察细心的可能发现了,第4步中的左图找出的众多圆其实已经比前面找出的圆靠谱很多了,而且这么多圆必定有一个圆就是我想要找的圆,只是按照投票分数排序下,最好的圆偏差较大。 但究其算法优化本身,轮廓梯度定位出来的圆心投票本来精度就低(如图2),自然找出来的圆会有很多是错误的,但如果轮廓点足够多,找出的正确的圆必定也是存在的,只是按照票数方法来评价可能排序会比较靠后,但毕竟也是出现了的;此处只需做个小小的优化,改下评价方法,优化下排序,结果就很接近了

这是经过优化排序方法后找出的最好的圆 找出来的圆中与实际轮廓重合度最高的圆一般就是我们要找的圆;因此我们可以通过HoughCircles来找出一批差不多的圆(如步骤4),然后画出这些圆,和实际轮廓比对一下,按实际重合像素的总数排序,这时分数最高的圆就如上面的结果图!HoughCircles优化一下还是很给力的! 附件为本算法优化源码,有兴趣的可以一起来进一步优化()

注:如果编译通过,但运行时崩溃,通常原因是库版本不对!一般OpenCV官方给出的库版本分x86,x64,而每个平台下又有vc10,vc11,vc12,分别对应VS2010,VS2012,VS2013;其下还分debug版和release版,必须严格与编译环境和使用的配置相对应,否则会在运行过程中出错,且非常不好排查原因 另该优化目前只能做到减少HoughCirlcles找错圆且错的比较离谱的几率,但无法真正提高精度,找出来的圆与实际圆稍有偏差还是有可能的;若需要高精度定位,建议采用该方法做粗定位,采用拟合圆做精定位(类似各商业算法中的环形区域找圆)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Windows 11 运行安卓子系统
设置 → 应用 → 可选功能 → 更多 Windows 功能 → 勾选“虚拟机平台” → 确定,或者直接运行optionalfeatures打开Windows功能:
AiDBA宝典
2023/04/26
2.4K0
Windows 11 运行安卓子系统
windows11运行安卓apk应用
输入https://www.microsoft.com/store/productid/9p3395vx91nr,后面的下拉框选择 「slow」,点击「✓」按钮
华创信息技术
2022/05/28
3.2K0
windows11运行安卓apk应用
React Native学习笔记(一)—— Win11安卓子系统的安装与使用 - Windows Subsystem for Android - WSA
写这篇文章的目的是为了学习React Native开发打基础,能够更好的运行、测试原生应用,带来比模拟器更好的体验。
张果
2023/03/14
3K0
React Native学习笔记(一)—— Win11安卓子系统的安装与使用 - Windows Subsystem for Android - WSA
小米手机MIUI 13开发版屏蔽Chrome应用,安装后无法打开的解决方法
博主使用的 Redmi K30 Pro 从 MIUI 12.5 正式版偷渡到 MIUI 13 开发版,最近更新完发现我的Chrome浏览器不见了!!!
德顺
2022/01/20
11.4K0
Windows 11 及其安卓子系统折腾记
值此程序员日,记录一下这两天折腾最新的 Windows11 系统及预览发行的安卓子系统(Windows Subsystem for Android)的过程。
独立观察员
2022/12/06
3.5K0
Windows 11 及其安卓子系统折腾记
WSA微软官方安装教程
Windows 11 版本号为 Build 22000.xxx 或更高版本。您的电脑硬件 BIOS/UEFI 支持虚拟化功能。
萌海无涯
2022/01/20
4.3K1
WSA微软官方安装教程
【2023最新版】Windows11家庭版:安卓子系统(WSA)安装及使用教程【全网最详细】
Windows Subsystem for Android™ with Amazon Appstore - Microsoft Store Apps
Qomolangma
2024/07/29
1.2K0
【2023最新版】Windows11家庭版:安卓子系统(WSA)安装及使用教程【全网最详细】
B4A如何运行在Win11安卓子系统上
在开始菜单,点击Windows Subsystem for Android突变进入子系统进行配置
办公魔盒
2023/03/02
1.6K0
B4A如何运行在Win11安卓子系统上
电脑技巧:Win 11可直接安装Android 应用了,赶紧来试一下吧!
前段时间,Windows 11安卓子系统运行 Android应用程序的第一个预览版现已提供给美国 Beta频道的 Windows 内部人员,但不是内部人员的我们,该怎么操作才能安装Android 应用呢?
小明互联网技术分享社区
2021/12/15
1.6K0
电脑技巧:Win 11可直接安装Android 应用了,赶紧来试一下吧!
Win11承诺的支持安卓App终于更新了!大神教你如何在国区使用,上班刷抖音不是梦
晓查 发自 凹非寺 量子位 | 公众号 QbitAI 今天可能是操作系统历史上最神奇的一天,因为Windows和Android在同一天实现了互相套娃。 微软承诺的“Windows 11支持Android应用”今天终于发布更新。 你终于可以在自己的工作电脑上刷抖音了。 而就在微软攻入谷歌“基地”的同时,谷歌方面也没闲着。 首先是官方宣布将开放Chrome OS安装到PC上。 还有黑客在Pixel 6手机里装上了Windows虚拟机。 这两家科技巨头是如何“相爱相杀”的,我们且往下看。 Windows的An
量子位
2022/03/04
9520
Win11支持安卓App终于更新了!教你如何在国区使用,上班刷抖音不是梦
2022年2月16号,这可能是操作系统历史上最神奇的一天,因为Windows和Android在同一天实现了互相套娃。
张晓衡
2022/04/02
1.4K0
Win11支持安卓App终于更新了!教你如何在国区使用,上班刷抖音不是梦
Windows 11如何使用 Android子系统
适用于 Android 的 Windows 子系统包括 Linux 内核和基于 Android 开源项目(AOSP)版本 11 的 Android 操作系统(即 Android 11)。
剑指工控
2022/03/11
2.5K0
Windows 11如何使用 Android子系统
教程 - Win 11 安装 wsa 安卓虚拟机
Windows Subsystem for Android 可用于 Windows 11 上的公共预览版。
acc8226
2022/05/17
1.6K0
Win11 Beta版已支持安卓应用!可直接使用Android,附教程赶紧更
非常激动,因为微软正式对 Windows 11 Beta 预览版添加 Android 应用的支持。前面一直都是PPT,也没有拿出实际的东西来。就在不久微软就出来了还是有点激动
叼同学
2021/10/22
2.7K0
Windows11 运行安卓(android)应用和linux教程
微软在发布 Windows 11 时宣传的新功能,即直接在 Windows 11 中运行 Android 系统也能跑,升级 Windows 11 跳过,首选需要将系统升级到windows11,升级windows11完成后发现也不能直接运行apk,本文就叫你怎么运行android。升级windows11我们先打开控制面板,找到程序打开后找到打开或启动windows功能,勾选如图红线部分,然后点击确定。
爱上歆随懿恫
2022/08/15
3K0
Windows11 运行安卓(android)应用和linux教程
Windows Subsystem for Android™ 安装教程
本文章首发于语雀! 通过各种高科技功能同步到Hajeekn 的博客 微软的安卓子系统已经发布很久了,这篇文章教大家如何免美区免亚马逊安装 Windows Subsystem for Android™
FloatSheep
2022/04/25
22.1K3
Windows Subsystem for Android™ 安装教程
win11直装c4droid教程
window11安卓子系统已经开放内测 位于美国地区的dev和bate通道会收到更新推送 但也有强制安装的方法 WIndows11不切换美区和Beta通道即可安装安卓子系统 关于VMware安装win11教程自行百度
QAIU
2023/03/14
5760
win11直装c4droid教程
适用于 Android™ 的 Windows 子系统 Magisk + LSPosed 指南
Magisk version 是面具的版本,一般 Stable 就够用了,要尝鲜的可以用 Beta 或者 Canary
FloatSheep
2022/09/20
5.1K0
适用于 Android™ 的 Windows 子系统 Magisk + LSPosed 指南
Windows Subsystem for Android 安装<简化向>[通俗易懂]
1. 电脑是Win11 Beta / Dev 版本或在22000系统以上,且可以在BIOS中开启虚拟化
全栈程序员站长
2022/09/13
2.1K0
Windows Subsystem for Android 安装<简化向>[通俗易懂]
Win11安装/运行Apk
看标题觉得很不可思议,对吧?我们只要在Win11电脑上安装Windows Subsystem for Android子系统就可以实现这个功能。
嘉嘉123
2022/12/14
2.7K0
Win11安装/运行Apk
推荐阅读
相关推荐
Windows 11 运行安卓子系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档