我有一个tif图像,大小约为10 Gb。我需要在此图像中执行对象分类或像素分类。图像数据的维数具有zyx形式。我的体素大小在x = 0.6,y = 0.6和z = 1.2中。 Z是物体的深度。我的RAM无法拍摄完整图像。
如果我分别对每个Z平面中的像素进行分类,然后合并以获得对象的最终形状和体积。
我是否会丢失任何信息,但最终形状或物体体积是否正确?
答案 0 :(得分:1)
@ankit agrawal 您可能已经找到了答案,但我的建议绝对不是说您需要更多内存。 我遇到了类似的问题,如果其他人遇到这些问题,以下选项会有所帮助。
选项
关于分裂成 z 平面的答案是正确的。您可能会丢失 z 平面中的信息。这个想法不错,但您可以将感兴趣区域 (ROI) 分割为多个块。这样它们就可以更易于管理,但可以说拆分 x/2、y/2 和 z/2。然后你会得到一堆在内存中使用的块。然后把数据堆起来稍后备份
使用库 [Dask] (https://dask.org/) ,它为您创建了所有这些。它专为并行性而设计,可以在单台计算机或集群上进行扩展。使用 dask.array 部分可以创建大量分块的 numpy 数组。更好的是,去使用 dask-image (在 dask 中应该有一个链接)。它是 dask.array 和许多 scipy ndimage 函数的包装器。最后,当文件被适当分割时,由于并行性,计算速度会更快。并非总是如此,但我很容易在 16GB 的笔记本电脑上处理 20GB 的数据集。这些文件是 8 位的,因此当许多库和函数上浮时会炸毁您的内存。这使您可以掌控一切。如果你坚持核心功能,它会工作得很好。处理映射块时会变得更难。
如果您仍有此问题。
答案 1 :(得分:0)
分别在每个z平面中进行分类的问题是,您可能无法使用这种受限信息对对象进行分类。
对于2D人脸检测问题,您可以轻松地以相同的方式想到,您将尝试分别检测每行中的人脸-这可能不会很鲁棒,并且您将失去宝贵的空间信息。最后,您可能最终将无法合并检测。
解决方案:
我的建议是增加体素的大小,直到可以被处理单元处理为止,例如降低数据的分辨率并以低置信度阈值进行分类。然后回来,对其中包含检测值的体积进行另一种分类,这次的目标是更高的置信度阈值。可以根据需要迭代完成此操作。
答案 2 :(得分:0)
我认为打破任何(x / y / z)平面的图像都无法满足体素概念的要点,因为三维对象的表示被展平并且丢失了空间关系数据。
我认为有两种选择: