gpt4 book ai didi

c++ - 在 C++ 中优化 3D 成像过程

转载 作者:太空狗 更新时间:2023-10-29 23:52:16 25 4
gpt4 key购买 nike

我正在处理 3D 立体图像,可能很大 (256x256x256)。我有 3 本这样的书,我想阅读和操作。目前,每个卷都存储为我使用 ifstream 读取的数字文本文件。我将它保存为矩阵(这是我通过动态分配 3D 数组编写的类)。然后我对这3个矩阵进行运算,加法、乘法甚至傅里叶变换。到目前为止,一切正常,但是,它需要花费大量时间,尤其是傅里叶变换,因为它有 6 个嵌套循环。

我想知道如何加快速度。此外,我将图像存储在文本文件中这一事实是否有所不同。我应该将它们保存为二进制文件还是其他更容易/更快阅读的格式? fstream 是我读入的最快方式吗?我每次都使用相同的 3 个矩阵而不更改它们。这有什么区别吗?另外,指针指向指针指向指针是存储 3D 体积的最佳方式吗?如果不能,我还能做什么?

最佳答案

Also, is pointer to pointer to pointer best way to store a 3d volume?

不,那通常非常低效。

If not what else can I do?

如果将它存储在一个连续的 block 中,并在 block 中使用计算的偏移量,您可能会获得更好的性能。

我通常会使用这样的结构:

class DataBlock {

unsigned int nx;
unsigned int ny;
unsigned int nz;
std::vector<double> data;

DataBlock(in_nx,in_ny,in_nz) :
nx(in_nx), ny(in_ny), nz(in_nz) , data(in_nx*in_ny*in_nz, 0)
{}

//You may want to make this check bounds in debug builds
double& at(unsigned int x, unsigned int y, unsigned int z) {
return data[ x + y*nx + z*nx*ny ];
};

const double& at(unsigned int x, unsigned int y, unsigned int z) const {
return data[ x + y*nx + z*nx*ny ];
};

private:
//Dont want this class copied, so remove the copy constructor and assignment.
DataBlock(const DataBlock&);
DataBlock&operator=(const DataBlock&);
};

关于c++ - 在 C++ 中优化 3D 成像过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16603459/

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