为什么我从尺寸中得到不同的值?

时间:2013-09-21 19:14:28

标签: matlab

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

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

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

为什么这两种方式不同?

2 个答案:

答案 0 :(得分:3)

阅读size功能的complete help。特别是它说

[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).

如您的评论所示,您的图片是一个三维数组。因此,根据手册,如果您只使用[h,w] = size(...)要求3种尺寸中的2种,则参数w将包含第2和第3维的产品。在执行h = size(..., 1)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

答案 1 :(得分:0)

@BasSwinckels解释外,您还可以写:

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

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