将一组索引索引到矩阵
Indexing a set of indices to a matrix
我从图像中检索了所有非白色像素:
[ii, jj] = find(BlackOnWhite < 255)
然后我尝试将这些像素坐标索引到矩阵:
image(ii, jj) = 0
但是零没有出现在预期的位置。我怎样才能只在 ii
和 jj
(即 [ii(1), jj(1)], [ii(2), jj(2)]
等)的对指定的位置放置零?
一个简单的方法是使用 linear indexing。这意味着使用单个索引遍历矩阵中的所有条目(向下,然后穿过)。在你的情况下:
- 对一个输出使用
find
。这给出了所需像素的线性索引。
- 用它来索引矩阵。
所以:
ind = find(BlackOnWhite < 255);
image(ind) = 0;
您甚至可以删除 find
并使用 logical indexing。意思是直接把逻辑比较的结果作为索引:
ind = BlackOnWhite < 255;
image(ind) = 0;
您问题中显示的代码的问题是 ii
和 jj
被用作 "subscript indices"。这 selects 所有对 由 ii
中的任何值和 jj
中的任何值组成,这不是您想要的。
如果您的问题中有下标 ii
和 jj
,您只需要 select 每个下标的对应值 (而不是所有对),您可以使用 sub2ind
来 转换为线性索引 :
[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;
它不起作用,因为 MATLAB 将下标视为网格,这意味着大致 "set all intersection of any of ii
and any of jj
to zero" 而不是 "set the locations specified by these separate pairs of coordinates to zero".
在某些情况下(但不是这个)您可能需要将一组下标转换为索引,在这种情况下我建议您熟悉 sub2ind
。
如其他答案中所述,针对您的情况最好的做法是:
image(BlackOnWhite < 255) = 0;
我从图像中检索了所有非白色像素:
[ii, jj] = find(BlackOnWhite < 255)
然后我尝试将这些像素坐标索引到矩阵:
image(ii, jj) = 0
但是零没有出现在预期的位置。我怎样才能只在 ii
和 jj
(即 [ii(1), jj(1)], [ii(2), jj(2)]
等)的对指定的位置放置零?
一个简单的方法是使用 linear indexing。这意味着使用单个索引遍历矩阵中的所有条目(向下,然后穿过)。在你的情况下:
- 对一个输出使用
find
。这给出了所需像素的线性索引。 - 用它来索引矩阵。
所以:
ind = find(BlackOnWhite < 255);
image(ind) = 0;
您甚至可以删除 find
并使用 logical indexing。意思是直接把逻辑比较的结果作为索引:
ind = BlackOnWhite < 255;
image(ind) = 0;
您问题中显示的代码的问题是 ii
和 jj
被用作 "subscript indices"。这 selects 所有对 由 ii
中的任何值和 jj
中的任何值组成,这不是您想要的。
如果您的问题中有下标 ii
和 jj
,您只需要 select 每个下标的对应值 (而不是所有对),您可以使用 sub2ind
来 转换为线性索引 :
[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;
它不起作用,因为 MATLAB 将下标视为网格,这意味着大致 "set all intersection of any of ii
and any of jj
to zero" 而不是 "set the locations specified by these separate pairs of coordinates to zero".
在某些情况下(但不是这个)您可能需要将一组下标转换为索引,在这种情况下我建议您熟悉 sub2ind
。
如其他答案中所述,针对您的情况最好的做法是:
image(BlackOnWhite < 255) = 0;