发明内容
为解决上述问题,本发明公开了一种安卓平台上基于ROI运动检测的视频实时定位方法,运用图像处理算法对设备捕获的视频进行实时数据转换和图像预处理,再结合基于ROI运动检测算法,计算移动设备的移动幅度,对于移动幅度较小的视频帧略去重复字符定位的过程,在保证字符定位准确率的前提下,提高了字符实时定位的效率。
为了达到上述目的,本发明提供如下技术方案:
一种安卓平台上基于ROI运动检测的视频实时定位方法,包括如下步骤:
步骤10:将原始YUV420格式视频数据流通过YUV与RGB的实时转换算法,转化成RGB格式的视频帧图像;
步骤20:对所述RGB格式的视频帧图像进行预处理,所述预处理过程包括灰度化、二值化和边缘检测处理;
步骤30:采用ROI运动检测方法对每一帧图像进行检测,计算相邻帧状态的变化来跟踪设备的移动幅度,当相邻帧之间运动幅度不大时,沿用前一帧的字符定位结果;当相邻帧之间运动幅度较大时,对后一帧重新进行字符定位。
作为本发明的一种优选方案,所述步骤20中,灰度化方法采用加权平均值法,二值化方法采用OSTU方法计算二值化阈值,所述边缘检测采用Canny边缘检测算法。
作为本发明的一种优选方案,所述ROI运动检测方法包括如下步骤:
步骤301:对初始帧进行字符区域定位,定位的结果区域的位置信息记为第二帧的感兴趣区域的位置信息;
步骤302:分别计算相邻帧感兴趣区域的信息量,并计算相邻帧感兴趣区域的信息量差值的绝对值;
步骤303:当步骤302中信息量差值大于信息差阈值时,对该帧视频进行重新字符定位,当信息量差值不大于信息差阈值时,则沿用前一帧字符定位结果;继续执行步骤302。
作为本发明的一种优选方案,所述对字符进行定位的过程包括如下步骤:
步骤401:对需要进行定位的边缘检测结果进行形态学膨胀处理;
步骤402:对401步骤处理后的图像中的连通域根据预先设定的筛选规则进行筛选,获得字符区域信息,并在二值化图像中对筛选出的连通域的最大外接矩形的位置进行切割,得到字符定位切割的结果。
作为本发明的一种优选方案,所述信息量为黑色像素值,具体的计算方法为:在二值图像点阵中扫描感兴趣区域,累加灰度值为0的点数。
与现有技术相比,本发明提供的基于ROI运动检测的视频实时字符定位方法,利用视频帧之间相似性和连续性的特点,对视频相邻帧感兴趣区域计算信息量变化,进行运动检测,略去相同字符的重复定位过程,对字符定位的效率具有显著提高。此外,本发明针对Android移动设备处理能力的局限性,用Android本地开发框架将复杂的图像处理过程用本地语言C++实现,提高了程序运行的效率。相对于单纯使用Java语言编写和每帧视频都作定位处理的方法,可以有效提高定位的实时性,特别适合处理简单场景下的印刷体多字符定位。
具体实施方式
以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
在进行字符定位时,本方法首先获取Android手持设备采集的当前预览帧数据,在对获取数据进行进一步的图像处理,如图1所示,具体包括如下步骤,本实施例采用联想ThinkPadTablet183823C捕获的一幅包含字符的彩色图像作为原始图像进行处理:
步骤10将YUV420标准格式的视频流转换为RGB格式,RGB格式更易于进行图像处理,通过YUV(即YCrCb)三分量计算视频图像RGB分量公式如下:
R=1.164*(Y-16)+1.596*(Cr-128)
G=1.164*(Y-16)-0.813*(Cr-128)-0.392*(Cb-128) (1-1)
B=1.164*(Y-16)+2.017*(Cb-128)
其中,Y表示明亮度,Cr和Cb是色度,分别定义了颜色的两个方面,即色调与饱和度。
步骤20运用灰度化、二值化方法以及边缘检测方法对视频中每帧图像进行预处理,其中二值化方法采用OSTU方法计算二值化阈值,边缘检测采用Canny边缘检测算法对图像进行轮廓提取。经过预处理后,能够得到字符区域特征明显的处理图像。
具体地说,步骤20的具体步骤如下:
步骤201对格式转换后的视频帧进行灰度化处理,即将彩色RGB图像转化为灰度图像。灰度值的计算优选采用加权平均值法。对RGB的R、G、B分量赋予不同的权值WR、WG、WB,再取它们的加权平均值,用公式表示为:
通常,对于红、绿、蓝三种颜色,人眼对绿色的敏感度最高,红色次之,蓝色最低,因此,本例中选取WR=0.299,WG=0.587,WB=0.114。灰度化的处理结果如图4所示。
步骤202对灰度化后的图像进行二值化处理。设灰度图像中某一点的坐标为(x,y),G={0,1,…,255},G为0到255的整数,即灰度范围,g(x,y)表示(x,y)处的像素灰度值。取灰度值t作为阈值(t∈G),则根据阈值的大小将灰度图中的像素点划分为大于阈值t和小于阈值t的两个部分。阈值t的确定采用最大类间方差法(OTSU),算法将图像在某一灰度值处分割成两组,分别对应背景部分和前景部分(字符部分)。设图像灰度值i(0≤i≤255)在图像中的出现的概率为Pi,全局阈值灰度为t;将图像中的像素分割成两类,即灰度小于等于阈值的背景类A=[0,1,…,t]和灰度大于阈值的前景类B=[t+1,t+2,…,255],背景类和前景类出现的概率分别为PA、PB,则二者的灰度均值ωA和ωB分别描述为:
图像总灰度均值为:
由此可得AB区域的类间方差为:
σ2=PA*(ωA-ω0)2+PB*(ωB-ω0)2 (2-4)
将阈值t在灰度范围0~255之间进行遍历,当公式(2-4)中σ取得最大值即A、B类间方差最大时,对应的t的值即为所取的阈值。
二值化公式为:
其中,b(x,y)是二值化后的像素值。经过OTSU二值化后,图像效果如图5所示。
步骤203对二值化后的图像进行边缘检测。采用Canny边缘检测,即最优的阶梯型边缘检测算法。算法采用高斯一阶微分来计算图像的梯度值,通过寻找图像梯度的局部极大值,得到图像边缘的强度和方向,然后通过双阈值法检测图像的强、弱边缘,当强边缘和弱边缘连接形成轮廓将其输出。核心步骤包括以下几个:
(1)去除图像中的噪声,采用高斯滤波器对图像进行平滑处理,;
(2)求图像灰度值的梯度,包括幅值和方向,通常采用一阶偏导数的有限差分计算;
(3)寻找图像灰度的梯度幅值的局部极大值;
(4)选择两个阈值,通过高阈值得到图像的大致边缘,通过低阈值搜集连接图像的新边缘,解决边缘不闭合问题。
通过以上步骤进行Canny边缘检测的结果如图6所示。
步骤30采用ROI运动检测方法对每一帧图像进行检测,计算相邻帧状态的变化来跟踪设备的移动幅度,判断设备的移动幅度是否较大,当相邻帧之间运动幅度不大时,则可沿用前一帧的字符定位结果,无需对后一帧字符进行重新定位;当相邻帧之间运动幅度较大时,则需要对后一帧重新进行字符定位,即更新字符所在区域ROI。后一帧与前一帧相比的运动幅度通过对比二帧中ROI中的黑色像素值差来判断。通过上述步骤,遍历图像中每一帧,这样无需对移动幅度不大的帧进行重新定位,明显提升了定位效率。
具体的ROI运动检测方法处理流程如图2所示,具体步骤如下:
步骤301对初始帧进行字符定位,定位的结果区域的位置信息记为第二帧的感兴趣区域的位置信息。记录第一帧的字符定位结果为矩形区域Rect1=F1(x1,y1,w1,h1),其中(x1,y1)是矩形左上角在图像中的坐标值,w1是矩形的宽度,h1是矩形的高度。设第i帧图像为Fi,则Fi的字符定位结果为矩形区域Recti=Fi(xi,yi,wi,hi),其中(xi,yi)是矩形左上角在图像中的坐标值,wi是矩形的宽度,hi是矩形的高度,定义第i+1帧图像Fi+1的ROI(感兴趣区域)即为Recti所确定的区域,记为Mi+1,即Mi+1=Fi+1(xi,yi,wi,hi),记第i帧视频中感兴趣区域黑色像素值为信息量Di,具体计算方法为:在二值图像点阵中扫描感兴趣区域,即扫描从[xi,yi]至[xi+wi,yi+hi]区域中的各点,累加灰度值为0的点数,该值即为感兴趣区域的信息量Di。
步骤302计算第i帧和第i+1帧的感兴趣区域的信息量的差值的绝对值为⊿,判断⊿是否大于信息差阈值d。信息差阈值d优选取图像总信息量的1%,即d=M×N/100,M、N分别是图像的宽度和高度。
步骤303若⊿>d,对该帧视频进行重新字符定位。若⊿≤d,表明是相同的字符,无须重复定位,原来i+1帧的字符定位结果和信息量沿用第i帧的结果,具体方式为:Di+1=Di,Mi+1=Mi,i=i+1。最后,转向步骤302,即继续判断下一帧的信息量与当前字符定位区域的信息量差值是否超过阈值d。
步骤301中对初始帧进行字符定位及步骤303中对视频进行重新字符定位的方法相同,为基于形态学和连通域分析相结合的方法。先用数学形态学的膨胀操作将字符区域处理成类似于矩形区域,再对上述类似矩形区域进行连通域筛选,找出其相应的最小外接矩形,进行切割,得到字符定位切割的结果。
进行字符定位的具体处理流程如图3所示,步骤如下:
步骤401对步骤30中需要进行定位的边缘检测结果进行形态学膨胀处理。待处理图像为X,选取结构元素B(3×3的正方形),将B的中心点与X上的点及X四周的点逐个进行滑动比对,若B上有一个点落在X的范围之内,则该点就为黑点。经过形态学膨胀处理的结果后效果如图7所示。
步骤402对上述A步骤处理后的图像中的连通域根据如图8所示的筛选规则(该规则可根据需要进行修改)进行筛选,获得字符区域信息,并在经步骤202处理后的二值化图像中对筛选出的连通域的最大外接矩形的位置进行切割,得到字符定位切割的结果。一般情况下,同一个安卓设备所拍摄的图片大小和像素信息基本相似,设原图像的宽度为W,高度为H,字符连通区域最小外接矩形的宽度为cW,高度为cH,连通域的面积为cA。字符区域的切割结果如图9所示。
上述的各种图像处理和字符定位方法,在处理时采用JNI(Java本地开发)处理框架,将复杂的转换过程用本地语言(C++)编写,提高了程序的效率。
采用本实施例中加入运动检测的字符定位方法进行10组图像字符定位实验,再采用未加入运动检测方式的字符定位方法(即对每一帧图像都进行定位,其余图像处理方法与本实施例相同)进行10图像字符定位实验,将以上两种方法作为对比例,其性能测试和比较结果如图10所示。横坐标表示实验的组数,纵坐标表示在加入ROI运动检测的前后,每帧视频定位所处理的平均时间,单位是毫秒(ms)。加入ROI运动检测步骤的字符定位平均每帧视频的处理时间约90ms,与未加入ROI运动检测相比,处理速度提高了约40%。
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。