【问题标题】:Downsampling a 2d MATRIX in matlab, by taking average block wise [duplicate]在matlab中对二维矩阵进行下采样,按块取平均[重复]
【发布时间】:2015-04-10 17:15:53
【问题描述】:

假设我有一个矩阵 A,它的维度是 4x4。

现在我想通过因子 2 对该矩阵进行下采样,以获得一个新的维度为 2x2 的矩阵 B。

我想通过以下方式进行下采样:

让A成为

 1     5     9    13
 2     6    10    14
 3     7    11    15
 4     8    12    16

我希望B成为

3.5000   11.5000
5.5000   13.5000 

要得到 B(1,1) = 我取平均值 (1, 5, 2 和 6)

要得到 B(1,2) = 我取平均值 (9, 13, 10 和 14)

要得到 B(2,1) = 我取平均值 (3, 7, 4 和 8) 等等。

所以对于 B 中的每个元素,我从 A 中取出相应的 2x2 块并取其平均值。

在我的例子中,矩阵 A 的维度很大。 此外,下采样因子可以是任意的。

例如, 一个=

 1     7    13    19    25    31
 2     8    14    20    26    32
 3     9    15    21    27    33
 4    10    16    22    28    34
 5    11    17    23    29    35
 6    12    18    24    30    36

对于大小为 3/2 的下采样。

矩阵 B 的大小为 4x4。

对于每个 B 单元,我必须采用不重叠的 1.5x1.5 块 A。

例如,

B(1,1) = 均值(1, 0.5x7, 0.5x2, 0.5x8)

B(2,1) = 平均值(0.5x2, 0.5x8, 3, 9)

B(3,1) = 均值(4, 0.5x10, 0.5x5, 0.5x11)

B(4,1) = 平均值(0.5x5, 0.5x11, 6, 12)

等等。

有没有更快的方法来做到这一点而无需 for 循环?

【问题讨论】:

  • B的(1,1)元素应该是3.5吧?
  • 对不起,我已经更正了。

标签: matlab matrix downsampling


【解决方案1】:

这个怎么样:

A = [1     5     9    13;
 2     6    10    14;
 3     7    11    15;
 4     8    12    16];

B = ones(2)/4;

out = conv2(A,B,'valid');

%{
out = [3.5000    7.5000   11.5000;
4.5000    8.5000   12.5000;
5.5000    9.5000   13.5000];
%}

这比您要求的多一点,但您可以丢弃不需要的信息。对于这种情况,您只会对 out(1,1) 、 out(1,3) out (3,1) 和 out(3,3) 感兴趣

【讨论】:

  • 您可以通过out = out(1:2:end,1:2:end);完成答案。这与我在重复帖子中采用的方法几乎相同。
  • 谢谢!欣赏!
  • 哦,拍摄@rayryeng 我什至没有想过要寻找重复的哈哈,那太好了,你标记了它。
  • @Benoit_11 - 哈哈不用担心。我只知道它,因为我几天前回答了一个类似的问题。如果我不这样做,我就不会标记为重复,因为我不知道去哪里找!无论如何,我仍然对这两个答案都投了赞成票。
  • @Benoit_11 - 顺便说一句,我的问题有很多活动。我已经修改了我的帖子以利用scatter。感谢您的提示!
【解决方案2】:

如果你有图像处理工具箱,你可以使用blockproc:

fun = @(block_struct) mean2(block_struct.data) * ones(size(block_struct.data));
B = blockproc(A,[2 2],fun);

B = reshape(unique(B),2,[])

输出:

A =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16


B =

          3.5         11.5
          5.5         13.5

你可以用你想要的任何因素替换块大小。请注意,对于非整数因子,MATLAB 会截断它们。

【讨论】:

  • 感谢它非常适合整数下采样因子。我想要非整数采样因子。我现在编辑了问题,请看。
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多