2

次のようなことをしたいとします

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など。

4

4 に答える 4

0

この場合、2つのアイデアがあります。

第 1 の方法: 前にイメージを再形成することができます。

% 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);

2番目の方法:eval andrepmatを 使用するソリューションになる可能性があります。

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

使用目的 (設定、取得など) によって少し異なります。

于 2013-06-23T19:36:11.217 に答える
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 に答える
-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 に答える