通过插入邻居元素平均值来扩展2 * 2矩阵

时间:2016-10-06 23:35:35

标签: matlab matrix average expand

我想编写一个转换矩阵x=[a b; c d]的函数 进入另一个矩阵:

y = [  a        (a+b)/2       b   ; 
     (a+c)/2  (a+b+c+d)/4   (b+d)/2 ; 
       c        (c+d)/2       d    ]

2 个答案:

答案 0 :(得分:4)

您可以使用2D卷积来计算相邻元素的总和(每个元素的分子),然后使用2D卷积和1的矩阵来确定分母(邻居的数量)。

x = [1, 2; 3, 4];

numerator = conv2(x, ones(2));

%    1    3    2
%    4   10    6
%    3    7    4

denominator = conv2(ones(size(x)), ones(2));

%   1   2   1
%   2   4   2
%   1   2   1

result = numerator ./ denominator;

%   1.0000   1.5000   2.0000
%   2.0000   2.5000   3.0000
%   3.0000   3.5000   4.0000

或者作为一个单行:

result = conv2(x, ones(2)) ./ conv2(ones(size(x)), ones(2));

这也与bi-linear interpolation相同,因此您也可以执行以下操作:

[xx,yy] = meshgrid(1:0.5:size(x, 2), 1:0.5:size(x, 1));
result = interp2(x, xx, yy, 'linear');

这两种方法都有额外的好处,适用于任何大小的x

答案 1 :(得分:2)

您可以使用mean功能,如下所示:

y = [x(:,1)  mean(x,2)   x(:,2)];
y = [y(1,:); mean(y,1);  y(2,:)];