高质量椭圆检测库

这篇具有很好参考价值的文章主要介绍了高质量椭圆检测库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

效果展示

检测库

简介

安装库

用法

测试

论文算法步骤简读

1. lsd 检测

2. lsd group

3. 生成初始 ellipse

4. 聚类


前言

椭圆检测是工业中比较常用的一种检测需求。目前常用的基于传统图像处理的椭圆检测方法是霍夫变换,但是霍变换的检测率比较低,很难满足工业场景。而基于深度学习的椭圆检测,只能用于特定场景下的椭圆检测,检测场景和标注数据有很大的关系,很难做到通用。

我无意中看到一篇椭圆检测的论文《An Efficient High-quality Ellipse Detection》,是基于传统图像处理算法进行的椭圆检测。效果很不错,对于标准椭圆的检测率很高,并且通用性很不错。但是论文作者只提供了基于matlab的源码,这么好的论文也没有人翻译成 c++ 库,所以我在理解原论文的基础上,经过一些调参和优化,实现了一个 c++ 版本的椭圆检测库(MIT LICENSE)效果和效率都很不错。

效果展示

先上图。

高质量椭圆检测库

高质量椭圆检测库

高质量椭圆检测库

另外可以用我做的demo体验效果。线上体验:http://ellipsedetect.xyz/,或者小程序搜索 “椭圆识别“。

检测库

简介

椭圆检测库地址:

https://github.com/memory-overflow/standard-ellipse-detection​github.com/memory-overflow/standard-ellipse-detection

该库适用于边界清晰的椭圆检测、最好需要检测的的椭圆的大小在 200 * 200 像素以上,太小可能会有漏检,所以称之为标准椭圆检测。

安装库

库的的安装可以参考仓库的 wiki进行安装,注意 opencv 的版本一定要用 3.4.x。由于库使用了 shared_ptr,需要开启 c++11 及以上标准。

用法

该库的用法也很简单,您不必了解论文的具体实现细节。代码中引用头文件#include "ellipse_detection/detect.h",然后 zgh::detectEllipse(...) 调用。

接口说明

bool zgh::detectEllipse(
     INPUT const uint8_t *image,
     int height,
     int width,
     OUTPUT std::vector<std::shared_ptr<Ellipse> > &ells,
     int polarity = 0,
     double line_width = 2.0);
  • 输入参数:
    • image 图像原始数据,灰度图,彩色图需要先转换成灰度图,并且转换成一维数组输入
    • height 图像高度
    • width 图像宽度
    • polarity 表示椭圆极性,-1、0、1, 默认为 0,检测所有极性,-1 表示只检测内部亮,外部暗的椭圆,1 表示只检测内部暗,外部亮的椭圆,0 表示不关注椭圆的内外部亮度关系,检测所有椭圆。
    • line_width 椭圆边界的线宽,单位像素,推荐使用默认值,2 像素。
  • 输出
    • ells 检测到的椭圆列表

关于 Ellipse 结构的说明

Pointd o; // 椭圆中心点坐标
double a, b; // 短半轴长度,长半轴长度
double phi; // 椭圆偏角,单位为弧度
int polarity; // 椭圆极性
double goodness; // 椭圆评分
double coverangle; // 椭圆角度完整程度
std::vector<Pixel> inliers; // 构成的像素点

测试

提供了1个测试工具,可以查看效果。需要桌面版的操作系统才能显示图片,如果是服务器版本的操作系统,需要注释掉 imshow 部分。

cmake3 .. -DBUILD_TESTING=ON
make
./bin/testdetect [image_dir1] [image_dir2] [image_dir3] ...

论文算法步骤简读

如果对于论文的具体实现比较感兴趣,可以查看该部分内容。

该椭圆检测方法,主要分成如下4个步骤:

  1. lsd: 首先通过 lsd 检测算法生成很多细小的线段。
  2. lsd group: 通过搜索方法,将细小的线段连接成弧线。
  3. inital ellipse: 通过组合两条弧线,可以进行椭圆拟合,得到初始椭圆集。
  4. 聚类:对初始椭圆进行聚类,然后进行进一步的完整度评估,筛选出高完整度、高评分的椭圆。

1. lsd 检测

lsd 是一种传统的线段检测算法。它是基于梯度排序以后,通过查找近似矩形区域来获得线段。通过 lsd 可以提取图像中的细小线段,以下图为例子,

高质量椭圆检测库

经过 lsd 检测算法后如下图,不同的颜色代表一条不同的线段。

高质量椭圆检测库

2. lsd group

lsd group 的目的是为了把多个首尾相连的,并且斜率差在一定范围内的线段聚集成一组,组成一段弧。就也是通过搜索的方法找到连续的如下结构

高质量椭圆检测库

如果有多条线段可以选择,采用一种像素投票机制,选择角度阈值内像素最多的线段。

如下图,相同颜色的线段组成了一组弧。

高质量椭圆检测库

3. 生成初始 ellipse

选择任意两条弧线,只要满足一定的条件,那么这两个弧线就可能匹配组成一个椭圆。

高质量椭圆检测库

高质量椭圆检测库

找到所有的这样的一组弧以后,我们可以通过组成这些弧的所有像素点拟合出来一个椭圆(最小二乘法)。最后得到一个初始椭圆集。

高质量椭圆检测库

4. 聚类

初始椭圆集里面,有很多相似的椭圆(椭圆心,长短轴,偏角都比较接近),对初始椭圆进行聚类,采用均值漂移聚类方法,对椭圆心,长短轴,偏角,分别进程聚类,得到更少,更具有代表性的椭圆。然后对这些椭圆进行最后的验证,筛选掉完整度不高的椭圆,得到椭圆检测的结果。

高质量椭圆检测库文章来源地址https://www.toymoban.com/news/detail-465768.html

到了这里,关于高质量椭圆检测库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何写出高质量代码

    一、 前言 编写高质量代码是每一位程序员的追求。高质量的代码可以提高代码可读性、可维护性、可扩展性以及软件运行的性能和稳定性。在这篇文章中,我将分享一些编写高质量代码的特征、编程实践技巧和软件工程方法论。 可读性:好的代码应该能够被维护者轻易地理

    2024年02月02日
    浏览(81)
  • 如何编写高质量代码

    现代软件开发中,代码是构建高质量软件的核心。高质量代码能够提高软件系统的可靠性、可维护性和可扩展性,减少bug的数量和修复时间,提升开发效率和代码可读性,同时有助于团队协作和知识传承共享。 然而,梦想是丰满的,现实是骨感的!软件开发面临诸多挑战。

    2024年02月02日
    浏览(108)
  • 如何写出高质量的代码

    你是否曾经为自己写的代码而感到懊恼?你是否想过如何才能写出高质量代码?那就不要错过这个话题!在这里,我们可以讨论什么是高质量代码,如何写出高质量代码等问题。无论你是初学者还是资深开发人员,都可以在这个话题下进行分享,汲取灵感和知识,共同提高自

    2023年04月25日
    浏览(122)
  • 网络安全高质量文库

    PeiQI文库 http://api.orchidstudio.cn/ PeiQi文库是一个面对网络安全从业者的知识库,涉及漏洞研究,代码审计,CTF夺旗,红蓝对抗等多个安全方向,用于解决安全信息不聚合,安全资料不易找的难题。帮助网络安全从业者共同构建安全的互联网,快速验证并及时修复相关漏洞,为甲

    2024年02月12日
    浏览(49)
  • 有哪些高质量的自学网站?

    分享32个鲜为人知并且完全免费的高质量自学网站,每个都是堪称神器,让你相见恨晚。 是一个完全免费的综合视频教程网站,非常良心实用。 它提供的视频教程非常丰富并且质量很高,包括:PS 教程、手机摄影教程、Ai 做图教程、Excel 教程、Word 教程、PPT 教程、Pr 视频剪辑

    2024年02月02日
    浏览(124)
  • Visio 转为高质量PDF

    Visio另存为pdf不够清晰怎么办 - - 可以选择先另存为高分辨率的图片( 存的时候分辨率选择打印机或者自定义即可 ),然后转为pdf. 或者用 打印 1 保存为高质量 2 的pdf (本文介绍) 版本:Microsoft Visio 2010 Adobe Acrobat 2018 关键就是设置分辨率,不按照以上流程亦可 一般情况下安装完

    2024年02月04日
    浏览(47)
  • 如何编写高质量的测试计划

    1.1目的 简述本计划的目的,旨在说明各种测试阶段任务、人员分配和时间安排、工作规范等。 测试计划在策略和方法的高度说明如何计划、组织和管理测试项目。测试计划包含足够的信息使测试人员明白项目需要做什么是如何运作的。另外,清晰的文档结构能使任何一个读

    2024年02月16日
    浏览(48)
  • 【交付高质量,用户高增长】-用户增长质量保证方法论

    俗话说,“测试是质量的守护者”,但单凭测试本身却远远不够。大多数情况下,测试像“一面镜子”,照出系统的面貌,给开发者提供修改代码的依据,这个“照镜子”的过程,就是质量评估的过程,或者说,测试的过程更像“量体温”,虽然可以测量出温度进而判断健康

    2024年02月08日
    浏览(62)
  • ChatGPT高质量prompt技巧指南-《向 ChatGPT 提问获取高质量答案的艺 术:Prompt 工程技术完全指南》图书分享

    一、图书简介:本书是一本全面的指南,介绍了各种 Prompt 技术的理解和利用,用于从 ChatGPT中生成高质量的答案。 我们将探讨如何使用不同的 Prompt 工程技术来实现不同的目标。ChatGPT 是一 种先进的语言模型,能够生成类似人类的文本。然而,了解正确的提问方式以获 取我

    2024年02月03日
    浏览(55)
  • Go语言——【高质量编程 | 代码规范】

    作者 :非妃是公主 专栏 :《Golang》 博客主页 :https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 高质量编程,就是指编写的代码能够达到正确可靠的同时,具备简洁清晰、结构明了等特点,可以让团队成员很快的上手。具体来说,有

    2024年02月01日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包