以下内容均为本人阅读多篇论文整理的笔记,在结尾处列出了参考文献,完全尊重和感谢原作者们的研究成果和知识产权
基于CMOS的LED-ID定位算法流程框图
首先通过OOK调制技术将LED光源的ID信息(代表LED的位置信息)编译成一段调制信号,用PWM的方法附加到LED灯具的驱动电流上,利用光源作为发射载体,通过终端的图像传感器进行接收,用图像处理算法提取LED-ID光条纹并解码得出发射的ID号码,利用所获取的ID号码对应预先建立好的ID位置信息库中唯 一确定的LED位置坐标(X-Y二维平面坐标),并通过对LED灯的几何光学成像计算得出待测点位置,完成定位。
信息帧应满足以下几个条件:
(1)LED的亮度变化频率必须大于200Hz,以避免产生人眼能够感知的闪烁。
(2)在一帧信息中应有足够的高电平信号保证 LED 光源的照明亮度;
(3)数据传输时应避免长连0信号出现,否则将造成肉眼可察觉的灯光闪烁;
(4)信息帧的长度适宜, 应保证在一幅照片内能容纳下多个完整的信息帧。
ID编号 | 二进制 | 求反 |
---|---|---|
1 | 0000 0000 0000 0000 0001 | 1111 1111 1111 1111 1110 |
2 | 0000 0000 0000 0000 0010 | 1111 1111 1111 1111 1101 |
… | … | … |
100000 | 0001 1000 0110 1010 0000 | 1110 0111 1001 0101 1111 |
采用PWM-OOK 调制
根据原理可得 — —
- 相机要求:
1️⃣COMS
2️⃣可调至低曝光模式,图像中除LED灯具发光面区域存在条纹图案之外,其他区域都是黑暗的
3️⃣高分辨率- LED要求:
1️⃣圆筒LED
2️⃣直径15cm及以上
3️⃣功率 6w 及以上
4️⃣距检测器高度 2m及以上
5️⃣LED闪烁的频率大于200Hz并小于CMOS行扫描的频率
可见光成像通信系统接收部分是相机,相机的核心器件是成像传感器。目前,相机中使用的成像传感器有两种架构:CCD 成像传感器和 CMOS 成像传感器,与之相对应的图像采集方式有两种:全局式快门和卷帘式快门。
- 在全局式快门采集方式中,成像传感器需要在同一时间段内对各行像素进行曝光,随后依次读取每行像素。
- 在卷帘快门采集方式中,成像传感器对各行像素逐行进行曝光,从第一行像素开始曝光,当第一行像素曝光完成,第二行像素开始曝光,循环往复,直到所有像素行曝光完成。
基于CCD的OCC
CCD采用的是全局快门(global shutter mechanism),即图像传感器的每行像素在同一时间段内曝光。对于基于CCD图像传感器的VLC系统,每幅图像一般只能获得一位的数据。根据奈奎斯特定理(Nyquist sampling),其通信速率必定低于帧速率(图像传感器的帧速率在30~60fps之间),因此不足以传送数据。虽然也可以采用特制的高速CCD图像传感器以提高通信速率。但是这种特制的传感器制作成本高,不适用于实际的定位场景。此外,采用LED阵列以实现MIMO调制技术,也可以实现CCD图像传感器单帧传送多位的数据。然而LED的驱动频率需要配合CCD图像传感器的采样率,可能导致人眼可感知的LED闪烁。除此以外,也可以采用降采样调制方式,以一定时间间隔来捕获光信号。
基于CMOS的OCC
CMOS采用的是卷帘快门(Rolling Shutter Mechanism),如上图(b)所示。卷帘效应采用逐行曝光的形式,利用这一特性可以提高可见光成像通信的数据速率。每个时刻,CMOS图像传感器只有一行(Row)曝光。当图像所有行都曝光结束后,再将不同时刻捕获的所有行曝光的数据合并在一起形成图像。这种逐行曝光方式导致在拍摄快速闪烁的LED灯具时,图像出现明暗相隔的条纹(本文将其称为光条纹码)。灯具闪烁越快,条纹数量越多。通过对图像中明暗相隔的条纹解码,可以传递若干位的信息,进而可实现可见光成像通信。灯具的闪烁频率必须小于CMOS行扫描的频率,否则就会导致数据的丢失。因为当LED灯闪烁频率大于行扫描的频率时,CMOS传感器只能获得LED所发射的平均光强,而不能获得LED像素区域的明暗条纹。CMOS图像传感器的曝光时间(Exposure Time)与感光度(ISO)会影响到LED-ID光条纹码的获取。
根据 CMOS 相机卷帘效应,按照指定规则对 LED 光源进行编码调制,接收端使用 CMOS 相机,一般情形下,规定 LED 光源亮和暗分别表示字符“1”和“0”,则在接收端相对应的光条纹码中亮条纹表示字符“1”,暗条纹表示字符“0”,通过识别明暗相间的条纹即可解析传递数据信息。
下图是使用 CMOS 成像传感器的相机所拍摄明暗条纹码图像
光条纹宽度与信号的频率和占空比有关
所谓的相机的帧速率是指:一秒相机可以捕获的图片的数目(fps)
假设camera的行列为a*b(分辨率)。帧速率为fps,那么每帧的曝光时间就是1/fps。摄像头扫描一行像素点所需要的时间为1/(fps x a),也即卷帘快门的扫描频率为fps x a。
这是在该分辨率条件下,摄像头可接收的最大信号速率。在该速率下,一个明暗条纹的宽度就是一列像素,如果采用更高的速率,就会发生相邻条纹之间的混叠,摄像头无法正常识别,即为上限频率;而下限频率,这是人眼对于闪烁的频率感知。应该是大于200HZ。
所以LED的驱动频率应该为200HZ–fps x aHZ之间。
为了在图像平面上获得亮暗相间的条纹,可以调节相机的曝光时间等参数,把非 LED 背景信息从图像中消除掉,从而降低对 LED-ROI区域检测的复杂度。
(1) 灰度处理
得到 LED 的 RGB 三色图后需要进行灰度化处理,从而方便后续的形态学操作。
(2) 二值化处理
灰度图像的每个像素点值在 0~255 内,背景区域像素点值较小,而属于 LED 区域的值较大,为了方便后续区分 LED 区域以及解码,调用 Opencv 里的 THRESH_OTSU 函数进行图像二值化。
(3) 闭运算操作
为了确定 LED-ROI 区域和中心坐标,接下来对二值化图像进行闭运算操作,首先进行腐蚀操作去除噪点,再对图像进行膨胀操作把被暗条纹隔断的 LED 区域连接起来。
(4) LED 轮廓检测:在得到填充满的 LED 图像后,可以进行轮廓检测并计算轮廓中心。轮廓检测可以使用 OpenCV 库里的 findCounters 函数,得到 LED-ROI 区域的轮廓,并将轮廓质心作为 LED 轮廓的中心。同时,除了 LED 区域的背景像素之和为零,统计每一行、列的像素总和从而确定 LED 的外接矩形框,根据外接矩形框对 LED 区域进行裁剪方便后续的 LED-ID 解码。
图像平面上对 LED 的检测通过图像处理得到 LED 的 ROI 区域,接下来的关键是在已检测到 LED 的 ROI 区域识别 LED 的 ID 信号。将亮暗条纹转化为 0/1 数据码,然后查看提前建立好的LED ID-2D 数据库得到 LED 在世界坐标系下 2D 坐标。该数据库中存储着ID编号和 LED 空间位置的映射匹配关系,且映射关系为一对一的映射。
如图3所示,假设手机水平放置,且捕获图像中包含2组条纹,待求的定位坐标为(X,Y),记2个VLP光源的坐标分别为(X1,Y1)和(X2,Y2),2个VLP灯具之间的空间距离为S1;以图像的左上角为图像坐标系的原点(0,0),则图像的中心坐标为(Xmid,Ymid),两组条纹中心在图像中的像素坐标分别为(X1f,Y1f)和(X2f,Y2f),图像中2组条纹之间的像素距离为S2,则由以下几何关系:
(1)将每盏 LED 灯都规定唯一的编号1、2…,分别对应室内空间中的不同位置坐标;
(2)每次识别以4个灯为最小单位,并进一步细分区域。从而变为为双灯识别
(3)当摄像头拍摄的图像中心处于r位置时,即离a、g灯最近,则选择a,g灯的坐标信息进行投影求解。
[1]关伟鹏. 基于图像传感器的高精度室内可见光定位算法研究[D].华南理工大学,2019.
[2]孙洪伟,王旭东,吴楠.一种基于智能手机的可见光室内信标定位方法[J].光通信研究,2017(01):72-75.
[3]田旭宇. 基于成像传感器的可见光室内定位技术研究[D].长春理工大学,2020.
[4]可见光成像通信(Optical Camera Communication,OCC)