我想编写一个转换矩阵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
工作的额外好处。