发明内容
基于此,本发明的目的在于,提供一种基于MIPI协议的视频图像放大的方法,其具有可减小时钟、提高系统的稳定性的优点。
一种基于MIPI协议的视频图像放大的方法,包括如下步骤:
将MIPI数据通道输出的通道数据存储至缓冲器内;
获取缩放系数以及缓冲器内的像素点数据,并通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据。
相比于现有技术,本发明无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,直接从缓冲器内提取MIPI的数据通道输出的数据,以计算新的像素点数据,减少了时钟数量,不需要进行过多的跨时钟域的处理,节省系统资源与功耗,增加系统稳定性。
进一步地,当(i*N/M)为非整数时,将获取的缓冲器内第[i*N/M]个像素点的数据延时n个字节时钟周期,在获取到缓冲器内第[i*N/M]+1个像素点的数据后在计算缩放后的新像素点数据,其中,延时的字节时钟周期个数和 均表示向上取整;Lane num表示数据通道的数据位宽。
进一步地,计算缩放后的新像素点时,包括分别计算像素点的R分量、G分量和B分量的数据,具体包括如下步骤:
计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的R分量;
计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_G([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的G分量;
计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的B分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的B分量。根据缩放系数,获取缓冲器内的像素点的R分量、G分量和B分量分别进行放大计算,进而获取新的清晰完整的放大图像。
本发明同时还提供一种基于MIPI协议的视频图像放大的系统,包括数据缓冲模块、数据获取模块和计算模块;
所述数据缓冲模块,用于将MIPI数据通道输出的通道数据存储至缓冲器内;
所述数据获取模块,用于获取缩放系数以及缓冲器内的像素点数据,并传送到所述计算模块;
所述计算模块,用于通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据。
相比于现有技术,本发明无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,直接从缓冲器内提取MIPI的数据通道输出的数据,以计算新的像素点数据,减少了时钟数量,不需要进行过多的跨时钟域的处理,节省系统资源与功耗,增加系统稳定性。
为了更好地理解和实施,下面结合附图详细说明本发明。
具体实施方式
请参阅图1,其为本发明实施例中基于MIPI协议的视频图像放大的方法的流程图。该基于MIPI协议的视频图像放大的方法,包括如下步骤:
步骤1:将MIPI数据通道输出的通道数据存储至缓冲器内。
步骤2:获取缩放系数以及缓冲器内的像素点数据,并通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据。
当(i*N/M)为非整数时,将获取的缓冲器内第[i*N/M]个像素点的数据延时n个字节时钟周期,在获取到缓冲器内第[i*N/M]+1个像素点的数据后在计算缩放后的新像素点数据,其中,延时的字节时钟周期个数和 均表示向上取整;Lane num表示数据通道的数据位宽,如当(N/M)=3/4,Lane num=4时,
在一个实施例中,MIPI的数据通道的数据位宽Lane Num为4,缩放系数(N/M)=3/4,也就是N=3,M=4,缩放后的新像素点数据表示如下:
P_NEW(i)=P_SRC(i*4/3)=P_SRC([i*4/3])*(1-Y)+P_SRC([i*4/3]+1)*Y,
其中,P_NEW(i)表示第i个新像素点数据;[i*3/4]表示i*N/M的整数部分;Y表示(i*3/4)的真分数部分;P_SRC([i*3/4])表示缓冲器内第[i*3/4]个像素点的数据;P_SRC([i*3/4]+1)表示表示缓冲器内第[i*3/4]+1个像素点的数据。
具体的,若MIPI的数据通道输出的数据BYTE DATA依序表示为BYTE0、BYTE1、BYTE2…,由于每个像素点对应RGB三种分量颜色,因此,BYTE0对应第一个像素点的红色,也就是R1,BYTE1对应第一个像素点的绿色,也就是G1,BYTE2对应第一个像素点的蓝色,也就是B1。BYTE3对应第二个像素点的红色,也就是R2,BYTE4对应第二个像素点的绿色,也就是G2,BYTE5对应第二个像素点的蓝色,也就是B2。BYTE6对应第三个像素点的红色,也就是R3,BYTE7对应第三个像素点的绿色,也就是G3,BYTE8对应第三个像素点的蓝色,也就是B3。BYTE9对应第四个像素点的红色,也就是R4,BYTE10对应第四个像素点的绿色,也就是G4,BYTE11对应第四个像素点的蓝色,也就是B4,以此类推。同时,预设第零个像素点的数据为0,即第零个像素点的红色、绿色和蓝色数据均为0。
因为MIPI的数据通道输出的数据通过BYTE CLOCK输入缓冲器的数据位宽为LaneNum*BYTE,提取RGB DATA的每个PIXEL CLOCK的位宽为3BYTE,因此PIXEL CLOCK=BYTECLOCK*(Lane Num/3),Lane Num可以是1/2/3/4。又因为经过放大后,每一行的像素点会增多,假设缩放比例为N/M,则Scaler CLOCK=(M/N)*PIXEL CLOCK;因此Scaler CLOCK=BYTECLOCK*(Lane Num/3)*(M/N)。
当M/N=3/4,Lane Num为4时,Scaler CLOCK=BYTE CLOCK*(4/3)*(4/3)=(16/9)*BYTE CLOCK。
由于每个像素点对应RGB三种分量颜色,计算缩放后的新像素点时,包括分别计算像素点的R分量、G分量和B分量的数据,因此根据公式P_NEW(i)=P_SRC(i*N/M),可以得到第i个新像素点数据的R分量数据为P_NEW_R(i)=P_SRC_R(i*N/M),同理可得第i个新像素点数据的G分量数据为P_NEW_G(i)=P_SRC_G(i*N/M),第i个新像素点数据的B分量数据为P_NEW_B(i)=P_SRC_B(i*N/M),具体包括如下步骤:
计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的R分量;
计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_G([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的G分量;
计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的B分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的B分量。
下面以一个具体的实施例说明放大的计算过程:
计算新的第一个像素点的R分量时,根据公式可得P_NEW_R(1)=P_SRC_R(0)*(1-3/4)+P_SRC_R(0+1)*(3/4)。因为BYTE0=P_SRC_R(1),BYTE4=P_SRC_R(2)。因此可以用Scaler CLOCK从BUFFER中提取BYTE0,提取出来,进行逻辑运算,可以得到P_NEW_R(1)。同理可以计算新的第一个像素点的G分量和B分量。
在计算完第一个像素点之后,下一个Scaler CLOCK可以进行第二个像素点的计算。根据算法公式P_NEW(i)=P_SRC(i*N/M),所以P_NEW(2)=P_SRC(2*3/4),也就是P_NEW(2)=P_SRC(1)*1/2+P_SRC(2)*1/2,第2个像素点需要用到的像素元素为BYTE0,BYTE1,BYTE2,BYTE3,BYTE4,BYTE5。因为上一个时钟周期,我们已经将BYTE0,BYTE1,BYTE2,BYTE3读取出来,因此需要对这4个BYTE DATA延时1个字节时钟周期,再进行逻辑运算,算出所需要的点。
在计算完第二个像素点之后,进行第三个像素点的计算,根据算法公式P_NEW(i)=P_SRC(i*N/M),所以P_NEW(3)=P_SRC(3*3/4),也就是P_NEW(3)=P_SRC(2)*(1-1/4)+P_SRC(3)*1/4,第3个像素点需要用到的像素元素为BYTE3,BYTE4,BYTE5,BYTE6,BYTE7,BYTE8。因为上一个时钟周期,我们已经将BYTE4,BYTE5,BYTE6,BYTE7读取出来,因此需要对这4个BYTE DATA延时1个字节时钟周期,再进行逻辑运算,算出所需要的点。
在计算完第三个像素点之后,进行第四个像素点的计算,根据算法公式P_NEW(i)=P_SRC(i*N/M),所以P_NEW(4)=P_SRC(4*3/4),也就是P_NEW(3)=P_SRC(3)。第4个像素点需要用到的像素元素为BYTE6,BYTE7,BYTE8。因此可以将上一次延时的BYTE DATA直接取出得到新的点。
后面各个像素点的计算类似,主要是通过计算得到Scaler CLOCK,并且通过相应的逻辑计数直接提取BYTA DATA,避免将它转为PIXEL DATA,将缩放算法与提取RGB参数相结合,从而减少系统运行的时钟,不需要进行过多的跨时钟域的处理,节省系统资源与功耗,增加系统稳定性。
请参阅图2,其为本发明实施例中基于MIPI协议的视频图像放大的系统的原理框图。本发明同时还提供一种基于MIPI协议的视频图像放大的系统,包括数据缓冲模块1、数据获取模块2和计算模块3;
所述数据缓冲模块1,用于将MIPI数据通道输出的通道数据存储至缓冲器内;
所述数据获取模块2,用于获取缩放系数以及缓冲器内的像素点数据,并传送到所述计算模块;
所述计算模块3,用于通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据。
当(i*N/M)为非整数时,将获取的缓冲器内第[i*N/M]个像素点的数据延时n个字节时钟周期,在获取到缓冲器内第[i*N/M]+1个像素点的数据后在计算缩放后的新像素点数据,其中,延时的字节时钟周期个数和 均表示向上取整;Lane num表示数据通道的数据位宽。
在一个实施例中,所述计算模块3还包括R分量计算模块31、G分量计算模块32和B分量计算模块33;
所述R分量计算模块31用于通过以下方式计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的R分量;
所述G分量计算模块32用于通过以下方式计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_G([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的G分量;
所述B分量计算模块33用于通过以下方式计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的B分量;N/M表示缩放系数;[i*N/M]表示i*N/M的整数部分;Y表示(i*N/M)的真分数部分;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示缓冲器内第[i*N/M]+1个像素点的数据的B分量。
相比于现有技术,本发明无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,直接从缓冲器内提取MIPI的数据通道输出的数据,以计算新的像素点数据,减少了时钟数量,不需要进行过多的跨时钟域的处理,节省系统资源与功耗,增加系统稳定性。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。