发明内容
针对现有技术存在的问题,本发明提供一种LED灯的识别方法、装置、电子设备及存储介质。
第一方面,本发明提供一种LED灯的识别方法,包括:
在LED照明环境下,通过CMOS相机获取背景帧和样条帧,所述背景帧为没有暗样条纹的图像,所述样条帧为具有暗样条纹的图像;
通过比较所述背景帧和所述样条帧,确定所述样条帧中暗样条纹的目标条数;
基于预设对应关系和所述目标条数,确定所述目标条数对应的目标开关频率,所述预设对应关系用于表征暗样条纹数与LED灯开关频率之间的对应关系,所述目标开关频率用于标识LED灯;
其中,所述LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率,且/>,/>,,S表示所述CMOS相机的快门时长,所述CMOS相机采用逐列扫描方式采集图像,W表示所述CMOS相机所采集图像的宽度,T表示所述照明周期。
可选地,所述通过比较所述背景帧和所述样条帧,确定所述样条帧中暗样条纹的目标条数,包括:
基于所述背景帧、所述样条帧和二值化阈值,计算帧差及进行二值化,获取二值图像,所述二值图像中各像素点的取值用于表征所述背景帧和所述样条帧在对应像素点处的差异大小,二值化取值1所表征的差异大于二值化取值0所表征的差异;
通过统计所述二值图像中各列取值为0的像素点的个数,确定一维数组;
基于预设窗口尺寸,对所述一维数组进行分窗口统计梯度,生成窗口链表,所述窗口链表用于按链表方式存放各个窗口对应的窗口值;
基于所述窗口链表,比较各个窗口对应的窗口值,确定各个窗口对应的状态,所述窗口对应的状态用于表征窗口所选中列是否具有暗样条纹;
基于各个窗口对应的状态,确定所述样条帧中暗样条纹的目标条数。
可选地,所述基于预设窗口尺寸,对所述一维数组进行分窗口统计梯度,生成窗口链表,包括:
基于预设累计梯度计算配置,统计各个窗口对应的窗口值;
基于各个窗口对应的窗口值,按链表方式生成所述窗口链表;
所述预设累计梯度计算配置用于指示:
对于首个窗口,当累积梯度的绝对值小于或等于预设临界阈值时,将所述首个窗口内所有数组元素的均值作为整个窗口的窗口值,当累积梯度小于所述预设临界阈值的负值时,将所述首个窗口内首个数组元素的数值作为整个窗口的窗口值并设置所述首个窗口对应的状态为顶部状态,所述顶部状态用于表征窗口所选中列不具有暗样条纹;当累积梯度大于所述预设临界阈值时,将所述首个窗口内首个数组元素的数值作为整个窗口的窗口值并设置所述首个窗口对应的状态为底部状态,所述底部状态用于表征窗口所选中列具有暗样条纹;
对于除首个窗口之外的任意一个目标窗口,当累积梯度的绝对值小于或等于所述预设临界阈值时,将所述目标窗口内所有数组元素的均值作为整个窗口的窗口值;否则,将所述目标窗口内最后一个数组元素的数值作为整个窗口的窗口值。
可选地,所述基于所述窗口链表,比较各个窗口对应的窗口值,确定各个窗口对应的状态,包括:
按照预设窗口合并配置,对所述窗口链表中窗口进行合并,获取合并窗口后的窗口链表,所述预设窗口合并配置用于指示对于相邻的两个窗口,若两个窗口分别对应的窗口值之间的差值的绝对值小于或等于预设窗口差值,则合并两个窗口;
对于所述合并窗口后的窗口链表,在首个窗口对应的状态未确定的情况下,基于首个窗口对应的窗口值和顺数第二个窗口对应的窗口值,确定所述首个窗口对应的状态;
对于所述合并窗口后的窗口链表,基于首个窗口对应的状态和各个窗口对应的窗口值,确定各个中间窗口对应的状态;
对于所述合并窗口后的窗口链表,基于倒数第二个窗口对应的窗口值和最后一个窗口对应的窗口值,确定所述最后一个窗口对应的状态。
可选地,所述对于所述合并窗口后的窗口链表,在首个窗口对应的状态未确定的情况下,基于首个窗口对应的窗口值和顺数第二个窗口对应的窗口值,确定所述首个窗口对应的状态,包括:
判断所述首个窗口对应的窗口值与所述顺数第二个窗口对应的窗口值之间的大小;
若所述首个窗口对应的窗口值小于所述顺数第二个窗口对应的窗口值,则确定所述首个窗口对应的状态为底部状态;否则,确定所述首个窗口对应的状态为顶部状态。
可选地,所述对于所述合并窗口后的窗口链表,基于首个窗口对应的状态和各个窗口对应的窗口值,确定各个中间窗口对应的状态,包括:
对于所述合并窗口后的窗口链表,从倒数第二个窗口开始,执行递归设置中间窗口状态操作;
所述递归设置中间窗口状态操作,具体包括:
若目标中间窗口的前一个窗口对应的状态未确定,则针对所述目标中间窗口的前一个窗口执行所述递归设置中间窗口状态操作;
若所述目标中间窗口的前一个窗口对应的状态已确定,则基于预设中间窗口处理配置、所述目标中间窗口的前一个窗口对应的状态、所述目标中间窗口对应的窗口值和所述目标中间窗口的后一个窗口对应的窗口值,确定所述目标中间窗口对应的状态或合并窗口;
所述预设中间窗口处理配置用于指示:
若所述目标中间窗口的前一个窗口对应的状态为顶部状态,当所述目标中间窗口对应的窗口值小于所述目标中间窗口的后一个窗口对应的窗口值时,设置所述目标中间窗口对应的状态为底部状态;当所述目标中间窗口对应的窗口值大于所述目标中间窗口的后一个窗口对应的窗口值时,合并所述目标中间窗口与所述目标中间窗口的后一个窗口,并将所述目标中间窗口的后一个窗口对应的窗口值作为合并后的窗口对应的窗口值;
若所述目标中间窗口的前一个窗口对应的状态为底部状态,当所述目标中间窗口对应的窗口值大于所述目标中间窗口的后一个窗口对应的窗口值时,设置所述目标中间窗口对应的状态为顶部状态;当所述目标中间窗口对应的窗口值小于所述目标中间窗口的后一个窗口对应的窗口值时,合并所述目标中间窗口与所述目标中间窗口的后一个窗口,并将所述目标中间窗口的后一个窗口对应的窗口值作为合并后的窗口对应的窗口值。
可选地,所述对于所述合并窗口后的窗口链表,基于倒数第二个窗口对应的窗口值和最后一个窗口对应的窗口值,确定所述最后一个窗口对应的状态,包括:
当所述最后一个窗口对应的窗口值小于倒数第二个窗口对应的窗口值时,则设置所述最后一个窗口对应的状态为底部状态;否则设置所述最后一个窗口对应的状态为顶部状态。
第二方面,本发明还提供一种LED灯的识别装置,包括:
图像获取模块,用于在LED照明环境下,通过CMOS相机获取背景帧和样条帧,所述背景帧为没有暗样条纹的图像,所述样条帧为具有暗样条纹的图像;
暗样条纹确定模块,用于通过比较所述背景帧和所述样条帧,确定所述样条帧中暗样条纹的目标条数;
开关频率确定模块,用于基于预设对应关系和所述目标条数,确定所述目标条数对应的目标开关频率,所述预设对应关系用于表征暗样条纹数与LED灯开关频率之间的对应关系,所述目标开关频率用于标识LED灯;
其中,所述LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率,且/>,/>,,S表示所述CMOS相机的快门时长,所述CMOS相机采用逐列扫描方式采集图像,W表示所述CMOS相机所采集图像的宽度,T表示所述照明周期。
第三方面,本发明提供一种电子设备,包括:至少一个存储器,用于存储程序;至少一个处理器,用于执行存储器存储的程序,当存储器存储的程序被执行时,处理器用于执行第一方面或第一方面的任一种可能的实现方式所描述的方法。
第四方面,本发明提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,当计算机程序在处理器上运行时,使得处理器执行第一方面或第一方面的任一种可能的实现方式所描述的方法。
可以理解的是,上述第二方面至第四方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率(用于标记不同的LED灯),CMOS相机采用逐列扫描方式采集图像,通过设置合适的默认开关频率/>(/>)、目标开关频率/>()以及照明周期(/>),可以在该LED照明环境下采集到没有暗样条纹的背景帧以及具有暗样条纹的样条帧,进而通过比较背景帧和样条帧可以确定样条帧中暗样条纹的目标条数,进而基于暗样条纹数与LED灯开关频率之间的对应关系,可以确定目标条数对应的目标开关频率以及确定具有该目标开关频率的目标LED灯,进而可以确定CMOS相机的当前位置位于目标LED灯附近(经实验,可以定位在距目标LED灯5米以内的位置),能够高效地利用LED灯进行室内定位,再辅助其他定位技术能够实现移动终端的精确定位。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或者两个以上,例如,多个处理单元是指两个或者两个以上的处理单元等;多个元件是指两个或者两个以上的元件等。
接下来,对本发明实施例中提供的技术方案进行介绍。
图1是本发明提供的LED灯的识别方法的流程示意图,如图1所示,LED灯的识别方法的执行主体可以是电子设备,例如具有互补金属氧化物半导体(Complementary Metal-Oxide-Semiconductor,CMOS)相机拍照功能的任意移动终端。该方法包括以下步骤S10、步骤S20和步骤S30。
步骤S10,在LED照明环境下,通过CMOS相机获取背景帧和样条帧,背景帧为没有暗样条纹的图像,样条帧为具有暗样条纹的图像;
其中,LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率,且/>,/>,,S表示CMOS相机的快门时长,CMOS相机采用逐列扫描方式采集图像,W表示CMOS相机所采集图像的宽度,T表示照明周期。
具体地,图2是本发明提供的LED灯照明周期的示意图,如图2所示,设定时长相等的两类照明周期T1、T2,可以在单片机上编程控制LED灯(0<i<N+1,N为LED灯的个数),使在T1周期内以默认开关频率/>自动关开、在T2周期内以目标开关频率/>自动关开,在时间序列上T1、T2交替重复实现照明。假设CMOS相机的快门时长为S,图像宽度为W,默认开关频率/>应满足条件/>;目标开关频率/>应满足条件/>。此限定条件是为了利用CMOS相机的卷帘效应,图3是本发明提供的背景帧的示意图,图4是本发明提供的样条帧的示意图,如图3所示,CMOS相机可以在T1周期内获得没有暗样条纹的图像(背景帧),如图4所示,CMOS相机可以在T2周期内获得有暗样条纹的图像(样条帧)。
对于“暗样条纹”:设置LED灯的频率/>,当CMOS相机逐层感光时,由于/>处于关闭状态感知不到光线,采集的图像呈现的结果就具有黑色样条纹。由于室内环境照明往往不是来自单一光源,CMOS相机也会感知到其他光源的光线,采集的图像呈现的结果就具有暗样条纹。
所有的LED灯设置相同的默认开关频率,设置不同的目标开关频率/>。此限定条件是为了CMOS相机在T2周期内对于不同的LED光照,能够获得含有不同暗条纹个数的图像。周期T1、T2的时长应大于相机快门时长的2倍。此限定条件是为了相机能够在T1周期内获得完整的背景帧,在T2周期内获得完整的样条帧,从而实现LED和相机的同步。T1、T2、/>和/>的取值以在正常光照环境中不出现肉眼感知到的频闪为前提。
示例性地,步骤S10具体包括以下步骤S11、步骤S12和步骤S13。
步骤S11,针对LED照明环境中的任意一个静止的目标物体,通过CMOS相机先后连续拍照,获取第一图像P1和第二图像P2。
步骤S12,间隔照明周期之后,再通过CMOS相机先后连续拍照,获取第三图像P3和第四图像P4。
步骤S13,基于第一图像P1、第二图像P2、第三图像P3和第四图像P4,通过比较像素点亮度和,在四张图像中筛选出背景帧和样条帧。
具体地,求图像P1、P2、P3和P4对应的灰度图,计算每张灰度图像所有像素点的亮度和。若P1或P3对应的灰度图的亮度和最大,则保留P1和P3,若P2或P4对应的灰度图的亮度和最大,则保留P2和P4。在保留的图像中对应亮度和最大的图像为背景帧,另一图像为样条帧。
上述灰度图像与原始RGB图像高度相同,宽度也相同。灰度图像中像素点的亮度值为原始图像中对应像素点的R、G、B等三原色亮度值的均值。
像素点亮度和是指:求图像对应灰度图中所有像素点灰度值总和,将该和值作为亮度和。
可以理解的是,如果仅拍摄一张图像,这个图像对应快门时段可能跨了照明周期T1和照明周期T2,为了避免这种情况,可以拍摄两张图像P1和P2,由于照明周期T1、T2的时长大于相机快门时间的2倍,因而如果两张图像P1和P2中如果有一张图像对应快门时段跨了照明周期T1和照明周期T2,那么另外一张图像(作为目标图像)对应快门时段必然没有跨照明周期T1和照明周期T2,可以把这个目标图像作为背景帧(无暗样条纹)或样条帧(有暗样条纹),对应的,在这个目标图像的拍摄时刻之后等待一个照明周期,再拍摄的图像作为样条帧或背景帧。
例如,若P1或P3对应的灰度图的亮度和最大,则目标图像为P1,保留P1和P3,进而在保留的图像P1和P3中对应亮度和最大的图像为背景帧,另一图像为样条帧。
例如,若P2或P4对应的灰度图的亮度和最大,则目标图像为P2,保留P2和P4,进而在保留的图像P2和P4中对应亮度和最大的图像为背景帧,另一图像为样条帧。
其中,通过灰度图的亮度和最大这一方式,可以找出背景帧,因为灰度图的亮度和最大,则表明该图像必然没有暗样条纹且没有跨两个照明周期,灰度图的亮度和最大的图像必然为背景帧。
步骤S20,通过比较背景帧和样条帧,确定样条帧中暗样条纹的目标条数。
步骤S30,基于预设对应关系和目标条数,确定目标条数对应的目标开关频率,预设对应关系用于表征暗样条纹数与LED灯开关频率之间的对应关系,目标开关频率用于标识LED灯。
可以理解的是,LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率(用于标记不同的LED灯),CMOS相机采用逐列扫描方式采集图像,通过设置合适的默认开关频率/>(/>)、目标开关频率/>(/>)以及照明周期(/>),可以在该LED照明环境下采集到没有暗样条纹的背景帧以及具有暗样条纹的样条帧,进而通过比较背景帧和样条帧可以确定样条帧中暗样条纹的目标条数,进而基于暗样条纹数与LED灯开关频率之间的对应关系,可以确定目标条数对应的目标开关频率以及确定具有该目标开关频率的目标LED灯,进而可以确定CMOS相机的当前位置位于目标LED灯附近(经实验,可以定位在距目标LED灯5米以内的位置),能够高效地利用LED灯进行室内定位,再辅助其他定位技术能够实现移动终端的精确定位。
可选地,步骤S20具体包括以下步骤S21、步骤S22、步骤S23、步骤S24和步骤S25。
步骤S21,基于背景帧、样条帧和二值化阈值,计算帧差及进行二值化,获取二值图像,二值图像中各像素点的取值用于表征背景帧和样条帧在对应像素点处的差异大小,二值化取值1所表征的差异大于二值化取值0所表征的差异。
具体地,对于上述“计算帧差”:生成一个新的RGB三原色图像Image,Image图像的高度、宽度与背景帧或样条帧的高度、宽度相同。Image图像上像素点的R原色亮度值为背景帧上对应位置的像素点的R原色亮度值与样条帧上对应位置的像素点的R原色亮度值的差值的绝对值;Image图像上像素点的G原色亮度值为背景帧上对应位置的像素点的G原色亮度值与样条帧上对应位置的像素点的G原色亮度值的差值的绝对值;Image图像上像素点的B原色亮度值为背景帧上对应位置的像素点的B原色亮度值与样条帧上对应位置的像素点的B原色亮度值的差值的绝对值。
对于上述“二值化”:先将RGB三原色图像Image作灰度化处理。也即,将Image图像由24位图像变为8位图像,以Image图像中像素点的R、G、B等三原色亮度值的均值作为该像素点的灰度值。然后再将Image图像由灰度图像变为二值图像。也即,当Image图像中像素点的灰度值大于经验阈值(也即上述二值化阈值)时,设置该像素点的灰度为255,当Image图像中像素点的灰度值小于经验阈值时,设置该像素点的灰度为0。
步骤S22,通过统计二值图像中各列取值为0的像素点(可以称之为黑色像素点)的个数,确定一维数组。该一维数组可以称之为黑色像素点数组(Array of black pixelpoints,ABPP)。
具体地,以上述二值图像的列次为下标,以该列上灰度值为0的像素点的个数为元素值,得到ABPP。
可以理解的是,上述ABPP中的每一个数组元素用于表征对应列的所有黑色像素点的个数。图5是本发明提供的黑色像素点的统计示意图,如图5所示,图5中的横坐标表示数组元素的序号,图5中的纵坐标表示数组元素的数值。由于样条帧中暗样条纹所在列和背景帧中对应列的差异较大,因而二值图像中对应列的取值为1的像素点较多,而取值为0的像素点(也即上述黑色像素点)较少,进而对应数组元素的数值较小,并在图5中呈现为波谷底。为了实现确定样条帧中暗样条纹的条数(具体可以通过后续步骤S23、步骤S24和步骤S25实现),可以沿图5中的横轴方向划分出多个窗口,分窗口统计以确定各个窗口的状态(顶部状态(对应图5中波形顶部)或底部状态(对应图5中波形底部)),进而根据各个窗口的状态可以确定样条帧中暗样条纹的目标条数。
步骤S23,基于预设窗口尺寸,对一维数组进行分窗口统计梯度,生成窗口链表,窗口链表用于按链表方式存放各个窗口对应的窗口值。
可以理解的是,分窗口的方式可以是沿着数组元素的序号递增的方向分成多个窗口,窗口用于选中一维数组中连续的若干个数组元素,并对所选中的数组元素进行梯度统计。对于某一个中间窗口,该中间窗口的首个数组元素与该中间窗口的前一个窗口的最后一个数组元素相邻,该中间窗口的最后一个数组元素与该中间窗口的后一个窗口的首个数组元素相邻。预设窗口尺寸用于指示窗口所选中的数组元素的参考个数,例如预设窗口尺寸为100,则一个窗口所选中的数组元素的参考个数为100。
例如,上述一维数组的数组元素的总个数为1000,预设窗口尺寸为100,则可以沿着数组元素的序号递增的方向分成10个窗口,每个窗口所选中的数组元素的个数为100。
例如,上述一维数组的数组元素的总个数为990,预设窗口尺寸为100,则可以沿着数组元素的序号递增的方向分成10个窗口,前9个窗口所选中的数组元素的个数为100,最后1个窗口所选中的数组元素的个数为90。
进一步,步骤S23具体包括以下步骤S231和步骤S232。
步骤S231,基于预设累计梯度计算配置,统计各个窗口对应的窗口值。
步骤S232,基于各个窗口对应的窗口值,按链表方式生成窗口链表。
预设累计梯度计算配置用于指示:
对于首个窗口,当累积梯度的绝对值小于或等于预设临界阈值时,将首个窗口内所有数组元素的均值作为整个窗口的窗口值,当累积梯度小于预设临界阈值的负值时,将首个窗口内首个数组元素的数值作为整个窗口的窗口值并设置首个窗口对应的状态为顶部(top)状态,顶部状态用于表征窗口所选中列不具有暗样条纹;当累积梯度大于预设临界阈值时,将首个窗口内首个数组元素的数值作为整个窗口的窗口值并设置首个窗口对应的状态为底部(bottom)状态,底部状态用于表征窗口所选中列具有暗样条纹;
对于除首个窗口之外的任意一个目标窗口,当累积梯度的绝对值小于或等于预设临界阈值时,将目标窗口内所有数组元素的均值作为整个窗口的窗口值;否则,将目标窗口内最后一个数组元素的数值作为整个窗口的窗口值。
窗口的累计梯度的计算方式:用窗口的最后一个数组元素的数值减去窗口的首个数组元素的数值,得出差值,再用该差值除以窗口所选中的数组元素的个数(例如100),得出比值,该比值可以作为窗口的累计梯度。
步骤S24,基于窗口链表,比较各个窗口对应的窗口值,确定各个窗口对应的状态,窗口对应的状态用于表征窗口所选中列是否具有暗样条纹;
进一步,步骤S24具体包括以下步骤S241、步骤S242、步骤S243和步骤S244。
步骤S241,按照预设窗口合并配置,对窗口链表中窗口进行合并,获取合并窗口后的窗口链表,预设窗口合并配置用于指示对于相邻的两个窗口,若两个窗口分别对应的窗口值之间的差值的绝对值小于或等于预设窗口差值,则合并两个窗口。
合并两个窗口的方式:如果要合并相邻的两个窗口(例如第一窗口和第二窗口,且第一窗口为第二窗口的前一个窗口),则可以将第一窗口的尺寸扩大以覆盖第二窗口所选中的数组元素,也即新的第一窗口新增选中的数组元素为第二窗口的数组元素,新的第一窗口的最后一个数组元素为第二窗口的最后一个元素。相应地,可以确定新的第一窗口的窗口值,具体可以计算原第一窗口的窗口值和第二窗口的窗口值之间的平均值,将该平均值作为新的第一窗口的窗口值。得到新的第一窗口之后,可以将第二窗口从窗口链表中删除。
可以理解的是,通过合并窗口,可以减少中间窗口的数量,以减少后续中间窗口状态判断的次数,提高处理效率。
步骤S242,对于合并窗口后的窗口链表,在首个窗口对应的状态未确定的情况下,基于首个窗口对应的窗口值和顺数第二个窗口对应的窗口值,确定首个窗口对应的状态。
示例性地,步骤S242具体包括:
判断首个窗口对应的窗口值与顺数第二个窗口对应的窗口值之间的大小;
若首个窗口对应的窗口值小于顺数第二个窗口对应的窗口值,则确定首个窗口对应的状态为底部状态;否则,确定首个窗口对应的状态为顶部状态。
步骤S243,对于合并窗口后的窗口链表,基于首个窗口对应的状态和各个窗口对应的窗口值,确定各个中间窗口对应的状态。
示例性地,步骤S243具体包括:
对于合并窗口后的窗口链表,从倒数第二个窗口开始,执行递归设置中间窗口状态操作;
递归设置中间窗口状态操作,具体包括:
若目标中间窗口的前一个窗口对应的状态未确定,则针对目标中间窗口的前一个窗口执行递归设置中间窗口状态操作;
若目标中间窗口的前一个窗口对应的状态已确定,则基于预设中间窗口处理配置、目标中间窗口的前一个窗口对应的状态、目标中间窗口对应的窗口值和目标中间窗口的后一个窗口对应的窗口值,确定目标中间窗口对应的状态或合并窗口;
预设中间窗口处理配置用于指示:
若目标中间窗口的前一个窗口对应的状态为顶部状态,当目标中间窗口对应的窗口值小于目标中间窗口的后一个窗口对应的窗口值时,设置目标中间窗口对应的状态为底部状态;当目标中间窗口对应的窗口值大于目标中间窗口的后一个窗口对应的窗口值时,合并目标中间窗口与目标中间窗口的后一个窗口,并将目标中间窗口的后一个窗口对应的窗口值作为合并后的窗口对应的窗口值;
若目标中间窗口的前一个窗口对应的状态为底部状态,当目标中间窗口对应的窗口值大于目标中间窗口的后一个窗口对应的窗口值时,设置目标中间窗口对应的状态为顶部状态;当目标中间窗口对应的窗口值小于目标中间窗口的后一个窗口对应的窗口值时,合并目标中间窗口与目标中间窗口的后一个窗口,并将目标中间窗口的后一个窗口对应的窗口值作为合并后的窗口对应的窗口值。
可以理解的是,在各个中间窗口的状态均未确定的情况下,会一直递归到顺数第二个窗口。
步骤S244,对于合并窗口后的窗口链表,基于倒数第二个窗口对应的窗口值和最后一个窗口对应的窗口值,确定最后一个窗口对应的状态。
示例性地,步骤S244具体包括:
当最后一个窗口对应的窗口值小于倒数第二个窗口对应的窗口值时,则设置最后一个窗口对应的状态为底部状态;否则设置最后一个窗口对应的状态为顶部状态。
步骤S25,基于各个窗口对应的状态,确定样条帧中暗样条纹的目标条数。
本发明可以利用移动终端识别LED照明灯,仅依赖在多个LED灯的照明周期T2内设置不同的目标开关频率,与LED灯之间的部署布局没有关系,也不需要对LED灯做额外的硬件设计。识别方法只依赖移动终端利用CMOS相机采集固定图像宽度W的场景图像,移动终端只需具备简单的图像处理能力,不需要额外设计并加载特殊的硬件模块。本发明设计的基于背景帧与样条帧的暗样条纹检测算法,在执行过程中只需设置三个临界参数,分别是步骤S21中的二值化阈值、步骤S23中的预设临界阈值和步骤S24中的预设窗口差值,三个临界参数对室内照明环境的变化并不敏感。本发明提出的暗样条纹检测算法无论是时间复杂度还是空间复杂度,均与背景帧或样条帧的像素数成线性关系。假设背景帧或样条帧的宽高分别为Width和Height,则算法在步骤S21和步骤S22的计算复杂度和空间复杂度为O(),算法在步骤S23的计算复杂度和空间复杂度为O(Height)。算法在步骤S24和步骤S25的计算复杂度和空间复杂度为O(窗口链表中窗口的个数n),而n远远低于Height。整个算法综合来看,具有良好的实时性。
进一步为了提升识别能力,可以将本发明的方法进行扩展,即在LED一侧,增加照明周期T3,T4等,在移动终端一侧,利用本发明提出的暗样条纹检测算法识别T3,T4照明周期内的样条帧的暗样条纹个数,通过样条纹个数的编排组合增加系统的识别能力。因此,本发明提出的方法适用于任意采用LED灯为照明光源的大型室内场景的定位导航。
本发明提出的LED灯的识别方法,是依赖移动终端感知照明环境的光线特征来完成的,算法具有普遍性,适用于停车场、商场、展览馆、博物馆等大型室内场景的定位导航问题,算法具有实时性、低功耗和低复杂度的优点。
下面对本发明提供的LED灯的识别装置进行描述,下文描述的LED灯的识别装置与上文描述的LED灯的识别方法可相互对应参照。
图6是本发明提供的LED灯的识别装置的结构示意图,如图6所示,该装置包括:图像获取模块100、暗样条纹确定模块200和开关频率确定模块300。
图像获取模块100,用于在LED照明环境下,通过CMOS相机获取背景帧和样条帧,背景帧为没有暗样条纹的图像,样条帧为具有暗样条纹的图像;
暗样条纹确定模块200,用于通过比较背景帧和样条帧,确定样条帧中暗样条纹的目标条数;
开关频率确定模块300,用于基于预设对应关系和目标条数,确定目标条数对应的目标开关频率,预设对应关系用于表征暗样条纹数与LED灯开关频率之间的对应关系,目标开关频率用于标识LED灯;
其中,LED照明环境中的各个LED灯在相邻的两个照明周期分别采用默认开关频率和目标开关频率/>,不同LED灯采用不同的目标开关频率,且/>,/>,/>,S表示CMOS相机的快门时长,CMOS相机采用逐行扫描方式采集图像,W表示CMOS相机所采集图像的宽度,T表示照明周期。
应当理解的是,上述装置用于执行上述实施例中的方法,装置中相应的程序模块,其实现原理和技术效果与上述方法中的描述类似,该装置的工作过程可参考上述方法中的对应过程,此处不再赘述。
基于上述实施例中的方法,本发明实施例提供了一种电子设备。该设备可以包括:至少一个用于存储程序的存储器和至少一个用于执行存储器存储的程序的处理器。其中,当存储器存储的程序被执行时,处理器用于执行上述实施例中所描述的方法。
基于上述实施例中的方法,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,当计算机程序在处理器上运行时,使得处理器执行上述实施例中的方法。
基于上述实施例中的方法,本发明实施例提供了一种计算机程序产品,当计算机程序产品在处理器上运行时,使得处理器执行上述实施例中的方法。
可以理解的是,本发明实施例中的处理器可以是中央处理单元(centralprocessing unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件,硬件部件或者其任意组合。通用处理器可以是微处理器,也可以是任何常规的处理器。
本发明实施例中的方法步骤可以通过硬件的方式来实现,也可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,RAM)、闪存、只读存储器(read-only memory,ROM)、可编程只读存储器(programmable rom,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
可以理解的是,在本发明实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本发明的实施例的范围。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。