在细胞阵列中应用Movmedian

时间:2017-08-24 20:01:17

标签: arrays matlab cell median

我有一个名为"输出"的单元阵列(2 x 6),行#1中的每个单元{1 - > 6,2}包含1024 x 1024 x 100矩阵。我想将movmedian应用于第1行中的每个单元格。我想在维度= 3中应用此函数,窗口大小= 5。

output = cellfun(@movmedian(5,3), output,'uniform', 0);

这是我到目前为止所提出的代码,然而,它产生了一个"无价值或意外的括号或括号"错误。我不确定是什么导致了这个错误。我也有些不确定如何指示matlab仅在单元阵列的第1行执行此操作,请帮忙!

感谢您的时间!!

1 个答案:

答案 0 :(得分:2)

作为function handle的第一个参数传递的cellfun将顺序传递每个单元格的内容(即每个3-D矩阵)。由于您还需要传递movmedian所需的其他参数,因此您应该创建一个anonymous function,如下所示:

@(m) movmedian(m, 5, 3)

输入参数m是3-D矩阵。如果您要将其应用于output的第一行,则必须index the cell array这样:

output(1, :)

这将返回包含第一行output的单元格数组,其中:表示“所有列”。如果您希望将修改后的矩阵存储在output的相同单元格中,则可以在赋值中使用相同的索引。

总而言之,这就是解决方案:

output(1, :) = cellfun(@(m) movmedian(m, 5, 3), output(1, :),...
                       'UniformOutput', false);

...以及避免必须指定'UniformOutput', false的一个小技巧是将匿名函数的结果封装在单元格数组中:

output(1, :) = cellfun(@(m) {movmedian(m, 5, 3)}, output(1, :));