热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

圆心坐标的提取

用OpenCV的话,这样的活儿也就那么两三行代码,而且灵活可靠。但是,玩图像处理只懂玩成这样就悲哀了,就如同游戏引擎之于计算机图形学,太依赖图像库是不利于自己的成长和知识的提升的。

       用OpenCV的话,这样的活儿也就那么两三行代码,而且灵活可靠。但是,玩图像处理只懂玩成这样就悲哀了,就如同游戏引擎之于计算机图形学,太依赖图像库是不利于自己的成长和知识的提升的。

       圆心提取的本质是从一张含有圆形/椭圆标志物的图片(见下图1,现实图片经各种处理到达这种圆与背景分明的样态)中,选择一定坐标系,提取出各个标志圆的圆心在这个坐标系中的坐标。

       因此这个坐标系的选择将是影响最终结果的形式的关键。一般来说选择图像坐标系,以像素为单位。本实验图片的格式是BMP,因此可以按照BMP自身的坐标特点,以图片左下角为坐标原点,向右为X轴,向上为Y轴。当然若想与WINDOWS窗口坐标系一致(以左上角为原点),直接用图片高度减上坐标系的结果就行了。

       关于结果的精度是很值得考究的事情。事实上,若考虑到素材图片是相机所拍成像的,某个圆的圆心与坐标原点的距离应该是一个含一定精度的浮点实数。但是计算机图像的结构限定了坐标系只能以像素为单位,因此其可能达到的最高精度只有0. 5像素。在此以上的精度在本素材图像中是没有意义的。因为相机会自动对物理场景(连续)的采样点(离散采样)进行向输出图像的一一映射,形成像素(一个像素只包含一款颜色)。相邻像素的值是非连续(离散)的,注定图像坐标系中每个“值”(坐标)都只能与像素相容。这样,圆心位置也就只能存在于某个像素上或某2个或4个像素之间,因此实际中最高只有0.5的精度。

 

 提取圆心坐标 www.zwqxin.com
(图1  圆心提取素材图片)


提取圆心坐标 www.zwqxin.com

数字图像本质——被离散化采样,导致精度最高仅0.5

但是,如果圆心不是通过直接寻找的,而是采用数值计算得到(譬如本实验中用到的径向误差判断结合法),那么计算结果就会存在比较高的精度的可能性。这是理论可得结果与实际可得结果的差别。但就“计算机图像”这层意义来说,高于0.5的精度意义不大。

算法的设计:

在分析之后对算法的设计和选择就清晰了——立足于图像的本质上的话,只需要把圆心所在的像素位置找到,或者把包围圆心位置的几个像素找到即可。

参见图2,可知,图像中的参照物为一个圆或椭圆。在把它看作理想的圆/椭圆的话,可以认为圆点必然是在X方向横跨最多像素点的那一行中。因此算法设计上,针对每个圆,首先找出满足这个条件的一行(或几行,取中间行或中间两行),然后在Y方向上找到该像素行的中间位置,即为圆心——综合来说,圆心位置可能是落在某一个像素上,或X方向两个像素之间,或Y方向两个像素之间,或XY方向的4个像素之间。算法必须考虑这几种情况,算出精度为0.5的圆心位置。

算法的实现重点在于怎样分离出一个一个的圆,我采用的是逐像素法,先处理完最开头的一个圆(底部坐标靠近左下角原点),然后把这个圆从图像中去除(对二值化图像,就是把该圆的白色像素变黑),之后再处理下一个圆(寻得条件同样是,底部坐标靠近左下角原点)……直到处理完。怎么判断处理完呢?具体就是当该图像完全黑化的时候停止继续寻觅圆。

圆心坐标用一个容器链表保存起来,作为输出——输出到文件或作为一个/几个白像素涂入被完全黑化的图像上。

该算法为自主设计,自称为逐像素处理。应用条件是:
(1) 图片为二值化黑白图片,8BIT。(可以通过简单的预处理达到)
(2) 图片中仅含圆形。(本实验素材满足,若不满足可进行一定的预处理,如形态学处理,空间模板处理)

上方法另外作出的一个假设:该圆为理想的圆/椭圆。但是从图2这个放大图来说,事实上并不理想——虽然也可满足以上算法能找到圆心。把该圆规范化成一个标准的圆,这样可使找出的圆心具有更高的可信度。

按照某文献资料(图像处理中圆心算法研究 - 雷家勇,达飞鹏,孟广猛,东南大学自动化研究所)中所叙述的方法,可采用“径向误差预处理的最小二乘”进行拟合计算。

算法可分为三部分:
1. 找出初始圆心(此圆心作为径向误差判断的基准,在本实验中可直接取用逐像素处理法所得的结果)。
2. 找出拟合用的像素坐标。首先这些像素必须是圆形的边缘单像素(即八邻域内最多3个像素);然后进行筛选,这主要通过径向误差范围判断,去除无效的边界点和误差大的边界点。
3. 根据上述处理后的边界点,用最小二乘法拟合圆心。

因为经历了数值计算,因此结果将具有高精度,但不一定有意义(见4.1)。本方法结合了“逐像素法找初始圆心”——“径向误差筛选出拟合数据”——“最小二乘法拟合、修正圆心”,得到可信度更高的圆心方位。

该算法(径向误差最小二乘法)的适用条件为:
(1) 处理的图像元素必须是严格的圆或近似圆。如果是椭圆且偏心太厉害的话,全部基于圆的拟合算法会不适用,径向误差方法也变得无效。
(2) 因为采用了逐像素处理,因此也必须满足之前所述该算法的条件。

有此设计的处理结果是:

提取圆心坐标 www.zwqxin.com
3  程序界面,圆心提取对话框)
提取圆心坐标 www.zwqxin.com
(图4  结果
提取圆心坐标 www.zwqxin.com
(5  直观一点)

提取圆心坐标 www.zwqxin.com
(图6  另一张测试图片
提取圆心坐标 www.zwqxin.com
(图7  处理结果

最后这里只是说明对于这种杂乱排布的圆也能检测出而已。不过扫描算法里的递归终结条件就得好好掂量了~

程序内嵌进LVideoCapture .ver 1.5里了。(1.0版的功能见[VFW视频捕获之尝试] )在后面的1.8版本,涉及了摄象机标定的功能。

 

 


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
author-avatar
雪恝1988_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有