眼睛和克朗与二维矩阵

时间:2016-05-06 05:44:13

标签: matlab image-processing matrix

我有一个维度a的矩阵r x c x 4 x 11,其中rc是图像的行和列。当我拿test=a(1,1,:,:)并运行以下代码时:

test=reshape(test,[4,11]);
b_a=kron(eye(3),test);

我的b_a维度为12 x 33。而当我做的时候

b_a=kron(eye(3),a);

维度不是r x c x 12 x 33,而是429 x 8580。请帮助我纠正代码,以便获得所需的维度,即r x c x 12 x 33

1 个答案:

答案 0 :(得分:0)

这是因为kron已经在其参数中重构了矩阵,并且没有进一步检查(假定为2D)。从kron.m完整矩阵我们可以看到问题:

[ma,na] = size(A);
[mb,nb] = size(B);

A = reshape(A,[1 ma 1 na]);
B = reshape(B,[mb 1 nb 1]);
K = reshape(bsxfun(@times,A,B),[ma*mb na*nb]);

第一个size部分是有问题的部分(通常使用matlab语法)。这里nargout造成了麻烦。我们来看看

a = rand(10,5,4,11);
[ma,na] = size(a);
[ma,na,size(a)] 

这将给出

>> 10 220 10 5 4 11

这意味着na只是剩余维度的乘积。因为当输出参数不匹配时,规则是

%   N > NDIMS(X), SIZE returns ones in the "extra" variables, i.e., outputs
%                 NDIMS(X)+1 through N.
%   N < NDIMS(X), MN contains the product of the sizes of dimensions N
%                 through NDIMS(X).

我不知道为什么有人会这样做,但无论如何我离题了。

您可以循环播放,也可以只修改kron函数,并确保在kron期间保留其余尺寸。