繁体   English   中英

C中的Blob检测(不是OPENCV)

[英]Blob detection in C (not with OPENCV)

我正在尝试自己的blob检测,他将收到一个实时视频,并尝试检测白皮书。 即使是写在纸上的东西。 我需要检测纸张并且是角落,因为我真正想要的是在纸张的每个角落上的纸张上绘制一个opengl多边形将是多边形的一个角落。 然后我需要纸张的坐标做其他的东西。 所以我需要: - 检测一个方形的白色斑点。 - 获取cornes的坐标 - 在白板上绘制多边形。

任何想法我怎么能这样做?

很大程度上取决于背景。 例如,假设您:

  1. 知道纸张总是大致居中(即W / 2,Y / 2总是在blob内),不再旋转45度(30会更好)

  2. 在纸张周围有一个合适的边框,这样角落就不会碰到FOV的边缘

  3. 能够(通过分析局部方差,或者如果幸运的话,检查背景颜色或亮度)来说明一个点是在斑点内部还是外部

  4. 内部/外部功能永远不会失败(除了可能在边界附近)

然后你可以从边界上的一个点(当然在外面)和中心(当然在里面)走一条线,即使是通过二分,然后在边缘找到一个点 - 一个区域。

两个边缘点给出一个矩形(两个平面给出一个光束),两个光圈给出一个交叉点(两个光束给出一个更大的区域) - 并且有你的角落。 您应该携带检测不确定性(面积半径)以验证角落(另一种不太优雅的方法是粗略计算角落的位置,并通过螺旋搜索或醉汉的步行来确定它)。

该算法适用于并行化,只要假设成立,就应该非常快。

所有这一切,它仍然是一个黑客 - 我同意放松,为什么重新发明轮子? 如果你有内存或CPU限制(嵌入式系统等),我相信应该有ARM和嵌入式平台的OpenCV和e-Vision“lite”端口。

(对不起我的术语 - 我是从意大利语翻译的猴子。“Areal”很可能与你的“blob”相对应,一个光束是连接两个不同斑点中所有点的线的族,线强度是产品距离其地区中心点的距离)

我正在尝试自己的blob检测,他将收到一个实时视频,并尝试检测白皮书。

你的第一枪可能是简单的洪水填充 也就是说,选择一个好的阈值来二值化图像并应用算法。 如果您知道纸张总是比X更亮并且背景总是比这更暗,则可以修复阈值。 或者这可以是自适应阈值,例如Otsu的方法 OpenCV免费提供此功能。

如果您需要加快速度,可以使用union-find数据结构。

最后,您需要提出一些启发式方法来识别角点(例如x / y方向的四个极值)。

然后我需要[...] cornes的坐标[...]

然后你不需要斑点检测,而是首先进行角点检测或轮廓检测。 OpenCV具有一些很好的功能 如果您不能使用它,我建议将图像二值化,并使用哈里斯探测器找到物体的角落。

如果您使用OpenCV的TBB支持也可以非常方便,并且您有问题可以满足您的实时要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM