Quantcast
Channel: lishen的博客
Viewing all articles
Browse latest Browse all 10

激光笔光斑识别

$
0
0

🈶️又想要搞了一个新玩意了,不知道这次能做成啥样子。准备做个摄像头识别激光笔光斑的东西,设想是可以做成激光打靶的游戏,或者扩展一下实现一个类似StarTrek在holodeck中实现的设计联系游戏,即:随机出现移动的物体靶子,用枪进行设计。只不是在holodeck中是photon energy组成的虚拟物体,我这里只能是屏幕上显示的,或者投影仪投射在墙上的图像。

现从最简单的开始,能准确的识别激光光斑,前后想了几种方法,每个都不完美,这里罗列一下吧,算是个经历和经验的分享。

识别红色光点的方案:

A)砖家系统方法,步骤中的各种阈值是手工试验得出的结果

1、高斯模糊==》转化成HSV==》拆分通道

2、开闭运算处理H通道(消除细碎部分)==》使用H通道查找边缘(查找颜色的边缘)

3、对于每一个边缘执行如下操作,如果不满足则跳过当前边缘:

     3.1 是否是高亮区域(通过V通道判断边缘圈起来的部分是否比外部亮)

     3.2 是否是红色(通过S和H通道,判断判断饱和度稍高的区域的颜色是否是红色)

     3.3 判断边缘形状是否是圆形

方案A有缺陷,饱和度低的部分颜色信息没有意义。很多饱和度过低的区域,虽然H通道也是红色,但是其实是背景中的黑色部分,所以这种方法不能准确的识别出红色的光斑。

B)

1、高斯模糊==》转化成HSV==》拆分通道

2、对三部分区域进行阈值操作,分别选出饱和度高的区域(饱和度高颜色才有意义),颜色在范围内的区域,明亮的区域。并对结果做与操作。

3、对结果图形进行形态学处理,消除凹陷、凸起和孤立的小点。

4、查找边缘,跳过形态不为圆形的点

5、通过矩的计算找出中心点。

结果:基本可以正确的找到光点,但是没法区分红色的圆球和光点。还可以改进,不过感觉没有机器学习算法来的彻底,有算法自动提取提取特征,不需要手工处理和设置阈值。

C)

1、高斯模糊==》转化成HSV==》拆分通道

2、对三部分进行归一求和,转化为灰度图像。

     H通道的亮度决定于颜色距离红色的距离;

     S通道和V通道的数值保持原始,仅作归一。

3、在灰度图像查找明亮的圆形区域。

C)机器学习算法,各种阈值是计算机匹配的结果。

结果:这种方法仅实现了前半部分,可以把颜色和饱和度的变化统一成亮度的变化,合成出来灰度图片。这样就可以使用常规的机器学习算法进行图像识别了,但是目前没有完成。

下一步准备继续改进第二种方法,​因为第三种方法还是有些门槛的,包括机器学习算法原理的学习和图像的足够训练图像的收集,后续找机会跟进。

改进点:

1、背景颜色调整,之前一直使用黑色背景,但是现在的摄像头一般都带有自动亮度调节,对于黑色的背景下摄像头的亮度调整的特别高,这样的话对于光斑一只处于过曝的状态,这样对于颜色的识别是不利的。因此下一步准备把背景调整成更明亮一点的中性颜色,比如说灰色。

2、对于光斑和靶标标记的颜色识别进行自适应。不同摄像头、不同光照对颜色的识别影响较大,固定的阈值都会有些缺陷,因此准备在算法中增加一个校准的过程,在开始识别之前,进行校准操作,这样可以自动根据当前的光照和相机特性选择合适的阈值。

目前的半成品代码:https://github.com/lishen2/LaserShoot

有一个国外的类似的成熟项目提供了很多参考:​https://github.com/laabicz/HomeLESS

PLUS,用了机械键盘果然回不去了,用macbook的键盘也觉得如此难受,经常打错字。​


 

Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images