我有一个履带式机器人玩具,正在用iPhone控制它。机器人会输出已知帧大小的实时摄像头供稿,然后将其显示在UIImage上。

我在机器人上添加了激光指示器,并将其固定在机器人的轴上。我试图检测图像上的激光指示器点,从而尝试计算物体的接近度。如果激光点距离中心较远,我知道机器人被卡在墙上,需要备份。

我该如何检测屏幕上明亮的白红色像素点?一种解决方案是对中心一定半径内的像素颜色进行采样并检测斑点明亮的颜色。有人可以为此活动建议一种算法吗?

另一种方法是跟踪最后几帧中点的平均位置,从而减小猜测半径。如果在预定义区域内没有点,则可以扩展搜索区域。

最后,我希望能够教机器人检测周围的地毯。地毯以某种方式反射激光笔,我想了解一下机器人周围有多少帧具有相似的属性。如果我知道激光指示器在屏幕上的位置,则可以从该图像中裁剪一个小矩形并将它们相互比较。有没有一种有效的方法可以将多个小图像相互比较,以了解它们的轮廓是否匹配?

我注意到激光是从光滑的表面反射的,根据折射定律,反射的方向可能告诉我有关表面在空间中的方向的信息。

谢谢!





评论

可以以某种方式打开和关闭激光指示器吗?就像关闭一帧,打开下一帧一样,然后减去后续几帧使其非常明显。

好主意!但是我无法控制激光指示器,无论激光指示器是打开还是关闭。

@AlexStone我正在尝试实现类似的目的,唯一的区别是我正在尝试检测瞳孔上的激光。您可以通过ios代码或您在opencv中起诉的任何示例代码来帮助我跟踪激光束吗?提前感谢您的帮助,谢谢AJ。

#1 楼

OpenCV适用于iOS。尽管它可能不是最有效的,但它为您提供了移植算法的选项。我已经使用ConDensation算法完成了类似的标记跟踪问题。使用OpenCV查找标记跟踪。这是一个非常大的研究领域,所需的确切算法完全取决于您的应用程序。如果我没记错的话,报告的图像处理技术大约有3000种-选择好的是一种真正的艺术!


一种解决方案是对特定像素内的像素颜色进行采样。 />半径的中心并检测到斑点明亮的颜色。谁能为该活动提出一种算法?


顺便说一句,这是所谓的粒子过滤器(凝聚是一种方法)背后的基本思想。您已经做好了自己的基本构想!


另一种方法是跟踪最后几帧中
点的平均位置,从而减少radius测半径。如果在预定义区域内没有点,则可以扩展搜索区域。


这称为状态持久性,可以用多种方式建模。压缩算法使用的随机方法与普通的老式卡尔曼滤波器没有什么不同。


是否有一种比较多个小图像的有效方法
,以了解它们的轮廓是否匹配?


这一个有点困难。您可以尝试模板匹配,但我不知道它在iOS上的表现如何(计算量很大,iOS相机不太适合它)。

评论


$ \ begingroup $
保罗,谢谢您提供了非常详细的答案!我获得了OpenCV框架,并将寻找使用它的项目示例。
$ \ endgroup $
–亚历山大·斯通(Alex Stone)
2012年6月18日上午11:57

$ \ begingroup $
Paul,您好,您对示例应用程序有任何想法,可以使用openCV通过iOS相机进行激光检测吗?
$ \ endgroup $
– AmJa
18-2-26在23:28

#2 楼

这段代码怎么样

https://www.youtube.com/watch?v=MKUWnz_obqQ

https://github.com/niitsuma/detect_laser_pointer

在这段代码中,HSV颜色是使用hotelling的t平方检验进行比较的