Thursday 17 December 2015

OpenCV for secret agents - Rearview camera

这一章讲的是Bond的座驾如何自动检测到后面的追踪者。为了检测车辆后视镜里面的车头灯,可以假定它们都是白色的圆形,然后用blob detection,分为五步
1. 用二值化处理,把高于某个阈值的亮度设置为白色,反之为黑色。
2. 找到每个blob的轮廓。
3. 把相邻的blob融合在一起。
4. 计算blob的特征,比如中心点,半径等。
5. 去掉那些不符合条件的blob。

为了区分不同颜色的车灯,还需要转换到HSV颜色空间。
Hue指的是颜色在颜色轮上面的角度,红色是0, 绿色是120,蓝色是240。
Saturation指的是颜色与灰度值之间的距离,比如rgb的最大值减去最小值。
在Opencv中,为了能用一个byte存储hue的数值,hue被压缩到了0到180之间。想要更精确的数值,就要用0到360之间的浮点数。

在测量距离的时候,可以用 物体在图像中的大小/焦距 = 物体实际大小/距离。左边的单位可以是像素,右边是米。有几种方法可以测量距离
1. time of flight相机。这种相机发射一束光到物体上,然后测量反射光的强度。一些相机,比如Kinect,使用红外线光。但是这种相机会受到其他强烈光源的干扰,所以不适合检测车灯。
2. 双目相机由两个相机组成,它们之间的距离是已知的。通过图像每个点的disparity,就是像素距离,可以得到实际距离。不过通常计算量比较大。
3. Structure from motion, 只需要一个相机,不过需要知道它移动的距离。从不同地方的相机采集的图像中可以像双目相机那样算出距离。这里需要假设物体是静止的。因为007的座驾和后面的车灯都在移动,这种方法也不行。


No comments:

Post a Comment