MATLAB中不规范调用size()函数,等号前后维度不匹配时,额外维度折叠的问题

图左为512*512的灰度图,图右为512*512*的彩色图,

在测试灰度图的尺寸时,调用了函数

P=imread('lena.jpg');
[M,N]=size(P);

此时 M=512;N=512;

在测试彩色图的尺寸时,沿用了代码

P=imread('lena.jpg');
[M,N]=size(P);

结果 M=512;N=1536;

N并不是预想的512;

查询了官方文档,得到,

% [M,N] = SIZE(X):对于矩阵 X,以两个单独的输出变量返回行数和列数。
% [M1,M2,M3,...,MN] = SIZE(X):对于 N>1 的情况,返回数组 X 的前 N 维的尺寸。如果输出变量的数量 N % 不等于 NDIMS(X)(X 的维度数),则:
% 如果 N > NDIMS(X),SIZE 函数会在“额外”的变量中返回 1。
% 如果 N < NDIMS(X),最后一个输出变量 MN 将包含从第 N 维到 NDIMS(X) 维的尺寸的乘积。

例如[M,N]=size(P);也就是等号前的数组维度小于P的维度时,MATLAB会把超出的维度折叠到N,因此N=512*3=1536;

因此规范的size()函数调用格式如下

B = ones(4, 3, 2, 5);
[C,D,~] = size(B);

这样可以保证C,D为我们想要的输出(C=4;D=3;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值