gpt4 book ai didi

c++ - 存储海量数据的数据结构?

转载 作者:IT老高 更新时间:2023-10-28 23:04:02 29 4
gpt4 key购买 nike

在我的应用程序中,我必须从一组图像(MRC 图像)中加载体积数据并将像素数据保存在内存中。(图像是灰度的,因此每个像素一个字节)。

我的开发环境是 QT 框架,MinGW for Windows 和 GCC for Linux。

目前,我使用一个简单的数据结构将volumedata存储为:

unsigned char *volumeData;

并按如下方式进行大量分配。

volumeData=new unsigned char[imageXsize * imageYsize * numofImages];

以下是在给定平面上访问图像数据的重要方法,例如

unsigned char* getXYPlaneSlice(int z_value);
unsigned char* getYZPlaneSlice(int x_value);
unsigned char* getZXPlaneSlice(int y_value);

使用我简单的数据结构,很容易实现上述方法。

但我们将来可能需要采用 2000x2000x1000 (~3.7Gb) 的卷大小。而当前的数据结构将无法处理如此庞大的数据。

  1. 如何避免碎片化?现在,即使有 1000x1000x200 的数据,应用程序也会崩溃并给出 bad_alloc。为此更改数据结构的最佳方法是什么?我应该使用像链表这样的东西,每个 block 的大小为 100mb。

  2. 此外,用户应该能够对体积数据执行一些图像处理过滤器,并且还应该能够重置为原始像素值。这意味着,我应该保留两份卷数据。与当前的实现类似。

    无符号字符 *volumeDataOriginal;

    无符号字符 *volumeDataCurrent;

因此,对于 2000x2000x1000 数据范围,它将使用大约 8Gb(每个卷 4Gb)。但是在Win32中,地址空间是4GB。如何解决呢?我应该使用 64 位应用程序吗?

编辑:这是我的应用程序的快照enter image description here

基本上,我加载体积数据(来自图像集,来自 MRC 格式..等)并将它们显示在不同的平面查看器中(XY,YX,YZ.Image 显示 XY 平面查看器)。我需要保留以上 3 种数据访问方法以在特定平面中显示图像。使用滑动条用户可以更改要在所选平面中显示的图像)

提前致谢。

最佳答案

我认为你应该看看 hdf5 .这是一种二进制格式,用于存储从望远镜、物理实验和基因测序机等设备收集的大量数据。使用这样的东西的好处很多,但三个直接的想法是:(1) 测试,(2) 支持 hyperslab 选择,以及 (3) 您可以免费获得压缩。

有可用的 C/C++、java、python、matlab 库。

关于c++ - 存储海量数据的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4131220/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com