我有一个三维数组(高光谱图像),我想重新采样两个第一维(每个像素)的每个元素第三维(波长)。
我一直在尝试嵌套for循环而没有成功,我想我错误地理解了这个概念。这就是我想要的:
T_Ire = zeros(size(I)); % initialize array
for i = 1:numel(I(:,1,1))
for t = 1:numel(I(1,:,1))
step=squeeze(I(i,t,:));
step=double(step);
step=step';
step=resample(step',2,3);
T_Ire(i,t,:)=step;
end
end
我是3D阵列(高光谱图像)。
这里有两个问题:
step=resample(step',2,3);
时,你的数组将是它的三分之二。然后,当你试图将它放回到立方体矩阵上时,它将不适合,因为它具有较少的元素。您可以通过使用适当的大小初始化T_Ire
来解决这个问题。像这样:
T_Ire = zeros(size(I, 1), size(I, 2), size(I, 3) * 2 / 3);
I(i,t,:)
时,它的大小将是1x1xN
(其中N
=第三维的大小)。但是当你打电话给step=squeeze(I(i,t,:));
时,现在它是Nx1
。要将其添加回去,您应该调用permute或reshape将其重新调整为1x1xN
。使用permute:
T_Ire(i,t,:) = permute(step, [3 2 1]);
使用reshape:
T_Ire(i,t,:) = reshape(step, [1 1 numel(step)]);