假设我想做类似于
的事情image(1:end-1,2:end,:)
这里是彩色图像的一部分
但维度数量未知,即自动生成
image(1:end-1,2:end)
表示2维
image(1:end-1,2:end,:)
表示3和
image(1:end-1,2:end,:,:)
代表4等等。
答案 0 :(得分:2)
如果你总是想要拍摄所有第三个暗淡的,你可以使用
>> image(1:end-1,2:end,:,:,:)
即使是2D阵列。
或者,您可以使用subsref
来减少ad-hoc / hacky方法:
>> [S.subs{1:ndims(image)}] = deal(':');
>> S.subs{1} = '1:end-1';
>> S.subs{2} = '2:end';
>> S.type = '()';
>> subsref(image, S )
答案 1 :(得分:0)
对于这种情况我会有两个想法。
第一种方式: 您可以在重新塑造图像之前,例如
% transform image to 3d format
% do not forget to transform all used entities to this 3d-format as well
sizeIm = size(image);
image3 = reshape(image,[sizeIm(1:2),prod(sizeIm(3:end)])
% work on image3
image3(1:end-1,2:end,:) = ...;
% transform back:
image = reshape(image3,sizeIm);
第二路:
可以是使用eval
和repmat
的解决方案,例如
eval(['image(1:end-1,2:end',repmat(',:',[1,length(size(image))-2]) ')'])
取决于你正在使用它(设置,获取......)。
答案 2 :(得分:0)
假设您有一个数组A
:
A = rand(2,3,2,5,7);
然后,您可以填写':'
,您选择的其余尺寸:
nd = ndims(A);
subs = repmat({':'},1,nd-2);
A(1:end-1,2:end, subs{:})
答案 3 :(得分:-1)
我有一点想法。您可以制定一个函数,使用size(size(Matrix),2)
分析Matrix的维度。然后你就可以用一个for循环来构造一个包含所需命令的字符串,然后用eval执行这个字符串。
A=rand(3,3,3,3,3,3,3,3,3,3) %<--- change here dimension
dim=size(size(A),2)
addstr='';
if dim>2
for i=1:dim-2
addstr=[addstr ',:'];
end
end
command=['A(1:2,1:2' addstr ')']
eval(command)