2

假设我想做类似的事情

image(1:end-1,2:end,:)

这里是彩色图像的一部分

但尺寸未知,即会自动工作

image(1:end-1,2:end)

二维

image(1:end-1,2:end,:)

对于 3 和

image(1:end-1,2:end,:,:)

为 4 以此类推。

4

4 回答 4

2

如果你总是想把所有的第三个暗淡和向上,你可以使用

>> image(1:end-1,2:end,:,:,:)

即使是二维数组。

或者,您可以使用subsref较少的临时/hacky 方法:

>> [S.subs{1:ndims(image)}] = deal(':');
>> S.subs{1} = '1:end-1';
>> S.subs{2} = '2:end';
>> S.type = '()';
>> subsref(image, S )
于 2013-06-23T19:27:45.013 回答
0

假设你有一个数组A

A  = rand(2,3,2,5,7);

然后,您可以填写':'您选择的剩余维度:

nd   = ndims(A);
subs = repmat({':'},1,nd-2);
A(1:end-1,2:end, subs{:})
于 2013-06-23T19:54:02.660 回答
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);

第二种方式: 可能是使用evaland的解决方案repmat,例如

eval(['image(1:end-1,2:end',repmat(',:',[1,length(size(image))-2]) ')'])

取决于您使用它的目的(设置,获取,...)。

于 2013-06-23T19:36:11.217 回答
-1

我有一点想法。您可以制定一个函数,用 分析矩阵的维度size(size(Matrix),2)。然后你可以构造一个字符串,其中包含你想要的带有一点 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)
于 2013-06-23T19:51:34.703 回答