本发明涉及数据存储领域,特别涉及一种影像数据的存储和读取方法。
背景技术:
在现有的影像存储技术中,像素以文件形式进行存储,读取时需要进行文件的操作,像素的获取完全依赖于影像的头信息,所以影像的大小受到影像头信息存储长度的限制。以tif格式为例,在其头信息的存储协议规定的长度下,单个影像文件的长度不超过4g大小。单个影像文件的压缩格式必须是统一的,压缩率越高,文件所占硬盘空间大小就越小,同时实际的影像信息损失越大,在读取时所需的解压时间就越多。在统一的压缩格式下,影像文件的大小和效率有着不可调和的矛盾,影像格式必须在这两者之间做出选择,牺牲其中一项来换取另一项的提高。
在实际的影像显示过程中,影响数据的显示和影像数据分块尺寸有关,分片太大导致读写数据的冗余,速度降低,分片太小导致数据读写时文件访问次数太多,速度降低。现有的影像格式并没有给出影像分块大小的标准,以及对于影响处理速度的影像,这导致同一格式的影像的读写效率不固定,而为了方便存储,大多数影像都只分成少量的几块,使得这些影像读写效率较低,不方便影像的显示处理。
技术实现要素:
针对现有技术的不足,本发明旨在提供一种压缩率高,占用存储空间少,同时保证原始影像信息的完整性,保证影像信息在存储和读取过程中不丢失的影像数据存储和读写方法。
为实现上述目的,本发明采用如下技术方案:
一种影像数据存储方法,包括以下步骤:
在文件中以影像数据的水平方向和垂直方向建立直角坐标系,所述影像数据在所述直角坐标系中的坐标以像素为单位;
在所述直角坐标系中按照坐标对所述影像数据进行分块,得到影像块;
根据原始影像数据创建金字塔,对所述影像块采用无损压缩进行压缩,对所述金字塔采用有损压缩进行压缩;
将压缩后影像块和金字塔按照键-值存储的形式写入文件。
作为本发明的进一步改进,所述金字塔每一层的影像数据的长和宽分别为原始影像数据长和宽的二分之一,面积为原始影像数据的四分之一。
作为本发明的进一步改进,所述影像块的大小为256*256个像素,影像数据的边缘不足256个像素的剩余长度补足256个像素。
作为本发明的进一步改进,所述键-值存储的存储协议如下:
影像长、宽、通道数以对应的英文单词为键进行存储;
影像每个通道的长度以通道的英文单词和通道编号进行存储,所述英文单词和通道编号间用短横线间隔;
每个影像块以影像块所在的图像层级和在整个影像分块上的位置为键值进行存储,所有数字都是用十进制整数,使用短横线隔,第一位数字表示其在图像上的层级,第0层为原始影像数据,第1层为第一层金字塔;第二个数字表示影像块在横向上的坐标x,横向第一个影像块即为1;第三个数字表示影像例在竖方向上的坐标y。
一种影像数据存储系统,包括以下模块:
坐标系模块,用于在文件中以影像数据的水平方向和垂直方向建立直角坐标系,所述影像数据在所述直角坐标系中的坐标以像素为单位;
分块模块,用于在所述直角坐标系中按照坐标对所述影像数据进行分块,得到影像块;
金字塔模块,用于根据原始影像数据创建金字塔,对所述影像块采用无损压缩进行压缩,对所述金字塔采用有损压缩进行压缩;
写入模块,用于将压缩后影像块和金字塔按照键-值的形式写入文件。
作为本发明的进一步改进,所述金字塔每一层的影像数据的长和宽分别为原始影像数据长和宽的二分之一,面积为原始影像数据的四分之一。
作为本发明的进一步改进,所述影像块的大小为256*256个像素,影像数据的边缘不足256个像素的剩余长度补足256个像素。
作为本发明的进一步改进,所述键-值存储的存储协议如下:
影像长、宽、通道数以对应的英文单词为键进行存储;
影像每个通道的长度以通道的英文单词和通道编号进行存储,所述英文单词和通道编号间用短横线间隔;
每个影像块以影像块所在的图像层级和在整个影像分块上的位置为键值进行存储,所有数字都是用十进制整数,使用短横线隔,第一位数字表示其在图像上的层级,第0层为原始影像数据,第1层为第一层金字塔;第二个数字表示影像块在横向上的坐标x,横向第一个影像块即为1;第三个数字表示影像例在竖方向上的坐标y。
一种读取如上述影像数据存储方法存储的影像数据的影像数据读取方法,包括以下步骤:
查询影像块在所述金字塔上的层级和坐标;
根据所述键-值存储的存储协议以及所述影像块的层级和坐标,得到所述影像块的键值;
根据所述影像块的键值在数据库中查询所述影像块的影像数据,得到所述影像块被压缩过的像素信息和压缩信息;
利用所述压缩信息对所述影像块进行解压,并根据所述存储协议得到所述影像块的实际信息;
将所述像素数据在内存中进行重新排列和组织,得到所述影像块的完整信息。
一种读取如上述影像数据存储方法存储的影像数据的影像数据读取系统,包括以下模块:
第一查询模块,用于查询影像块在所述金字塔上的层级和坐标;
键值模块,用于根据所述键-值存储的存储协议以及所述影像块的层级和坐标,得到所述影像块的键值;
第二查询模块,用于根据所述影像块的键值在数据库中查询所述影像块的影像数据,得到所述影像块被压缩过的像素信息和压缩信息;
解压模块,用于利用所述压缩信息对所述影像块进行解压,并根据所述存储协议得到所述影像块的实际信息;
像素重排列模块,将所述像素数据在内存中进行重新排列,得到所述影像块的完整信息。
相比于现有技术,本发明通过对原始影像数据和金字塔分别采用无损压缩和有损压缩进行压缩,压缩率高,节省硬件空间,读取效率高,对于大影像数据能达到快速打开,高速浏览,且能支持非常规影像的存储,支持多通道存储,支持不同通道不同像素存储大小的影像数据,在卫星影像,数字地表模型,工程影像中具有广阔的应用前景。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1是本发明实施例中影像数据存储方法的示意图。
图2是本发明实施例中影像数据存储系统的示意图。
图3是本发明实施例中影像数据读取方法的示意图。
图4是本发明实施例中影像数据读取系统的示意图。
标记说明:210、坐标系模块;220、分块模块;230、金字塔模块;240、写入模块;410、第一查询模块;420、键值模块;430、第二查询模块;440、解压模块;450、像素重排列模块。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
如图1所示,为本发明实施例中影像数据存储方法的示意图。所述方法包括以下步骤:
步骤110、在文件中以影像数据的水平方向和垂直方向建立直角坐标系,所述影像数据在所述直角坐标系中的坐标以像素为单位;
优选的,以影像数据的左上角为坐标原点,向右向下为正方向,定义向右为x方向,向下为y方向,在这样的定义下,影像数据的坐标应全为正整数;
步骤120、在所述直角坐标系中按照坐标对所述影像数据进行分块,得到影像块;
优选的,所述影像分块在坐标系中以影像块为单位。
优选的,所述影像块的大小为256*256个像素,影像数据的边缘不足256个像素的剩余长度补足256个像素;
步骤130、根据原始影像数据创建金字塔,对所述影像块采用无损压缩进行压缩,对所述金字塔采用有损压缩进行压缩;
具体的,每层金字塔数据由其下层金字塔得到,其像素构成由上一层影像相邻的四个像素进行平均所得,影像金字塔的层数根据数据大小确定,最顶层的影像金字塔长和宽应与影像分块的长和宽相同;
优选的,每一层金字塔影像数据的长和宽分别为原始影像数据的长和宽的二分之一,面积为原始影像数据的四分之一;
优选的,对所述金字塔中不同层级的影像采用不同的压缩方法,并对于分块的影像每一块单独写入压缩信息,每一块影像可单独解压;
步骤140、将压缩后影像块和金字塔按照键-值存储的形式写入文件;
优选的,所述键-值存储的存储协议如下:
影像长、宽、通道数以对应的英文单词为键进行存储;
影像每个通道的长度以通道的英文单词和通道编号进行存储,所述英文单词和通道编号间用短横线间隔;
每个影像块以影像块所在的图像层级和在整个影像分块上的位置为键值进行存储,所有数字都是用十进制整数,使用短横线隔,第一位数字表示其在图像上的层级,第0层为原始影像数据,第1层为第一层金字塔;第二个数字表示影像块在横向上的坐标x,横向第一个影像块即为1;第三个数字表示影像例在竖方向上的坐标y。
图2是本发明实施例中影像数据存储系统的示意图。所述系统包括以下模块:
坐标系模块210,用于在文件中以影像数据的水平方向和垂直方向建立直角坐标系,所述影像数据在所述直角坐标系中的坐标以像素为单位;
优选的,以影像数据的左上角为坐标原点,向右向下为正方向,定义向右为x方向,向下为y方向,在这样的定义下,影像数据的坐标应全为正整数;
分块模块220,用于在所述直角坐标系中按照坐标对所述影像数据进行分块,得到影像块;
优选的,所述影像分块在坐标系中以影像块为单位。
优选的,所述影像块的大小为256*256个像素,影像数据的边缘不足256个像素的剩余长度补足256个像素;
金字塔模块230,用于根据原始影像数据创建金字塔,对所述影像块采用无损压缩进行压缩,对所述金字塔采用有损压缩进行压缩;
具体的,每层金字塔数据由其下层金字塔得到,其像素构成由上一层影像相邻的四个像素进行平均所得,影像金字塔的层数根据数据大小确定,最顶层的影像金字塔长和宽应与影像分块的长和宽相同;
优选的,每一层金字塔影像数据的长和宽分别为原始影像数据的长和宽的二分之一,面积为原始影像数据的四分之一;
优选的,对所述金字塔中不同层级的影像采用不同的压缩方法,并对于分块的影像每一块单独写入压缩信息,每一块影像可单独解压;
写入模块240,用于将压缩后影像块和金字塔按照键-值的形式写入文件;
优选的,所述键-值存储的存储协议如下:
影像长、宽、通道数以对应的英文单词为键进行存储;
影像每个通道的长度以通道的英文单词和通道编号进行存储,所述英文单词和通道编号间用短横线间隔;
每个影像块以影像块所在的图像层级和在整个影像分块上的位置为键值进行存储,所有数字都是用十进制整数,使用短横线隔,第一位数字表示其在图像上的层级,第0层为原始影像数据,第1层为第一层金字塔;第二个数字表示影像块在横向上的坐标x,横向第一个影像块即为1;第三个数字表示影像例在竖方向上的坐标y。
图3是本发明实施例中影像数据读取方法的示意图。所述方法包括以下步骤:
步骤310、查询影像块在所述金字塔上的层级和坐标;
步骤320、根据所述键-值存储的存储协议以及所述影像块的层级和坐标,得到所述影像块的键值;
步骤330、根据所述影像块的键值在数据库中查询所述影像块的影像数据,得到所述影像块被压缩过的像素信息和压缩信息;
步骤340、利用所述压缩信息对所述影像块进行解压,并根据所述存储协议得到所述影像块的实际信息;
步骤350、将所述像素数据在内存中进行重新排列和组织,得到所述影像块的完整信息。
图4是本发明实施例中影像数据读取系统的示意图。所述系统包括以下模块:
第一查询模块410,用于查询影像块在所述金字塔上的层级和坐标;
键值模块420,用于根据所述键-值存储的存储协议以及所述影像块的层级和坐标,得到所述影像块的键值;
第二查询模块430,用于根据所述影像块的键值在数据库中查询所述影像块的影像数据,得到所述影像块被压缩过的像素信息和压缩信息;
解压模块440,用于利用所述压缩信息对所述影像块进行解压,并根据所述存储协议得到所述影像块的实际信息;
像素重排列模块450,将所述像素数据在内存中进行重新排列,得到所述影像块的完整信息。
本发明可以支持大影像的部分提取显示,由于所有分块独立压缩,压缩分块有独立的头信息存储,对于大影像,可以进行部分读取,抽取感兴趣的影像范围进行解压显示,而不必进行整体解析。其过程如下:首先进行影像总体信息解析;然后计算感兴趣影像范围的原始影像和金字塔影像块编号;最后根据块头信息进行解压,重组感兴趣部分的影像信息;即可快速的得到大影像的感兴趣部分。
本发明可以支持影像的快速实时变换显示。由于影像可以进行部分提取,所以在做影像几何和灰度变换时可以进行实时变换显示,具体步骤如下:读取影像总体信息,确定需要进行变换的影像区域,计算区域中的分块信息,得到这些分块的键值;根据键值获取相应的分块影像,根据这些影像的头信息,进行解压;根据所需要进行的变换,对影像的几何信息和灰度信息进行变换,然后对这些变换后的像素进行拼接;将拼接后的影像根据需要进行显示,由于只对感兴趣的区域进行变换操作,大量减少了需要计算和操作的像素值,可以达到实时变换的要求。
相比于现有技术,本发明通过对原始影像数据和金字塔分别采用无损压缩和有损压缩进行压缩,压缩率高,节省硬件空间,读取效率高,对于大影像数据能达到快速打开,高速浏览,且能支持非常规影像的存储,支持多通道存储,支持不同通道不同像素存储大小的影像数据,在卫星影像,数字地表模型,工程影像中具有广阔的应用前景。
对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。