将一组索引索引到矩阵

时间:2018-10-10 12:28:04

标签: matlab matrix mask indices matrix-indexing

我从图像中检索了所有非白色像素:

[ii, jj] = find(BlackOnWhite < 255)

然后我尝试将这些像素坐标索引到矩阵中:

image(ii, jj) = 0

但是零不会出现在预期的位置。

如何仅在iijj对的指定位置(即[ii(1), jj(1)], [ii(2), jj(2)]等)放置零?

2 个答案:

答案 0 :(得分:6)

一个简单的方法是使用linear indexing。这意味着使用一个遍历矩阵中所有条目的索引(从下到上)。就您而言:

  • 一次使用find。这样就给出了所需像素的线性索引。
  • 使用它来索引矩阵。

所以:

ind = find(BlackOnWhite < 255);
image(ind) = 0;

您甚至可以删除find并使用logical indexing。这意味着逻辑比较的结果将直接用作索引:

ind = BlackOnWhite < 255;
image(ind) = 0;

问题中显示的代码存在问题,iijj被用作"subscript indices"。这会选择由ii中的任何值和jj中的任何值组成的所有对,这不是您想要的。

如果您的问题中有下标iijj,并且您只需要从每个下标中选择相应的值(而不是所有对),则可以使用sub2ind转换为线性索引

[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;

答案 1 :(得分:3)

这不起作用,因为MATLAB将下标视为网格,这意味着大致“将iijj中的任何一个的所有交集都设置为零” 而不是“将这些单独的坐标对指定的位置设置为零”。

在某些情况下(但不是这种情况),您可能需要将一组下标转换为索引,在这种情况下,我建议您熟悉sub2ind

正如其他答案中所述,针对您的情况,最好的事情就是:

image(BlackOnWhite < 255) = 0;