【问题标题】:Analysis of 3d image data as 2d将 3d 图像数据分析为 2d
【发布时间】:2019-01-14 09:53:50
【问题描述】:

我有一个大小约为 10 Gb 的 tif 图像。我需要在此图像中执行对象分类或像素分类。图像数据的维度有 zyx 形式。我在 x=0.6、y=0.6 和 z=1.2 中的体素大小。 Z 是物体的深度。我的 RAM 无法拍摄整个图像。

如果我分别对每个 Z 平面中的像素进行分类,然后合并以获得对象的最终形状和体积。

我会丢失任何信息,我的最终形状或物体体积会出错吗?

【问题讨论】:

    标签: image-processing machine-learning point-clouds voxel


    【解决方案1】:

    @ankit agrawal 您可能已经找到了答案,但我的建议绝对不是说您需要更多内存。 我遇到了类似的问题,如果其他人遇到它们,下面的选项会有所帮助。

    选项

    1. 关于仅拆分为 z 平面的答案是正确的。您可能会丢失 z 平面中的信息。这个想法不错,但您可以将感兴趣区域 (ROI) / 分割成块。这样它们就可以更易于管理,但要拆分 x/2、y/2 和 z/2。然后你会得到一堆在内存中使用的块。以后再把数据堆起来备份

    2. 使用库 [Dask] (https://dask.org/),它会为您创建所有这些。它专为并行性而设计,可以在单台计算机或集群上进行扩展。使用 dask.array 部分可以让您创建大量分块的 numpy 数组。更好的是,使用 dask-image (dask 中应该有指向此的链接)。它是 dask.array 和许多 scipy ndimage 函数的包装器。最后,当文件被适当分割时,由于并行性,计算可以更快。并非总是如此,但我很容易在 16GB 的笔记本电脑上处理 20GB 的数据集。这些文件是 8 位的,所以当许多库和函数上浮时会炸毁你的记忆。这使您可以掌控一切。如果您坚持核心功能,它将正常工作。使用映射块时会变得更加困难。

    如果你还有这个问题。

    【讨论】:

    • @sunapi386 ,所以这就是您必须考虑什么是成像模式以及其他所有内容的地方。最简单的实现是 1x 3d 问题比 1x 1D 问题在计算上更难。因此,您将计算分解为 X、y 和 z 中的 3x 1D 问题。更容易处理,
    【解决方案2】:

    在每个 z 平面中单独进行分类的问题是,您可能无法使用这种受限信息对对象进行分类。

    对于 2D 人脸检测问题,您可以很容易地想到同样的方法,您将尝试单独检测每一行中的人脸 - 这可能不会非常稳健,并且 您会丢失有价值的空间信息。最后,您可能最终没有要合并的检测。

    解决方案:

    我的建议是增加体素的大小,直到它可以被处理单元处理,也就是说降低数据的分辨率并使用低置信度阈值进行分类。然后回来对带有检测的卷进行另一次分类,这次的目标是更高的置信度阈值。这可以根据需要迭代地完成。

    【讨论】:

      【解决方案3】:

      我认为在任何 (x/y/z) 平面上破坏图像都会破坏体素概念的观点,因为 3D 对象的表示是扁平的,并且您会丢失空间关系数据。

      我认为有几个选择:

      1. 使用分布式计算集群,例如 Hadoop。
      2. 考虑将该图像存储在 GeoMesa 等地理空间数据库中,以便对其进行有效查询,然后您可以将需要在本地训练的内容保存在内存中。
      3. 10GB 没那么大,或许可以升级一下内存容量?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 2018-07-05
        • 2017-08-26
        • 1970-01-01
        • 2012-12-31
        • 2012-12-03
        • 2018-03-24
        相关资源
        最近更新 更多