【问题标题】:Dividing a 4D array image data into cells将 4D 数组图像数据划分为单元格
【发布时间】:2017-11-21 19:00:21
【问题描述】:

我有 22000 个细胞核图像,已存储为 4D 数据。每个图像的尺寸为 27 x 27 x 3,它们以 [27 27 3 22000] 形式存储在 nuclei4DArrayData 中

现在我想将此 4D 数组拆分为单元格,这样我就有 1x22000 单元格数组,其中每个单元格都有 27x27x3 图像数据矩阵。

我曾尝试使用 mat2cell、num2cell,但无法获取维度参数以我需要的方式对其进行拆分。 我可以使用 for 循环手动将每个图像分配给一个单元格数组,但是,是否有任何直接方法或无法使用 mat2cell 函数。只想知道是否可以使用 MATLAB 函数。

【问题讨论】:

  • 为什么要将它们拆分为单元格?它们作为 4D 阵列可能更好。您始终可以以nuclei4DArrayData(:,:,:,k) 的身份访问k-th 图像
  • 在预定义函数中需要作为二维元胞数组。另外,我想学习。

标签: arrays image matlab multidimensional-array cell-array


【解决方案1】:

函数num2cell 应该可以解决这个问题,然后调用reshape。从名为data 的矩阵中的数据开始:

cellData = reshape(num2cell(data, 1:3), 1, []);

【讨论】:

  • 不,它仍然提供 4D 单元阵列。这也可以直接从 num2cell(data) 获得。我想要的是尺寸为 1x 22000 的二维单元阵列,其中每个单元列都有一个图像。
  • @Suvidha:啊,我明白了,答案已更新。之后你只需要重塑。
【解决方案2】:

这也有效,而且我觉得可读性更高。我测试了它,运行时间完全相同。

 data = zeros(27, 27, 3, 22000);
 cellData = squeeze(num2cell(data, 1:3));

squeeze 函数删除单一维度。我测试了它的运行时间,和reshaping一样。

【讨论】:

  • squeeze 有效,但会创建一个 22000×1 元胞数组,而不是 1×22000 元胞数组。
猜你喜欢
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多