1

显然,在 Matlab 中,当我以这两种方式使用大小时,我会得到不同的宽度和高度值:

% way 1
[height, width] = size(myLoadedImage);

% way 2
height = size(myLoadedImage, 1);
width = size(myLoadedImage, 2)

为什么这两种方式不同?

4

2 回答 2

3

阅读该功能的完整帮助size。具体来说,它说

[d1,d2,d3,...,dn] = size(X), for n > 1, returns the sizes of the dimensions of 
the array X in the variables d1,d2,d3,...,dn, provided the number of output
arguments n equals ndims(X).

If n does not equal ndims(X), the following exceptions hold:

n < ndims(X)   di equals the size of the ith dimension of X for 0<i<n, but dn 
               equals the product of the sizes of the remaining dimensions of X, 
               that is, dimensions n through ndims(X).

如您的评论所示,您的图像是一个 3 维数组。因此,根据手册,如果您只要求 3 种尺寸中的 2 种[h,w] = size(...),则参数w将包含第 2 维和第 3 维的乘积。执行h = size(..., 1)and时w = size(..., 2),您会得到第一维和第二维的准确值。

模拟您的案例:

>> im = randn(512, 143, 3);
>> h = size(im, 1)
h = 512
>> w = size(im, 2)
w = 143
>> [h, w] = size(im)
h = 512
w = 429

请注意,在最后一种情况下w = 143 * 3 = 429

于 2013-09-21T19:48:45.780 回答
0

除了@BasSwinckels 的解释,你还可以写:

[h,w,~] = size(img);

这适用于任意数量的维度(灰度图像、RGB 图像或更高维度的数组)。

于 2013-09-22T12:35:56.750 回答