CN103679630A - 一种视频旋转方法 - Google Patents
一种视频旋转方法 Download PDFInfo
- Publication number
- CN103679630A CN103679630A CN201210320566.3A CN201210320566A CN103679630A CN 103679630 A CN103679630 A CN 103679630A CN 201210320566 A CN201210320566 A CN 201210320566A CN 103679630 A CN103679630 A CN 103679630A
- Authority
- CN
- China
- Prior art keywords
- pixel value
- rotation
- divergent
- convergent
- video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Processing (AREA)
Abstract
本申请公开了一种视频旋转方法,包括:确定源视频的图像分辨率和目标缩放率,在目标旋转角度和目标缩放率下,按照预先确定出的缩放前像素值与旋转后像素值间的函数关系,直接根据源视频每帧的各像素值计算旋转后视频每帧的各像素值,并按照计算结果进行显示。应用本申请,能够大大降低对***内存的消耗。
Description
技术领域
本申请涉及视频处理技术,特别涉及一种视频旋转方法。
背景技术
现有的智能多媒体播放设备在播放视频时可由内置方向传感器获知设备屏幕的角度变化从而进行90度、180度或者270度的旋转。视频的旋转多数可以通过硬件设备,如视频处理芯片的相应功能完成。但当没有可完成类似功能的硬件设备存在时,或者该硬件设备不提供相应的旋转功能接口时,视频播放器需要采用软件处理的方法对解码后并即将显示的视频图像进行旋转,而后进行显示。
现有的采用软件处理方式对图像进行90/180/270度旋转的方法包括两个步骤:
1)保持原图像宽高比的图像缩放:因为图像显示区域的大小恒定,当90/270旋转后,图像的宽、高发生交换可能会超出显示区域的大小,若需要将旋转后的图像仍然显示在该显示区域,则需要将图像进行缩放,如图1所示。(180度旋转不需要此步骤,其旋转后的宽度和高度不变)
2)90/180/270度旋转时查找目的图像的每个像素点在缩放后的原图像上对应的像素点,并拷贝该像素值。
对于需要旋转的图像无论是从硬件或软件视频解码器输出,一般多存储于一维的连续内存。因此上述旋转方法存在以下缺点:
1)需要中央处理器(CPU)消耗大量的乘法、加法运算和内存访问操作在逐像素的坐标计算和数据存取上。导致每帧视频图像的旋转操作速度过慢,尤其对高清(HD,1280x720分辨率)、全高清(Full HD 1920x1080分辨率)的视频图像的旋转速度远远超过可流畅播放视频的最低限制。
2)缩放和旋转需要先后进行,而且需要储存中间过程的图像(即缩放后的图像),对***内存消耗较大。
发明内容
本申请提供一种视频旋转方法,能够降低视频旋转过程中对内存的消耗。
一种视频旋转方法,包括:
确定源视频的图像分辨率和目标缩放率,按照目标旋转角度和所述目标缩放率,根据源视频每帧的各像素值和预先确定出的缩放前像素值与旋转后像素值间的函数关系,计算旋转后视频每帧的各像素值,并按照计算结果进行显示;
其中,所述缩放前像素值与旋转后像素值间的函数关系为预先根据缩放法则的缩放前像素值和缩放后像素值间的函数关系以及90/180/270度旋转的旋转前像素值和旋转后像素值间的函数关系确定的;其中,90度旋转的旋转前像素值和旋转后像素值间的函数关系为x=0,1,...,H/r-1,y=0,1,...,W/r-1;180度旋转的旋转前像素值和旋转后像素值间的函数关系为v(x,y)=u(W-1-x,H-1-y),x=0,1,...,W-1,y=0,1,...,H-1;270度旋转的旋转前像素值和旋转后像素值间的函数关系为x=0,1,...,H/r-1,y=0,1,...,W/r-1;v(x,y)为旋转后坐标为(x,y)点的像素值,u(x′,y′)为缩放后、旋转前坐标为(x′,y′)点的像素值;W和H分别为所述源视频的宽度和高度,r为所述目标缩放率。
较佳地,该方法进一步包括:在确定所述源视频的图像分辨率和目标缩放率之后、计算旋转后目标视频每帧的各像素值前,该方法进一步包括:
将所述缩放前像素值与旋转后像素值间的函数关系分解为坐标点表达式部分和像素值表达式部分,并将分解出的各个所述坐标点表达式部分分解为若干乘法操作的求和操作;对于任一所述乘法操作,对应旋转后视频各坐标点(x,y)计算该乘法操作的结果,并对应(x,y)进行保存;其中,像素值表达式部分是对坐标点表达式部分的结果进行处理的操作;
所述计算旋转后视频每帧的各像素值包括:对应旋转后视频每帧的任一坐标点(x,y),查找对应该取值保存的各所述乘法操作的结果,并根据相应的结果计算各所述坐标点表达部分的处理结果,再将该处理结果代入所述像素值表达式部分,计算任一坐标点(x,y)的像素值。
较佳地,在所述对应旋转后视频各坐标点(x,y)计算各所述乘除法操作的结果并对应(x,y)进行保存后,计算旋转后视频每帧的各像素值前,该方法进一步包括:将旋转后视频的每帧图像从上到下均分为N个部分,分别分配给N个旋转线程;所述N为预设的整数;
在计算旋转后视频每帧的各像素值时,各个旋转线程并行进行相应部分图像坐标点(x,y)的像素值计算;其中,对应(x,y)保存的各所述乘除法操作的结果在每个线程中保存一份。
较佳地,所述缩放法则为最近邻域法;
所述缩放前像素值和缩放后像素值间的函数关系为:u(x,y)=f(xr,yr),f(xr,yr)为缩放前坐标点(xr,yr)的像素值;
90度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f(yr,(H/r-1-x)r);180度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f(W-1-x,H-1-y);270度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f((W/r-1-y)r,xr)。
较佳地,当所述缩放前的像素值和缩放后的像素值均按照光栅扫描顺序分别利用一维数组src[]和dst[]表示时,90度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yH/r+x]=src[(H/r-1-x)Wr+yr];180度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yW+x]=src[W(H-1-y)+W-1-x];270度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yH/r+x]=src[xWr+(W/r-1-y)r]。
较佳地,所述目标旋转角度为90度时,所述坐标点表达式部分包括:yH/r+x和(H/r-1-x)Wr+yr;乘法操作包括:yH/r、(H/r-1-x)Wr和yr;
所述目标旋转角度为180度时,所述坐标点表达式部分包括:yW+x和W(H-1-y)+W-1-x;乘法操作包括:yW和W(H-1-y);
所述目标旋转角度为270度时,所述坐标点表达式部分包括:yH/r+x和xWr+(W/r-1-y)r;乘法操作包括:yH/r、xWr和(W/r-1-y)r。
较佳地,当所述缩放前的像素值和缩放后的像素值均按照光栅扫描顺序利用一维数组表示、且目标缩放率<1时,
对于90度和270度的旋转,在计算旋转后视频每帧的各像素值时按照列优先顺序进行;
对于180度的旋转,在计算旋转后视频每帧的各像素值时按照行优先顺序进行。
由上述技术方案可见,确定源视频的图像分辨率和目标缩放率,在目标旋转角度和目标缩放率下,按照预先确定出的缩放前像素值与旋转后像素值间的函数关系,直接根据源视频每帧的各像素值计算旋转后视频每帧的各像素值,并按照计算结果进行显示。上述处理方式中,不需要将缩放和旋转的操作先后分两步执行,而是直接一步完成缩放加旋转,从而避免了在处理过程中额外占用***内存存储缩放后图像,大大降低了对***内存的消耗。
进一步地,可以将缩放前像素值与旋转后像素值间的函数关系中仅与坐标点相关的处理分离出来,对应旋转后视频的各坐标点,一次性计算相应的处理结果并对应相应的坐标点进行保存。在实际播放视频图像时,根据坐标点对应查找相应的处理结果,再利用该处理结果计算旋转后的像素值,从而在视频图像处理过程中,避免在每一帧图像处理时,都要实时进行所有函数关系的运算,而只需要在最初计算一次坐标点相关的运算,之后可以直接利用初次计算结果,大大降低了实时运算量,提高图像处理速度;同时,还可以将每一帧图像分成多个部分,利用多线程并行进行每个部分的图像旋转,再合成显示,从而进一步提高处理速度。
附图说明
图1为现有方法全高清视频90度旋转示意图;
图2为本申请实施例中视频旋转方法的具体流程图。
具体实施方式
为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。
本申请的基本视频旋转方法包括:确定源视频的图像分辨率和目标缩放率,按照目标旋转角度和所述目标缩放率,根据源视频每帧的各像素值和缩放前像素值与旋转后像素值间的函数关系,计算旋转后视频每帧的各像素值,并按照计算结果进行显示。
其中,缩放前像素值和旋转后像素值间函数关系的确定方式包括:根据缩放法则中缩放前和缩放后像素值间的函数关系以及90/180/270度旋转的旋转前像素值和旋转后像素值间的函数关系确定。具体地,对应每种缩放法则,都有确定的缩放前和缩放后像素值间的函数关系,可以根据实际需要选择缩放法则,确定相应的函数关系;对于90度旋转,旋转前像素值和旋转后像素值间的函数关系为x=0,1,...,H/r-1,y=0,1,...,W/r-1;对于180度旋转,旋转前像素值和旋转后像素值间的函数关系为v(x,y)=u(W-1-x,H-1-y),x=0,1,...,W-1,y=0,1,...,H-1;对于270度旋转,旋转前像素值和旋转后像素值间的函数关系为 x=0,1,...,H/r-1,y=0,1,...,W/r-1。
通过上述基本方法,预先将缩放和旋转的处理整合为一步映射,从而直接利用源视频的各坐标点像素值计算确定旋转后的各坐标点像素值,以避免处理过程中占用***内存保存缩放后的图像,节省***内存。
为进一步提高处理速度,还可以在确定源视频的图像分辨率和目标缩放率之后、计算旋转后目标视频每帧的各像素值前,将确定的缩放前像素值与旋转后像素值间的函数关系分解为坐标点表达式部分和像素值表达式部分,并将分解出的各个坐标点表达式部分分解为若干乘法操作的求和操作;对于其中任一乘法操作,提前对应旋转后视频的各坐标点(x,y)计算该乘法操作的结果,并对应(x,y)进行保存;其中,像素值表达式部分是对坐标点表达式部分的结果进行处理的操作;这样一来,在根据源视频的图像分辨率和目标缩放率确定出旋转后的视频图像分辨率后,旋转后视频的各坐标点取值范围已经确定,即可以将所有坐标点对应的各乘法操作结果预先计算出来,并与相应的坐标点对应保存,在后续处理时,只需要对应坐标点查找相应的乘法操作结果,而不需要在每帧图像旋转处理时均实时进行乘法运算,大大提高了处理速度。
具体地,在计算旋转后视频每帧的各像素值时,对应旋转后视频每帧的任一坐标点(x,y),查找对应该取值保存的各乘法操作的结果,并根据相应的结果计算各坐标点表达部分的处理结果,再将该处理结果代入像素值表达式部分,计算所有坐标点(x,y)的像素值。
同时,由于各图像部分甚至各像素之间没有相关性,因此对于能够进行多线程处理的***,可以将旋转后视频的每帧图像从上到下均分为N个部分,分别分配给N个旋转线程,并行进行相应图像部分的旋转操作,即计算相应图像部分的像素值。其中,可以根据***多线程处理能力设置N的取值。
下面通过具体实施例说明本申请中视频旋转方法的具体流程。由于目前视频源图像通常是宽大于高,因此比较通常的全屏应用中,进行旋转后图像是缩小的,也就是目标缩放率小于1,这种情况下,优选地,缩放法则选择最近邻域法,一方面图像缩放质量不会损失过大,同时运算复杂度又比较低。
在下面的实施例中,就以采用最近邻域法进行旋转前的缩放为例说明本申请中的视频旋转方法。如图2所示,该方法包括:
步骤201,确定源视频的分辨率和目标缩放率,确定缩放前和旋转后像素值间的函数关系。
设每一帧源视频图像宽度为W,高度为H,90/270度旋转时需要首先对图像进行缩放,假定目标缩放率为r,则缩放后图像的宽度w和高度h分别为:
其中,目标缩放率r可以由用户或高层应用进行设定。通常,全屏条件的旋转,要求既不超出原显示区域,又能保持源图像宽高比要求,相应的缩放比例为:
下面的流程中,以式(2)所示的r取值为例进行说明。
设源图像在每个坐标(x,y)上的像素值为f(x,y);缩放后的图像在每个坐标(x,y)上的像素值为u(x,y),则使用最近邻域法对图像进行缩放后目标图像和原图像的像素对应关系为:
u(x,y)=f(xr,yr) (3)
对该缩放后的图像进行旋转,设旋转后的图像在每个点(x,y)的像素值为v(x,y),则其与缩放图像u(x,y)的对应关系如下:
A)90度旋转,图像宽度为h,高度为w,其像素值对应关系为:
v(x,y)=u(y,h-1-x) (4)
将(4)代入(3),得到缩放前和旋转后的像素值函数关系为:
v(x,y)=f(yr,(h-1-x)r) (5)
B)180度旋转,不需要进行缩放,目标图像宽度为W,高度为H不变,其缩放前和旋转后的像素值函数关系为:
v(x,y)=f(W-1-x,H-1-y) (6)
C)270度旋转,图像宽度为h,高度为w,其像素值对应关系为:
v(x,y)=u(w-1-y,x) (7)
将(7)代入(3),得到缩放前和旋转后的像素值函数关系为:
v(x,y)=f((w-1-y)r,xr) (8)
另外,当r的取值如式(2)所示时,为了消除坐标映射中的浮点运算,不直接进行乘以r的操作,而是通过乘以再除以的操作实现,基于此,最终的坐标映射关系式如下:
180°∶v(x,y)=f(W-1-x,H-1-y)
如上,可以将(9)式作为缩放前和旋转后的像素值函数关系,进行像素值计算。
而进一步地,在实际的播放***中,无论硬件或软件视频解码器的输出图像多存储于一维的连续内存(按照从左到右从上到下的光栅扫描顺序存储)。设源图像的每一个分量(通常为Y、Cb或者Cr分量)的像素存储于一维数组unsignedchar*src,缩放旋转后的目标图像的每一个分量输出于一维数组unsigned char*dst,则目标图像中每一点缩放旋转的过程可表示为(90/270度旋转目标图像的宽度为h,高度为w,180度旋转目标图像宽度高度不变,仍为W、H):
x=0,1,2,...,h-1 y=0,1,2,...,w-1
180°∶dst[yW+x]=src[W(H-1-y)+W-1-x]
x=0,1,2,...,W-1 y=0,1,2,...,H-1 (10)
式(10)即为本实施例中同时结合缩放和旋转的一步坐标映射方法。可见,该方法不需要存储旋转后的中间图像。另外,(10)须应用于每帧视频图像的每一个分量,常见视频图像的子采样格式为YCbCr 4∶2∶0。
由式(10)可见,90、270度旋转时,每帧视频图像每个分量的每个像素点都需要进行4次整数乘法、2次整数除法和4次加法;180度旋转时需要进行2次整数乘法和6次加法。通过分析和观察,可发现对于视频的每一帧图像,(10)式中参与计算的参数对每一帧图像相同,而且即使在同一帧视频图像当中,也有参数不变。因此,为进一步降低处理的复杂度,本实施例中提出了建立查找表并在旋转过程中仅使用查找表和加法的方法同时进行缩放和旋转。
步骤202,将步骤201中确定的函数关系进行分解,并对应各分解部分建立坐标映射表,用于对应旋转后视频的各坐标点,保存相应的分解部分计算结果。
具体地,如前所述,将确定的缩放前像素值与旋转后像素值间的函数关系分解为坐标点表达式部分和像素值表达式部分,具体到式(10)中,以90度旋转为例,即将对应的函数关系分解为像素值表达式部分dst[a]和src[b],坐标点表达式部分a=yh+x和 其中,像素值表达式部分是对坐标点表达式部分处理结果a和b进行处理的操作。进一步地,将坐标点表达式部分进一步分解为多个乘法操作的求和处理,即将a分解得到的乘法操作为yh,将b分解得到的乘法操作包括和
同理,将180度旋转的函数关系进行分解得到的乘法操作包括yW和W(H-1-y),将270度旋转的函数关系进行分解得到的乘法操作包括yh、和对应所有可能的坐标点(x,y)取值,计算上述涉及的各个乘法操作的处理结果,并对应坐标点(x,y)进行保存,共形成7个坐标映射表。其中,对于180度旋转的坐标点(x,y)和90/270度旋转的坐标点(x,y)取值范围有所不同,需要额外注意一下。
具体地,建立坐标映射表可以通过下面的代码实现:
除上述乘法操作外,对于180度函数关系中的W-1-x也可以预先计算出结果构成相应的坐标映射表,这样,三种角度旋转的处理就都可以变成两次加法和两次查表操作完成。具体实现的代码可以如下:
步骤203,在每一帧图像解码完成后,对应每个分量的各坐标点(x,y)进行查表确定相应的乘法操作结果,并最终计算得到相应的像素值。
在一帧图像解码完成后,对应每个分量计算各坐标点的像素值。其中,对于每帧中每个分量的处理方式相同,以一个分量为例进行说明:
按照前述步骤202的分解结果,通过建立的坐标映射表确定坐标点(x,y)的乘法操作结果,再代入相应的坐标点表达式部分和像素值表达式部分,计算出相应坐标点的像素值。三种旋转角度下坐标点像素值的计算可以分别由下述三段代码实现:
1、90度旋转
3、180度旋转
由上述可见,一方面,90、270度旋转时,每帧视频图像每个分量的每个像素点只需进行约2次整数加法和2次查表计算;180度旋转时只需进行约2次整数加法和1次查表计算。因此,该方法可极大程度减少计算量。
另一方面,如上1、2所示,为进一步提高计算速度,将目标图像的纵轴(即y方向)放入内层循环。这是因为90/270度旋转时目标图像尺寸小于源图像,目标图像的纵轴放入内层循环,也就是在计算旋转后图像的像素值时,按照列优先顺序进行,这样,对较宽的源图像可沿着横轴进行连续的逐点访问,符合局部连续访问的原则,从而提高高速缓冲(Cache)的命中率。其效率远高于直接访问内存。而如3所示,180度旋转因为没有发生宽、高的交换,因此将横轴放入内层循环,即按照行优先顺序计算各坐标点的像素值,从而能够提高Cache的命中率。同时,目标图像若直接使用显示缓冲进行显示,需将显示缓冲的Cache功能打开,进一步提升速度。
另外,本方法只需在文件播放伊始一次性建立所有查找表,而后播放过程中若角度发生变化可切换使用的函数和查找表进行动态旋转。
除上述直接依次计算旋转后一帧图像各坐标点的像素值外,当***支持多线程处理时,可以将旋转后视频的每帧图像从上到下均分为多个部分,分别分配给多个旋转线程;每个旋转线程独立进行一个部分图像的坐标点像素值计算。
具体地,并行处理方式可以包括如下步骤:
步骤a、在获得视频分辨率、建立坐标映射表之后,根据预设线程数N(N≥CPU数),启动N个线程thread[i](i=0,1,2,...,N-1),并对每个线程建立一个储存上下文信息的数据结构thread_context[i](i=0,1,2,...,N-1);
步骤b、为防止各线程同时竞争访问相同的坐标映射表而降低效率,将坐标映射表T1~T8为每个线程复制一份;
在解码每一帧图像后,计算该帧的旋转后图像各坐标点像素值时进行如下处理:
步骤c、从显示缓冲中申请目标图像的空间,获得该图像的指针dst,并将之分配给所有旋转线程,即
thread_context[i]->dst=dst;
步骤d、将目标图像从上到下均分为N个部分,分别分配给各个旋转线程。其中需要计算各个部分(属于线程i的图像部分)的起始纵坐标start_y和最大纵坐标end_y,每部分的坐标范围为(0,start_y)~(h-l,end_y),计算方法如下:
90/270度:
thread_context[i]->start_y=w*i/N;
thread_context[i]->end_y=min(w*(i+1)/N-1,w-1);
180度:
thread_context[i]->start_y=H*i/N;
thread_context[i]->end_y=min(H*(i+1)/N-1,H-1);
步骤e、在各个旋转线程内部,当主解码线程完成一帧的解码并将解码后的图像指针src传递给各旋转线程时,各旋转线程对该src指针所指向的源图像中属于本线程的图像部分进行旋转,其各线程的旋转过程如下:
90度旋转:
270度旋转:
180度旋转:
步骤f、各旋转线程在完成当前图像块的旋转之后通知主线程本线程当前任务结束,置空src指针,等待下一幅输入图像,并循环执行步骤e)~f);
步骤g、主线程在获知当前所有旋转线程完成当前任务后,将显示缓冲中的目标图像进行显示,并等待下一次解码完成。
需要指出的是,在主线程和各旋转线程进行通信时,需要结合使用参数变量、条件变量以及对共享可写数据进行加锁保护,否则不仅可能造成图像错误,还可能很大程度降低处理速度,破坏理想的并行流水线旋转算法。具体处理属于本领域技术人员的公知常识,这里就不再赘述。
通过上述多线程的并行处理,能够进一步提高视频图像的旋转速度。
至此,本实施例中的方法流程结束。
由上述本申请及具体实施例的详细描述可见,本申请使用了缩放和旋转的坐标映射和一步操作,消除了整数乘法、除法,移除了大部分的加法计算,代之以少量的查表、加法计算和可充分提高Cache命中率的旋转操作,极大提高了算法的运行速度;同时,本申请还使用了多线程的并行旋转方法进一步成倍的提升了在多核平台上的运行速度。
本申请提出的所有方法均可以在实际嵌入式多媒体播放***中进行使用,对硬件视频解码器输出的每帧图像进行旋转而后显示在显示缓冲中。
下面给出利用本申请的方法和背景技术中的方法进行视频图像旋转的性能比较。运行环境为基于ARMv7 Cortex A8、1GHz Dual-Core(双核)CPU、1.5GB内存的嵌入式片上***。性能对比结果如表1所示。
表1本发明与优化前视频旋转方法的性能对比
由性能对比可见,本申请的视频旋转方法完全能够使得高清、全高清视频播放的流畅性和实时性不受影响,而且相对于未经优化的原始方法提高数十倍。并且,在双核的***上使用本申请的2线程旋转,相对于单线程计算,可进一步减少50%左右的运行时间,其结果接近并行计算的理论值。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (8)
1.一种视频旋转方法,其特征在于,包括:
确定源视频的图像分辨率和目标缩放率,按照目标旋转角度和所述目标缩放率,根据源视频每帧的各像素值和预先确定出的缩放前像素值与旋转后像素值间的函数关系,计算旋转后视频每帧的各像素值,并按照计算结果进行显示;
其中,所述缩放前像素值与旋转后像素值间的函数关系为预先根据缩放法则的缩放前像素值和缩放后像素值间的函数关系以及90/180/270度旋转的旋转前像素值和旋转后像素值间的函数关系确定的;其中,90度旋转的旋转前像素值和旋转后像素值间的函数关系为x=0,1,...,H/r-1,y=0,1,...,W/r-1;180度旋转的旋转前像素值和旋转后像素值间的函数关系为v(x,y)=u(W-1-x,H-1-y),x=0,1,...,W-1,y=0,1,...,H-1;270度旋转的旋转前像素值和旋转后像素值间的函数关系为x=0,1,...,H/r-1,y=0,1,...,W/r-1;v(x,y)为旋转后坐标为(x,y)点的像素值,u(x′,y′)为缩放后、旋转前坐标为(x′,y′)点的像素值;W和H分别为所述源视频的宽度和高度,r为所述目标缩放率。
2.根据权利要求1所述的方法,其特征在于,该方法进一步包括:在确定所述源视频的图像分辨率和目标缩放率之后、计算旋转后目标视频每帧的各像素值前,该方法进一步包括:
将所述缩放前像素值与旋转后像素值间的函数关系分解为坐标点表达式部分和像素值表达式部分,并将分解出的各个所述坐标点表达式部分分解为若干乘法操作的求和操作;对于任一所述乘法操作,对应旋转后视频各坐标点(x,y)计算该乘法操作的结果,并对应(x,y)进行保存;其中,像素值表达式部分是对坐标点表达式部分的结果进行处理的操作;
所述计算旋转后视频每帧的各像素值包括:对应旋转后视频每帧的任一坐标点(x,y),查找对应该取值保存的各所述乘法操作的结果,并根据相应的结果计算各所述坐标点表达部分的处理结果,再将该处理结果代入所述像素值表达式部分,计算任一坐标点(x,y)的像素值。
3.根据权利要求2所述的方法,其特征在于,在所述对应旋转后视频各坐标点(x,y)计算各所述乘除法操作的结果并对应(x,y)进行保存后,计算旋转后视频每帧的各像素值前,该方法进一步包括:将旋转后视频的每帧图像从上到下均分为N个部分,分别分配给N个旋转线程;所述N为预设的整数;
在计算旋转后视频每帧的各像素值时,各个旋转线程并行进行相应部分图像坐标点(x,y)的像素值计算;其中,对应(x,y)保存的各所述乘除法操作的结果在每个线程中保存一份。
5.根据权利要求3所述的方法,其特征在于,所述缩放法则为最近邻域法;
所述缩放前像素值和缩放后像素值间的函数关系为:u(x,y)=f(xr,yr),f(xr,yr)为缩放前坐标点(xr,yr)的像素值;
90度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f(yr,(H/r-1-x)r);180度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f(W-1-x,H-1-y);270度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:v(x,y)=f((W/r-1-y)r,xr)。
6.根据权利要求5所述的方法,其特征在于,当所述缩放前的像素值和缩放后的像素值均按照光栅扫描顺序分别利用一维数组src[]和dst[]表示时,90度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yH/r+x]=src[(H/r-1-x)Wr+yr];180度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yW+x]=src[W(H-1-y)+W-1-x];270度旋转的所述缩放前像素值和旋转后像素值间的函数关系为:dst[yH/r+x]=src[xWr+(W/r-1-y)r]。
7.根据权利要求6所述的方法,其特征在于,所述目标旋转角度为90度时,所述坐标点表达式部分包括:yH/r+x和(H/r-1-x)Wr+yr;乘法操作包括:yH/r、(H/r-1-x)Wr和yr;
所述目标旋转角度为180度时,所述坐标点表达式部分包括:yW+x和W(H-1-y)+W-1-x;乘法操作包括:yW和W(H-1-y);
所述目标旋转角度为270度时,所述坐标点表达式部分包括:yH/r+x和xWr+(W/r-1-y)r;乘法操作包括:yH/r、xWr和(W/r-1-y)r。
8.根据权利要求1到7中任一所述的方法,其特征在于,当所述缩放前的像素值和缩放后的像素值均按照光栅扫描顺序利用一维数组表示、且目标缩放率<1时,
对于90度和270度的旋转,在计算旋转后视频每帧的各像素值时按照列优先顺序进行;
对于180度的旋转,在计算旋转后视频每帧的各像素值时按照行优先顺序进行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210320566.3A CN103679630A (zh) | 2012-09-03 | 2012-09-03 | 一种视频旋转方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210320566.3A CN103679630A (zh) | 2012-09-03 | 2012-09-03 | 一种视频旋转方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103679630A true CN103679630A (zh) | 2014-03-26 |
Family
ID=50317088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210320566.3A Pending CN103679630A (zh) | 2012-09-03 | 2012-09-03 | 一种视频旋转方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103679630A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106791481A (zh) * | 2016-12-13 | 2017-05-31 | 广东威创视讯科技股份有限公司 | 视频数据旋转方法和*** |
CN109348139A (zh) * | 2018-10-19 | 2019-02-15 | 北京凯视达科技有限公司 | 视频旋转方法、装置、计算机可读存储介质及电子设备 |
CN110191298A (zh) * | 2019-04-17 | 2019-08-30 | 广州虎牙信息科技有限公司 | 移动终端及其录屏中的视频旋转方法、计算机存储介质 |
CN114913076A (zh) * | 2022-07-19 | 2022-08-16 | 成都智明达电子股份有限公司 | 一种图像缩放旋转方法、装置、***及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1512449A (zh) * | 2002-12-30 | 2004-07-14 | 英业达股份有限公司 | 圆形旋转与缩放的处理***及其方法 |
CN101102498A (zh) * | 2007-07-26 | 2008-01-09 | 北京华纬讯电信技术有限公司 | 一种高清视频图像处理方法 |
CN102054264A (zh) * | 2009-11-03 | 2011-05-11 | 三星电子株式会社 | 图像处理器和电子装置以及图像处理方法 |
CN102622991A (zh) * | 2011-02-01 | 2012-08-01 | 宏正自动科技股份有限公司 | 影像调整装置及影像调整方法 |
-
2012
- 2012-09-03 CN CN201210320566.3A patent/CN103679630A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1512449A (zh) * | 2002-12-30 | 2004-07-14 | 英业达股份有限公司 | 圆形旋转与缩放的处理***及其方法 |
CN101102498A (zh) * | 2007-07-26 | 2008-01-09 | 北京华纬讯电信技术有限公司 | 一种高清视频图像处理方法 |
CN102054264A (zh) * | 2009-11-03 | 2011-05-11 | 三星电子株式会社 | 图像处理器和电子装置以及图像处理方法 |
CN102622991A (zh) * | 2011-02-01 | 2012-08-01 | 宏正自动科技股份有限公司 | 影像调整装置及影像调整方法 |
Non-Patent Citations (3)
Title |
---|
戴艳 等: "《零基础学算法》", 31 March 2012, 机械工业出版社 * |
李云红 等: "《数字图像处理》", 31 May 2012, 北京大学出版社 * |
陈芳: ""图像的旋转插值算法和基于链码技术计算图像几何矩的算法研究"", 《中国优秀博硕士学士论文全文数据库(硕士) 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106791481A (zh) * | 2016-12-13 | 2017-05-31 | 广东威创视讯科技股份有限公司 | 视频数据旋转方法和*** |
CN109348139A (zh) * | 2018-10-19 | 2019-02-15 | 北京凯视达科技有限公司 | 视频旋转方法、装置、计算机可读存储介质及电子设备 |
CN110191298A (zh) * | 2019-04-17 | 2019-08-30 | 广州虎牙信息科技有限公司 | 移动终端及其录屏中的视频旋转方法、计算机存储介质 |
CN114913076A (zh) * | 2022-07-19 | 2022-08-16 | 成都智明达电子股份有限公司 | 一种图像缩放旋转方法、装置、***及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Larsen et al. | Fast matrix multiplies using graphics hardware | |
US7158141B2 (en) | Programmable 3D graphics pipeline for multimedia applications | |
US5268995A (en) | Method for executing graphics Z-compare and pixel merge instructions in a data processor | |
US8938598B2 (en) | Facilitating simultaneous submission to a multi-producer queue by multiple threads with inner and outer pointers | |
US7324113B1 (en) | Perspective correction computation optimization | |
US9881391B2 (en) | Procedurally defined texture maps | |
US8106918B2 (en) | Apparatus and method for texture level of detail computation | |
US20150022537A1 (en) | Variable fragment shading with surface recasting | |
US8698802B2 (en) | Hermite gregory patch for watertight tessellation | |
US8605104B1 (en) | Threshold-based lossy reduction color compression | |
US7710427B1 (en) | Arithmetic logic unit and method for processing data in a graphics pipeline | |
US7280112B1 (en) | Arithmetic logic unit temporary registers | |
CN103679630A (zh) | 一种视频旋转方法 | |
JP4154336B2 (ja) | ラスター画像のフレームを描画する方法及び装置 | |
US8570324B2 (en) | Method for watertight evaluation of an approximate catmull-clark surface | |
CN104537697A (zh) | 一种渐进模糊动画的实现方法 | |
US8605085B1 (en) | System and method for perspective corrected tessellation using parameter space warping | |
US8681173B2 (en) | Device, system, and method for improving processing efficiency by collectively applying operations | |
JPH09231380A (ja) | グラフィカル・イメージ処理のための累算バッファの方法および装置 | |
Kim | GPU isosurface raycasting of FCC datasets | |
US9058672B2 (en) | Using a pixel offset for evaluating a plane equation | |
CN109410136A (zh) | 基于最短传递路径的匀色方法及处理装置 | |
US11625225B2 (en) | Applications of and techniques for quickly computing a modulo operation by a Mersenne or a Fermat number | |
US8624916B2 (en) | Processing global atomic operations using the bending unit datapath | |
Moya et al. | A single (unified) shader GPU microarchitecture for embedded systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140326 |