我想编写一个转换矩阵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    ]

最佳答案

您可以使用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工作的额外好处。

07-24 19:01