对称地扩展矩阵

时间:2016-03-18 15:54:08

标签: matlab matrix

如何通过对称复制边界值在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的函数,但是我还没有。

1 个答案:

答案 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中雕刻出一个合适的部分。棘手的部分是计算多少次重复,哪一部分要开辟出来。