一种RGB空间图像区域像素信息压缩存储和还原方法
技术领域
本发明属于图像存储技术领域,具体涉及一种RGB空间图像区域像素信息压缩存储和还原方法,适用于高质量高效率视频和图像的特效处理及合成软件中。
背景技术
在视频/图像处理软件中,从RGB彩色图像中选择局部像素块是一种常见的操作,它使得算法能够从指定的像素区域中提取出特征信息以进行后续处理,该操作常常用于图像抠像技术以及去噪技术中。然而,在实际应用中,用户所选择图像的色阶不同以及划定区域的大小不同,因而每次应用中所包含的像素数目会差别很大,这会导致在高色阶图像中框选大面积区域而需要对大量像素进行存储并进行后续处理,这无疑会带来算法效率的下降。因此,如何对于选择像素集合进行有效存储是一个问题。
现有技术中,首先将RGB空间图像每个通道像素归一化[0,1]之间,然后框选一块图像块P,设该图像块P中的共包含S个像素,每个像素都有RGB三个通道的数值,用一个S行三列的矩阵VecP来临时存储上述数据。这种存储方式由于区域内像素数目过多会影响后续操作效率。
发明内容
针对现有技术中存在的缺陷,本发明所要解决的技术问题是提供一种RGB空间图像区域像素信息压缩存储和还原方法,该方法能够在保持较高精度的情况下,对像素信息进行压缩存储。
为解决上述技术问题,本发明采用的技术方案如下:
一种RGB空间图像区域像素信息压缩存储方法,包括以下步骤:
(1)在RGB空间图像中选择局部图像块P;
(2)根据所述图像块P中像素在RGB空间上的三维坐标极值计算节点空间在三个维度上的节点个数;
(3)将所述RGB空间上的图像块P中像素转换成节点空间上的节点;
(4)采用二值化一维矩阵M存储所述节点空间上的节点。
如上所述的RGB空间图像区域像素信息压缩存储方法,步骤(1)中,在RGB空间图像中选择图像块P之前,先将RGB空间图像每个通道像素值归一化至[0,1]区间内。
如上所述的RGB空间图像区域像素信息压缩存储方法,步骤(1)中,设所述图像块P中包含S个像素,用S行3列的矩阵vecP存储S个像素在RGB空间上的三维坐标。
如上所述的RGB彩色图像区域像素信息压缩存储方法,步骤(2)中所述节点空间在三个维度上的节点个数计算公式如下:
设定节点空间存储的节点数目的上限为N,图像块P中像素在X、Y、Z三维坐标的最小值和最大值分别为Minx、Miny、Minz、Maxx、Maxy和Maxz;
节点空间在X轴的节点个数GridCountx=Int[(N/RatioYx/RatioZx)1/3],
在Y轴的节点个数GridCounty=Int(GridCountx×RatioYx),
在Z轴的节点个数GridCountz=In(GridCountx×RatioZx);
其中,RatioYx=Sizey/Sizex,RatioZx=Sizez/Sizex,Sizex=Maxx-Minx,Sizey=Maxy-Miny,Sizez=Maxz-Minz,Int表示向下取整。所述N=8000。
如上所述的RGB彩色图像区域像素信息压缩存储方法,步骤(3)中所述将RGB空间上的图像块P中像素转换成节点空间上的节点的方法如下:
设像素p为图像块P中第s个像素,像素p在RGB空间上的X、Y、Z坐标分别为px、py和pz,即vecP(s,1)=px,vecP(s,2)=py,vecP(s,3)=pz;
设RGB空间上像素p对应到节点空间内的节点X、Y、Z坐标分别为XGrid、YGrid和ZGrid;
XGrid=Int(vecP(s,1)/GridStepx),所述GridStepx=1/GridCountx;
对XGrid进行如下越界约束:
YGrid=Int(vecP(s,2)/GridStepy),所述GridStepy=1/GridCounty;对YGrid进行如下越界约束:
ZGrid=Int(vecP(s,3)/GridStepz),所述GridStepz=1/GridCountz;
对ZGrid进行如下越界约束:
如上所述的RGB彩色图像区域像素信息压缩存储方法,步骤(4)中所述采用二值化一维矩阵M存储节点空间上的节点的方法如下:
图像块P中任一像素p对应的节点空间内的节点在所述矩阵M中的位置L的计算公式为:L=XGrid×GridPitch+YGrid×GridCountz+ZGrid;
其中,GridPitch=GridCounty×GridCountz,表示所有相同X值的节点总数;
将矩阵M中位置L处的元素值置为1,没有对应节点的位置处的元素值置为0。
一种采用上述方法存储的RGB空间图像区域像素信息还原方法,包括以下步骤:
(1)遍历矩阵M,设任一节点Gridp对应的三维坐标分别为XGrid、YGrid和ZGrid,矩阵M中第L个元素值即为Gridp对应的节点值;
(2)如果所述元素值为0,则说明该位置处在节点空间中没有对应的节点;如果所述元素值为1,则计算其对应的RGB空间内的坐标:
设其对应的RGB空间内的坐标分别为x、y和z,节点空间两个相邻节点所代表的在RGB空间内三个坐标轴的节点步长分别为GridStepx、GridStepy和GridStepz;则x=XGrid×GridStepx,y=YGrid×GridStepy,z=ZGrid×GridStepz。
一种RGB空间图像多个区域像素信息压缩存储方法,包括以下步骤:
(1)第一次选择像素块局部图像块P1,采用上述方法计算获得矩阵M1;
(2)再选择局部图像块P2,采用上述方法计算获得矩阵M2;
(3)采用上述方法将M1和M2同时进行矩阵到RGB空间的变换,获得局部图像块P3;
(4)对局部图像块P3,采用上述方法计算获得矩阵M3,将M3赋值给M1;
(5)如果不再新选择局部图像块,则输出M1;如果再选择局部图像块,则转至步骤(2)。
本发明所述方法,在保持较高精度的情况下,实现了对RGB空间图像区域像素信息的压缩存储,节省了存储空间,并提高了对像素信息进行后续处理的效率。
附图说明
图1是实施方式1中所述方法的流程图;
图2是实施方式2中所述方法的流程图;
图3是实施方式3中所述方法的流程图。
具体实施方式
在RGB色彩空间中,每幅RGB彩色图像都会有其对应的色彩空间分布。该空间的x,y和z坐标对应着R、G、B的通道值。本发明提出了一种基于节点空间的存储机制,将RGB色彩空间的像素用节点空间内节点表示。根据RGB空间内像素块在三维的尺度比例关系,对节点空间在三个维度上的节点间距进行调整,以实现对RGB空间内局部图像块的充分准确表达。节点空间是与整个RGB空间相对应的,即节点空间能够表示RGB空间X、Y、Z轴[0,1]的整个区间。但是每次区域选择时,所选局部图像块的具体空间形态不一,即所选局部图像块在三维坐标中所占据的尺度不一,因此每个局部图像块在节点空间的三个维度上有着不同的信息量需要表示,在需要包含更多信息量的坐标轴上应该用更多的节点来表示。下面结合具体实施方式和说明书附图对本发明进行详细描述。
实施方式1
本实施方式记载了RGB空间图像区域像素信息的压缩存储方法。如图1所示,该方法包括以下步骤:
(1)将RGB空间图像每个通道像素值归一化至[0,1]区间内。
(2)在RGB空间图像中选择局部图像块P。
设局部图像块P中共包含S个像素,每个像素都有RGB三个通道的数值。先用一个S行3列的矩阵vecP来临时存储S个像素的三个通道的数值,每一行存储一个像素,每一列存储一个像素的一个通道数值。
(3)根据图像块P中像素在RGB空间上的三维坐标极值计算节点空间在三个维度上的节点个数。
为了保证压缩效果,设定节点空间内的节点总数为定值N,本实施方式中,N=8000。像素区域块P在X、Y、Z三个维度上的最小值和最大值分别为Minx、Miny、Minz、Maxx、Maxy和Maxz,其三维尺度分别为:Sizex=Maxx-Minx,Sizey=Maxy-Miny,Sizez=Maxz-Minz。其中,Sizex表示x轴尺度,Sizey表示y轴尺度,Sizez表示Z轴尺度。
以X轴为标准计算Y轴和Z轴相对X轴的比例:
RatioYx=Sizey/Sizex,RatioZx=Sizez/Sizex。其中,RatioYx表示Y轴相对于X轴的比例,RatioZx表示Z轴相对于X轴的比例。
根据上述比例对节点总数N在节点空间内X、Y、Z三个维度上进行分配:
X轴的节点个数GridCountx=Int[(N/RatioYx/RatioZx)1/3];
Y轴的节点个数GridCounty=Int(GridCountx×RatioYx);
Z轴的节点个数GridCountz=Int(GridCountx×RatioZx)。
其中,Int表示向下取整,以使得节点总数不会超过N。
(4)将RGB空间上的图像块P中像素转换成节点空间上的节点。
将RGB空间内局部图像块投影到节点空间内。设包含S个像素的图像块在RGB空间内用S行3列的矩阵vecP来临时存储,像素在矩阵vecP内的具体排列顺序对本方法并无影响。采用矩阵vecP临时存储的主要目的是记录图像块内所有像素在RGB空间的坐标值信息。下面以RGB空间内图像块P中的任一像素p为例,阐述具体转换方法。
设像素p为图像块P的第s个像素,像素p在RGB空间内X、Y、Z坐标分别为px、py和pz,即vecP(s,1)=px,vecP(s,2)=py,vecP(s,3)=pz。
计算节点空间与RGB空间之间的对应关系。由于节点空间需要代表整个RGB空间,因此在节点空间的某个坐标轴上,两个相邻节点之间所代表的对应的RGB空间的距离受到RGB空间内该轴的长度以及节点空间在该轴上节点个数来决定的。而由于上述归一化,RGB空间任一轴长度都为1。而节点空间在三个轴的节点个数分别为GridCountx、GridCounty和GridCountz。设相邻节点在RGB空间内三个坐标轴的节点步长分别是GridStepx、GridStepy和GridStepz,计算公式如下:
GridStepx=1/GridCountx;GridStepy=1/GridCounty;GridStepz=1/GridCountz。
设RGB空间像素p对应到节点空间的节点X、Y、Z坐标为XGrid、YGrid和ZGrid,计算公式如下:
XGrid=Int(vecP(s,1)/GridStepx);再对XGrid进行如下超界约束:
YGrid=Int(vecP(s,2)/GridStepy);对YGrid进行如下越界约束:
ZGrid=Int(vecP(s,3)/GridStepz);对ZGrid进行如下越界约束:
对于原始RGB空间内像素块内坐标为px、py和pz的任一像素p,其对应的节点空间内的节点Gridp在三个维度上坐标即为XGrid、YGrid和ZGrid。这样像素p就完成了范围在[0,0,0]到[1,1,1]之间的RGB像素空间到范围是[0,0,0]到[GridCountx-1,GridCounty-1,GridCountz-1]的节点空间的投影。
(5)采用二值化一维矩阵M存储节点空间上的节点。
节点空间其实是一个二值化的1×S的矩阵M,每一个矩阵元素对应节点空间的一个节点,如果该节点有对应的RGB空间像素,那么矩阵元素就设定为1,反之为0。具体存储方式按照X、Y、Z的顺序进行存储。即首先按照X轴值从小到大将节点进行排列;然后在具有同样X值的节点中,按照Y值由小到大进行排列,最后对于具有同样X和Y值的节点,按照其Z值从小到大排列。设GridPitch=GridCounty×GridCountz,该值表示所有相同X值的节点总数。以Gridp为例,它在X、Y、Z方向的值分别为XGrid、YGrid和ZGrid。那么其在矩阵M中的位置L=XGrid×GridPitch+YGrid×GridCountz+ZGrid。矩阵中该处元素就设定为1,即M(L)=1。
这样就完成了从RGB空间到节点空间的存储。利用该二值化一维矩阵可以将节点空间进行存储,并能够表述图像块在RGB空间内的分布状态。
实施方式2
本实施方式记载了采用实施方式1中所述方法存储的RGB空间图像区域像素信息的还原方法,如图2所示。逐点遍历节点空间内的每个节点,如果该节点被置为1,那么其对应位置的RGB空间内的像素也被标记出来。具体仍以节点空间中某一点Gridp为例说明。
按照X、Y、Z的顺序遍历矩阵M,设节点Gridp对应的三维坐标分别为XGrid、YGrid和ZGrid。如实施方式1中所述,矩阵M中第L个元素值即为Gridp对应的节点值。
当遍历到该元素值时,如果该值为0,那么说明该位置处在节点空间中没有对应的节点。如果为1,那么说明该节点存在,进一步计算其对应的RGB空间内的坐标值。设其对应的RGB空间内的坐标为x、y和z。实施方式1中提到的节点空间两个相邻节点所代表的在RGB空间内三个坐标轴的节点步长分别为GridStepx、GridStepy和GridStepz。在从RGB空间到节点空间的变换及其逆变换过程中保存节点步长信息,具体可通过保存节点空间三轴的节点个数GridCountx、GridCounty和GridCountz,再通过实施方式1中所述方法计算获得。
x、y和z的计算公式如下:x=XGrid×GridStepx,y=YGrid×GridStepy,z=ZGrid×GridStepz。
对于存储RGB空间像素的矩阵vecP,可以将坐标(x、y、z)赋值给vecP,如下:vecP(t,1)=x,vecP(t,2)=y,vecP(t,3)=z。其中,t表示在L个元素值中为1的元素个数。按照这种方式,可将节点空间上的所有节点还原到RGB空间。
实施方式3
本实施方式记载了RGB空间图像多个区域像素信息压缩存储方法,如图3所示,包括以下步骤:
(1)第一次选择像素块局部图像块P1,采用实施方式1中所述方法计算获得矩阵M1;
(2)再选择局部图像块P2,采用实施方式1中所述方法计算获得矩阵M2;
(3)采用实施方式2中所述方法将M1和M2同时进行矩阵到RGB空间的变换,获得局部图像块P3;
(4)对局部图像块P3,采用实施方式1中所述方法计算获得存储矩阵M3,将M3赋值给M1;
(5)如果不再新选择局部图像块,则输出M1;如果再选择局部图像块,则转至步骤(2)。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。