将一组索引索引到矩阵

Rom*_* B. 0 matlab mask matrix indices matrix-indexing

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

[ii, jj] = find(BlackOnWhite < 255)
Run Code Online (Sandbox Code Playgroud)

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

image(ii, jj) = 0
Run Code Online (Sandbox Code Playgroud)

但是零没有出现在预期的位置.如何将零只放在由iijj([ii(1), jj(1)], [ii(2), jj(2)]等等)对指定的位置?

Lui*_*ndo 6

一种简单的方法是使用线性索引.这意味着使用单个索引遍历矩阵中的所有条目(向下,然后跨越).在你的情况下:

  • 使用find一个输出.这给出了所需像素的线性指数.
  • 用它来索引矩阵.

所以:

ind = find(BlackOnWhite < 255);
image(ind) = 0;
Run Code Online (Sandbox Code Playgroud)

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

ind = BlackOnWhite < 255;
image(ind) = 0;
Run Code Online (Sandbox Code Playgroud)

您的问题中显示的代码的问题是,ii并且jj被用作" 下标索引 ".这将选择由任意值和任何值形成的所有对,这不是您想要的.iijj

如果你有标iijj喜欢你的问题,你只需要选择相应的值从每标(而不是所有对),您可以使用sub2ind转换为线性指标:

[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;
Run Code Online (Sandbox Code Playgroud)