如何通过对称复制边界值在MATLAB中扩展矩阵?例如,如果X
是我的矩阵,则扩展矩阵Xextsym
应如下所示:
X =
1 2 3
4 5 6
Xextsym =
5 4 4 5 6 6 5
2 1 1 2 3 3 2
2 1 1 2 3 3 2
5 4 4 5 6 6 5
5 4 4 5 6 6 5
2 1 1 2 3 3 2
我知道Wavelet Toolbox中存在一个名为wextend
的函数,但是我还没有。
答案 0 :(得分:1)
这是一个通过对称反射扩展给定矩阵A的函数,在四个方向的每个方向上添加w元素。用法示例:
symextend([1 2 3; 4 5 6], 2)
返回问题中的扩展矩阵。
function R = symextend(A, w)
[m, n] = size(A);
B = [A A(:, n:-1:1); A(m:-1:1, :) A(m:-1:1, n:-1:1)];
repm = 2*ceil(0.5+0.5*w/m);
repn = 2*ceil(0.5+0.5*w/n);
C = repmat(B, repm, repn);
R = C(m*repm + 1 - w : m*repm + m + w, n*repn + 1 - w : n*repn + n + w)
end
想法:首先在每个方向上反映A一次(这会产生B),然后用repmat
重复B,获得C.最后,从C中雕刻出一个合适的部分。棘手的部分是计算多少次重复,哪一部分要开辟出来。