我有一个5x5的单元格,每个单元格有100x100单个数据。我想计算每个矩阵100x100的模式,然后做一些取决于模式的操作。我怎样才能做到这一点?
我有这个代码来计算每个单元格的模式,现在我想将100x100矩阵上的每个值与相应的单元格模式进行比较。
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
for i=1:5
for j=1:5
mode_cell = mode(c{i,j}(:))
end
end
我做了这段代码:
modes = cellfun(@(x) mode(x(:)), c, 'UniformOutput', false);
modes = cell2mat(cellfun(@(x) mode(x(:)), c, 'UniformOutput', false));
for i = 1 :5
for j =1 :5
for i2=1 :100
for j2=1 :100
cell = c{i,j};
if cell(i2,j2)<modes(i,j)
teste(i,j)=0;
else
teste(i,j)=1;
end
end
end
end
end
但是使用此代码,矩阵测试仅为100x100。我想附加所有睾丸矩阵,最后我想要一个500x500矩阵。我怎么能这样做?
答案 0 :(得分:4)
简明解决方案(+)
:
%// data
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
%// 5x5 cell matrix with 100x100 data entries
%// solution
teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
的说明:强> 的
如前所述(请参阅上面的上一个答案),请使用cellfun
命令,但要包含'UniformOutput', false'
名称 - 值对,以便生成的modes
为{{1} } cell 矩阵(而不是值矩阵)。计算模式后,使用后续的5x5
调用来根据您的规范计算逻辑。
cellfun
%// data
I = imread('DSM.tif');
c = mat2cell(I, [100,100,100,100,100], [100,100,100,100,100])
%// 5x5 cell matrix with 100x100 data entries
%// modes: 5x5 cell matrix with single value entries (mode)
modes = cellfun(@(x) mode(x(:)), c, 'UniformOutput', false);
%// teste: 5x5 cell matrix with 100x100 logical (0/1) entries
teste = cellfun(@ge, c, modes, 'UniformOutput', false);
中的逻辑描述了每个teste
数据块中的每个值,如果该值小于相应块的模式值:
100x100
最后,如果要将0 : values in block less than block mode,
1 : values greater or equal to block mode.
单元格数组5x5
(每个单元格保存teste
逻辑条目)转换为单个100x100
逻辑矩阵,您可以制作使用cell2mat
命令,应用于单元格矩阵500x500
:
teste
现在,通过在单testeSingleValueMatrix = cell2mat(teste)
%// 500x500 logical matrix
中包含bsxfun
命令,我们可以将上述内容归结为一行;上面cellfun
中给出的浓缩解,即
(+)
您可以使用teste = cell2mat(cellfun(@(x) bsxfun(@ge, x, mode(x(:))), c, 'UniformOutput', false));
%// 500x500 logical matrix
命令
cellfun
输出将是myCellMatrix = ... %// 5x5 cell matrix with 100x100 data entries
modes = cellfun(@(x) mode(x(:)), myCellMatrix);
值矩阵,其中包含每个100x100数据集的模式。