c# - 找到所有圆圈大小的快速方法是什么?

标签 c# image algorithm geometry

<分区>

给定一张完全黑白的图片(所以只有黑色或白色,没有灰色阴影),上面有很多不同大小的圆圈(黑色),有什么快速找到中心坐标的方法圆圈的数量和圆圈的大小并将它们存储为字典条目?当我说快速时,我的意思是如果我每秒调用这个圆查找函数 10 或 20 次,它不会滞后太多。我还做了一些研究,发现我可以通过在圆上取三个点来找到圆心或半径,这有帮助吗?

Picture

最佳答案

首先想到的是逐像素扫描图像,寻找黑色像素。当你找到一个时,开始注水。洪水填充完成后,测量左侧、右侧、顶部和底部的范围,然后通过除以 2 得出中心点。这假设没有任何圆圈重叠。我敢肯定,可能有一些更优化的方法可以避免淹没整个圈子。

优化 #1: 当您找到第一个黑色像素时,不是使用洪水填充,而是沿着至少有一个白色邻居的所有 8 个邻居寻找相邻像素。继续跟随这些像素,直到您再次击中第一个像素。那应该给你轮廓,从那里你可以像我原来的答案一样推导出宽度、高度和中心点。

优化 #2:如果圆圈有最小尺寸,您就不必逐像素扫描。您可以扫描以最小尺寸间隔的水平线和垂直线以查找黑色像素。

关于c# - 找到所有圆圈大小的快速方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633688/

相关文章:

c# - 如何测试 Webbrowser 在导航到新 URL 时是否出现连接错误?

c# - Interop.Excel 本地化和 Range.Formula 与 Formulalocal

image - 用文件夹中的实际图像替换图像名称?

javascript - 无需拖动即可添加图像 TinyMCE

在数组中查找 'maximal difference' 的 C++ 算法

群体尺度算法

c# - 在 Xamarin Forms 中更改 BindableProperty 时不调用自定义控件 OnElementChanged

javascript - 将 ASP.NET MVC Web 应用程序从 http 转换为 https

javascript - html Canvas : insert multiple images into separate canvas

arrays - 模式匹配算法