1

私は次のような画像のマトリックスを持ってm.nいます:

images = zeros( m, n, height, width );

m.n幅と高さが指定された画像があることを意味します。次に、forループで; 私はこれらの画像を次のように塗りつぶします:

for i=1:m
    for j=1:n
       images(i,j,:,:) = imread('imagePath');
    end
end

次に、画像を使用したいとします(1,1)

image1 = images(1,1,:,:);

image1私はこれが持っていることを期待していsize = (h,w)ます。しかし、私が言うとき:

size(image1)

結果が得られます:

(1,1,h,w)

質問:

1.1。

次の結果が得られないのはなぜですか?

(h,w)

2.2。

期待した結果を得るためにコードを再構築するにはどうすればよいですか?

4

2 に答える 2

1

squeeze関数を使用してそれを行うことができます:)

image1 = squeeze(image1);
size(image1)

与える必要があります

(h,w)
于 2012-06-06T14:54:48.600 に答える
1

これは、matlabがインデックス作成を行う方法と関係があります。あなたが言う時

image1 = images(1,1,:,:);

matlabに、サイズ1の1次元と2次元の4次元配列が必要であることを伝えています。

一方、あなたが言った場合:

junk = images(:,:,1,1);
size(junk)
> [m,n]

Matlabは、サイズ[m、n]の行列を、サイズ[m、n、1]または[m、n、1,1]の場合と同じように扱います。前面でそれを行うことはできません。したがって、squeeze@Junuxxが指摘するように必要です。別のアプローチは、次のようにすることです。

images = zeros( height, width, m, n );
for i=1:m
    for j=1:n
       images(:,:,m,n) = imread('imagePath');
    end
end
image1 = images(:,:,1,1);
于 2012-06-06T15:00:42.017 に答える