Matlab如何用平均值“缩小”向量?

3

很难解释我正在寻找的东西,我在Matlab中有一个表示为m x n矩阵的图像,并且我正在尝试以与缩放图像相同的方式将其缩小到4x4(平均最近值)。

例如:

1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
0 2 3 4 9 9 7 8
0 2 3 4 9 9 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 7
1 2 3 4 5 6 7 7

会变成

1.5 3.5 5.5 7.5
1.0 3.5 9.0 7.5
1.5 3.5 5.5 7.5
1.5 3.5 5.5 7.0
3个回答

5

看起来imresize返回的不是你期望的结果。对于你的输入数据,以下内容可以解决此问题:

A = filter2([1 1; 1 1] / 4, X, 'same')
A = A(1:2:end, 1:2:end);

编辑: 实际上,按照以下方法可能更快:

i = 1:2:size(A,1)-1;
j = 1:2:size(A,2)-1;

B = 0.25 * (A(i,j) + A(i+1,j) + A(i,j+1) + A(i+1,j+1));

3

你为什么不能使用imresize()函数呢?它恰好可以满足你的要求。

I =

 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 0 2 3 4 5 6 7 8
 0 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8



I2 = imresize(I,[4 4])

I2 =

1.4688    3.4919    5.5117    7.4922
1.0742    3.5289    5.5117    7.4922
1.4688    3.4919    5.5117    7.4922
1.5137    3.4877    5.5117    7.4922

这实际上不是一张图片,我没有原始数据。 - Pez Cuckow
4
只要是矩阵,就可以将其视为图像。 - Ghaul
"imresize"没有给出精确的值。它会给出接近平均值的值,但我不知道为什么。 - smttsp

0

如果您没有来自图像处理工具箱的imresize.m,您可以在这里查看Octave是如何做到的here(它使用卷积)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接