Image processing 三维图像数据的二维分析

Image processing 三维图像数据的二维分析,image-processing,machine-learning,point-clouds,voxel,Image Processing,Machine Learning,Point Clouds,Voxel,我有一个大约10 Gb大小的tif图像。我需要在此图像中执行对象分类或像素分类。图像数据的维数为zyx形式。我的体素大小,x=0.6,y=0.6,z=1.2。Z是对象的深度。我的RAM无法拍摄整个图像 如果我分别对每个Z平面上的像素进行分类,然后合并以获得对象的最终形状和体积 我是否会丢失任何信息,而我的最终形状或对象体积将是错误的?在每个z平面中单独进行分类的问题是,您可能无法使用此类受限信息对对象进行分类 对于2D人脸检测问题,您可以很容易地想到同样的方法,在2D人脸检测问题中,您将尝试单独

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

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


我是否会丢失任何信息,而我的最终形状或对象体积将是错误的?

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

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

解决方案建议:


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

我认为将图像分解为任何(x/y/z)平面都会破坏体素概念的意义,因为三维对象的表示是扁平的,并且会丢失空间关系数据

我认为有两种选择:

  • 使用分布式计算集群,如Hadoop
  • 考虑将该图像存储在GeoMesa之类的地理空间数据库中,这样可以高效地查询该图像,然后您就可以在内存中保存本地培训所需的内容
  • 10GB并没有那么大,所以也许可以升级您的内存容量

  • @ankit agrawal你可能已经找到了答案,但我的建议是绝对不要说你需要更多的记忆。 我也遇到过类似的问题,如果有人遇到,下面的选项会有所帮助

    选择权

  • 关于只拆分为z平面的答案是正确的。在z平面上可能会丢失信息。这个主意不错,但你可以把感兴趣区域(ROI)/图像分割成块。因此,它们可以更易于管理,但可以将x/2、y/2和z/2分开。然后你会得到一堆在内存中使用的块。然后将数据堆叠起来

  • 使用库[Dask](),它会为您创建所有这些。它是为并行性而设计的,可以在单个计算机或集群上进行扩展。使用dask.array部分可以创建大量分块的numpy数组。更好的是,使用dask图像(在dask中应该有一个链接)。它是dask.array和许多scipy ndimage函数的包装器。最后,适当分割文件时,由于并行性,计算速度更快。不总是这样,但我在16GB的笔记本电脑上轻松地处理了20GB的数据集。当许多库和函数向上浮动时,这些文件是8位的,这会破坏您的内存。这可以让你掌控一切。如果你坚持核心功能,它会工作得很好。使用映射块时会变得更加困难


  • 如果您仍然存在此问题。

    @sunapi386,那么您必须考虑什么是成像模式以及其他所有问题。最简单的实现是1x 3d问题比1x 1D问题在计算上更困难。所以你把计算分解成X,y和z的3x1d问题。更容易处理,