一种相机动态网格化摄物测量的方法与流程

文档序号:17482536发布日期:2019-04-20 06:32阅读:183来源:国知局
一种相机动态网格化摄物测量的方法与流程

本发明涉及一种相机动态网格化处理技术,尤其涉及采用相机动态网格化摄物并进行测量的方法。



背景技术:

目前为了实现手机网格化摄物测距的需求,一般现有技术可以通过安装app来实现,即软件应用层要拿到相机上报的图像数据,这方面可以通过frameworkcameraapi接口拿到数据,然后修改这个数据,再利用android作图api接口即可以实现添加网格的功能。

但是现有此类通过在软件应用层的这种实现方式有几个缺点,其一不能广泛适应第三方cameraapp,其二帧率太低,容易造成相机拍摄画面卡顿,从而使得体验效果大打折扣,几乎无法使用。



技术实现要素:

本发明的主要目的在于提供一种相机动态网格化摄物测量的方法,以解决相机动态网格化摄物测量时画面卡顿问题,提高帧率。

为了实现上述目的,根据本发明的一个方面,该相机动态网格化摄物测量的方法包括:获取测距元件采集的被摄物物距d,相机像素尺寸数据x,相机拍摄焦距f,预设参照系数h,计算round[f*h/(d*x)]获取单位网格像素值p;在相机hal层采集系统内核层中yuv数据;修改yuv数据中特定位置y分量值,形成符合单位网格像素值p的网格阵列。

优选地,当相机进入预览模式时,在相机hal层获取该预览数据流中经过isp处理后的yuv数据,修改特定位置的y分量值,以对应当前计算的该单位网格像素值p形成网格阵列。

优选地,当相机进入拍摄模式时,相机hal层获取该快照数据流中经过isp处理后的yuv数据,修改特定位置的y分量值,以对应当前计算的该单位网格像素值p形成网格阵列。

优选地,该相机动态网格化摄物测量的方法还包括:转换提示文字的图片样本成c数组后;与经过网格化的yuv数据进行叠加。

优选地,该相机动态网格化摄物测量的方法还包括:构建缓冲区,并设置其执行先入先出队列机制;计算该缓冲区yuv数据平均值消除数据躁动后;供相机hal层获取消噪后的yuv数据。

优选地,该相机动态网格化摄物测量的方法还包括:应用层相机软件获取当前相机hal层修改yuv数据后绘制的网格图形数据;识别被摄测量物的轮廓;计算所述被摄测量物的轮廓所占网格数量;与预设参照系数h对应计算获取被摄测量物尺寸数据。

优选地,该相机动态网格化摄物测量的方法还包括:应用层相机软件获取被摄测量物尺寸数据与相机软件内部数据库进行比较;根据比较结果在被摄测量物轮廓覆盖的网格范围内填充颜色。

优选地,该相机动态网格化摄物测量的方法还包括:应用层相机软件获取被摄测量物轮廓所覆盖的网格阵列形状数据;与相机软件内部数据库进行比较;根据比较结果在被摄测量物轮廓覆盖的网格范围内填充颜色。

为了实现上述目的,根据本发明的另一方面,还提供了一种手机,中,该手机采用安卓操作系统,且其存储器上存储有指令,该指令用于使该手机执行上述的相机动态网格化摄物测量的方法。

为了实现上述目的,根据本发明的另一方面,还提供了一种机器可读存储介质,中,该机器可读存储介质上存储有指令,该指令用于使得机器执行上述的相机动态网格化摄物测量的方法。

通过本发明提供的该相机动态网格化摄物测量的方法,手机及机器可读存储介质,能够显著提高数据的处理效率,从而至少解决相机动态网格化摄物测量时的画面卡顿问题。

附图说明

构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为安卓系统中相机(camera)模块构架的示意图;

图2为本发明的相机动态网格化摄物测量的方法的流程示意图;

图3为采用本发明的相机动态网格化摄物测量的方法下网格随被摄物体的距离变化而动态调整网格大小的原理示意图;

图4为采用本发明的相机动态网格化摄物测量的方法下在网格上添加提示文字的效果示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。

为了使本领域的技术人员更好的理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,在本领域普通技术人员没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。

其中本文以安卓系统为例进行说明,但并未对本技术所适用的系统进行限制,本领域技术人员应当知晓,任何以linux系统为内核的衍生操作系统中,在符合本文相应系统结构的条件下,皆可适用本发明的技术方案,此外为了更好的进行说明,本发明中示例的安卓系统下的相机模块构架如图1所示包括:上层,即包括:构架层(framework),应用层(application),而下层,即包括:系统内核层(kernel),相机硬件抽象层(hal)。

根据本发明的实施例,提供的一种相机动态网格化摄物测量的方法,其中,该方法主要包括:在相机hal层通过回调函数(callback)获取原本上报给上层的图像原始数据,从而通过修改该原始数据特定位置上的数据,即可实现相机网格的绘制功效。

具体来说,请参阅图2至图3,本方案为了能适应第三方相机应用程序(cameraapp),提高本方案适用的范围,该原始数据为系统内核层(kernel)中的相机驱动程序(cameradriver)上报并经过图像处理器(isp)处理后的yuv格式的数据,其中yuv格式数据包含y分量和uv分量,而y分量则是灰度分量,uv分量即颜色部分,如果在不考虑颜色的条件下绘制网格,那么直接操作y分量即可完成网格的绘制。此外本实施例中为了可视化的凸显网格,可设置该y分量值优选为225。

而为了进一步实现该相机网格的动态化调整,即随着与被摄物体的距离远近,动态的调整网格绘制的尺寸大小,从而对该物体进行测量,则可通过提供测距元件如:tof测距传感器2来获取该相机取景区域上的被摄物体的物距数据d,并获取当前相机像素尺寸数据x即像素对应的实际尺寸,相机当前拍摄所用焦距f,及预设的参照系数h,计算round[f*h/(d*x)]获取单位网格像素值p,从而依据该p值的变化绘制动态的相机网格;此外需要说明的是该参照系数h为现实世界中网格方格的尺寸大小,即代表每个网格以h值为参照进行缩放,如h=1cm则每个方格的大小则为1*1厘米,即便网格大小后续根据摄物距离进行缩放,但每个方格任然代表1厘米的参照,因此后续根据相机拍摄被摄物体后可以估算出该物体所占方格的数量,从而计算出该物体的尺寸。

举例来说,若当前相机参数设置如下:

物体距离数据d=30cm

相机像素尺寸数据x=1.25um

相机拍摄焦距f=4mm

参照系数h=1cm

则该单位网格像素值p=pround[f*h/(d*x)]=round[.4*1/(30*.000125)]=round[106.67]=107像素,即当前每个网格包含107个像素。

从而每次根据上述公式计算,并获取上述p值后,在该hal层中即可对该yuv数据中特定位置的y分量值进行修改,即可形成符合当前单位网格像素值p的网格阵列,从而也就实现了网格动态缩放的功能。

而在优选实施方式中,为了在相机预览画中绘制该网格,则通过该相机hal层获取该预览(preview)数据流中经过isp处理后的yuv数据,修改特定位置的y分量值以对应当前计算的该单位网格像素值p从而形成网格绘制,具体代码示例如下:

处理预览画网格代码示例::

而在另一种优选实施方式中,为了在相机拍照中绘制该网格,由于相机捕捉影像时会抓取到很多帧,因此只要找到了快照(snapshot)的那帧即可,即可通过该相机hal层获取该快照(snapshot)数据流中经过isp处理后的yuv数据,修改特定位置的y分量值以对应当前计算的该单位网格像素值p,从而形成网格绘制,具体代码示例如下:

处理拍照网格代码示例:

此外在另一种优选实施方式中,为了在该相机网格画面上显示当前网格大小尺寸比值等的文字提示,若通过opengles来做的话,要yuv格式数据先转rgb格式数据,再通过gpu进行处理,因此效率不佳,而本发明则主要通过yuv和bmp进行数据叠加来实现。

具体来说,例如首先需要提供所需显示的提示文字的图片样本,如图4中包含0~9的数字图片样本及包含c,m,d,i,v的文字图片样本,之后将该提示文字的8位图片样本,转换成c数组,然后和经过网格化的yuv数据进行叠加,即该yuv中的y分量先经过对应p值的修改,之后与该转换后的提示文字的图片数据进行叠加,籍此便可在该网格画面上显示文字提示。本实施例中以转换成16x20分辨率的数组为例进行说明。

其中8位bmp数据(部分示例)包括如下:

externintimg_w_16;

externintimg_h_20;

externconstunsignedchard_16x20_0[];

externconstunsignedchard_16x20_1[];

externconstunsignedchard_16x20_2[];

externconstunsignedchard_16x20_3[];

externconstunsignedchard_16x20_4[];

externconstunsignedchard_16x20_5[];

externconstunsignedchard_16x20_6[];

externconstunsignedchard_16x20_7[];

externconstunsignedchard_16x20_8[];

externconstunsignedchard_16x20_9[];

externconstunsignedcharunit_16x20_c[];

externconstunsignedcharunit_16x20_m[];

externconstunsignedcharslash_16x20_s[];

externconstunsignedchardiv_16x20_d[];

externconstunsignedchardiv_16x20_i[];

externconstunsignedchardiv_16x20_v[];

externconstunsignedchar*imgarrays_16x20[];

以下以其中字母d为例进行示例说明:字母d的16x20分辨率的数组;

之后格式化数据:

在完成上述数据处理后,进行叠加处理(部分示例):

从而通过上述的叠加数据处理,该预设的文字即可在该当前绘制的网格上进行叠加显示,以便使用者能够直观的了解当前网格大小的提示信息,而通过上述叠加数据处理,能够较好的提高处理效率,以提高后续显示该网格画面及文字提示时的fps帧数,从而降低同等条件下的硬件性能要求,提高使用体验。

而在另一个实施方式中,由于相机系统中的底层有时会受到干扰信号,上报的yuv数据会有小幅变动,从而造成所绘制的网格不断抖动,而无法测量物体大小,而为了防止该网格抖动的问题,该相机动态网格化摄物测量的方法中对应步骤包括:构建缓冲区(buf),并采用先入先出队列机制(fifo),使得新人数据存在队尾,旧数据从队首出去;对该buf求平均值,从而通过滤波算法消除数据躁动,以为该相机hal层提供消噪后的yuv数据,籍此消除网格不断抖动的问题。

此外在本发明的另一较佳实施方式中,该相机动态网格化摄物测量的方法还包括:通过应用层相机软件获取当前相机hal层修改yuv数据后绘制的网格图形数据;从而利用软件的图像识别功能,识别被摄测量物的轮廓,籍此来计算所述被摄测量物的轮廓所占网格数量,并与预设参照系数h对应计算来获取被摄测量物尺寸数据,从而可以加速此类应用软件处理取景测量的速度,加速获得测量的结果数据。

而为了进一步实现可视化提示测量数据的判断结果,其中该相机动态网格化摄物测量的方法还包括:应用层相机软件获取被摄测量物尺寸数据与相机软件内部数据库进行比较,其中该数据中可预设各类参数数据,以供进行比较判断,从而根据比较结果在被摄测量物轮廓覆盖的网格范围内填充颜色,如符合尺寸数据的情况下填充具有透明度的绿色,不符合的话则填充具有透明度的红色,籍此可以直观的获知该被测物体是否符合预设的尺寸判断结果,并整体提升此类具有视觉提示的尺寸判断处理速度。

另一方面为了实现对被测物体形状判断的可视化提示,该相机动态网格化摄物测量的方法还包括:在应用层相机软件获取被摄测量物轮廓所覆盖的网格阵列形状数据,从而通过该网格阵列图案可以初步判断被测物体的大致形状,从而该网格阵列数据与相机软件内部数据库进行比较后,可以得知是否属于数据库中被记载的网格阵列形状数据,籍此根据比较结果在被摄测量物轮廓覆盖的网格范围内填充颜色,以示出该形状是否与数据库中的示例相同或近似。如符合网格阵列形状数据的情况下填充具有透明度的绿色,不符合的话则填充具有透明度的红色,籍此可以直观的获知该被测物体是否符合预设的形状判断结果,并整体提升此类具有视觉提示的形状判断处理速度。

本发明的另一方面,还提供了一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行上述各实施例中该相机动态网格化摄物测量的方法。

从而通过本实施例中上述该相机动态网格化摄物测量的方法,在相机hal层通过对yuv数据进行特定的修改,可以极大的提高数据的处理效率,相比之下,在应用层(app层)实现该网格绘制的效率通常只有7fps,而在安卓相机硬件抽象层(androidcamerahal)则可以达到30fps。效率较前者有着明显的提升,而另一方面通过本发明的技术可以在相机摄物时通过观测网格的动态变化,来估测该物体的实际大小,因此可以广泛的满足各类摄像装置取景测量的需求。

以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1