※ 引述《YoursEver (银英传出webgame!?)》之铭言:
: 如题,
: 要计算4D Hessian,
: 请问应如何将所有的偏微分项排入cell array?
: 以2D举例,
: (1) H = [ partial_xx, partial_xy; partial_yx, partial_yy ];
: (2) 假设对一张 M-by-N 的影像做 Hessian,
: 这时候会得到 partial_xx, partial_xy; partial_yx, partial_yy 等,
: 共 4 个大小为 M-by_N 的矩阵.
: (3) 我希望建立一个 M-by-N 的 cell array,
: 每一个cell内含一个 2*2 的矩阵:
: [ partial_xx(i,j), partial_xy(i,j);
: partial_yx(i,j), partial_yy(i,j)]
: (i,j)对应到原本影像内的第(i,j)个pixel;
: ==
: 请问该怎么写才省时省力?
: 目前必须要排进cell array才能call cellfun处理后续.
: 虽然可以靠循环硬排,
: 因为实际的4D data量太大,循环会额外耗费时间.
: 谢谢.
我不知道你4D是什么意思,以你2D为例:
M = 400;
N = 300;
partial_xx = rand(M, N);
partial_xy = rand(M, N);
partial_yx = rand(M, N);
partial_yy = rand(M, N);
tic
H = cat(3, partial_xx, partial_yx, partial_xy, partial_yy);
H = cellfun(@(x) reshape(squeeze(x), 2, 2), num2cell(H, 3), 'uni', false);
toc
% Elapsed time is 2.287873 seconds.
% note: 注意cat的顺序,因为MATLAB是column-major,排的时候要排对
tic
H2 = arrayfun(@(x11, x12, x21, x22) [x11, x12; x21, x22], partial_xx, ...
partial_xy, partial_yx, partial_yy, 'uni', false);
toc
% Elapsed time is 1.355389 seconds.
isequal(H, H2) % true