Matlab矩阵语法

时间:2012-10-24 16:50:19

标签: matlab syntax matrix

我有一个Matlab代码片段,我尝试用C ++编写,但我真的不明白 那里发生了什么:

for c = 1:3
    Id = double(I(:,:,c))/255;
    Wc(:,:,c) = sum(Id(pixels).*weights, 3);
end

有一张尺寸为480x640x3的图像。在第一次迭代中,图像的第一个通道是 保存在Id中,然后其大小为480x640。但下一行发生了什么?我只是没有 理解这种语法。

像素和重量的大小为300x383x4x1。

那么这条线究竟做了什么?:

sum(Id(pixels).*weights, 3);

谢谢。

1 个答案:

答案 0 :(得分:1)

sum(X, n)总结了 n -th维度中矩阵X的所有元素,因此:

sum(Id(pixels) .* weights, 3);

确实做到以下几点:

  • 从矩阵Id中提取子矩阵,pixels是提取值的索引:
    矩阵Id被明确转换为列向量,得到的子矩阵与pixels的大小相同(每个值等于Id(p),其中ppixels)中的相应元素。
  • 将提取的矩阵乘以另一个矩阵weights逐个元素(请注意,乘法运算符为.*
  • 总结三维矩阵的所有元素。

您可以查看the official documentation以获取更多信息。

编辑:一个简单的例子

我们假设:

Id = [10 20; 30 40; 50 60; 70 80];
pixels(:, :, 1) = [4 4; 4 4];
pixels(:, :, 2) = [6 6; 6 6];
pixels(:, :, 3) = [8 8; 8 8];

即,Id 2-D 矩阵,pixels 3-D 。现在,Id(pixels)将产生:

ans(:, :, 1) =

  70  70
  70  70

ans(:, :, 2) =

  40  40
  40  40

ans(:, :, 3) =

  80  80
  80  80

因为如果您将Id转换为列向量(尝试Id(:)),则70是4 th 元素,40是6 th 80是8 th 。请注意,结果与pixels(不是Id!)的尺寸相同。

希望有所帮助!