我从图像中检索了所有非白色像素:
[ii, jj] = find(BlackOnWhite < 255)
然后我尝试将这些像素坐标索引到矩阵中:
image(ii, jj) = 0
但是零不会出现在预期的位置。
如何仅在ii
和jj
对的指定位置(即[ii(1), jj(1)], [ii(2), jj(2)]
等)放置零?
答案 0 :(得分:6)
一个简单的方法是使用linear indexing。这意味着使用一个遍历矩阵中所有条目的索引(从下到上)。就您而言:
find
。这样就给出了所需像素的线性索引。所以:
ind = find(BlackOnWhite < 255);
image(ind) = 0;
您甚至可以删除find
并使用logical indexing。这意味着逻辑比较的结果将直接用作索引:
ind = BlackOnWhite < 255;
image(ind) = 0;
问题中显示的代码存在问题,ii
和jj
被用作"subscript indices"。这会选择由ii
中的任何值和jj
中的任何值组成的所有对,这不是您想要的。
如果您的问题中有下标ii
和jj
,并且您只需要从每个下标中选择相应的值(而不是所有对),则可以使用sub2ind
以转换为线性索引:
[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;
答案 1 :(得分:3)
这不起作用,因为MATLAB将下标视为网格,这意味着大致“将ii
和jj
中的任何一个的所有交集都设置为零” 而不是“将这些单独的坐标对指定的位置设置为零”。
在某些情况下(但不是这种情况),您可能需要将一组下标转换为索引,在这种情况下,我建议您熟悉sub2ind
。
正如其他答案中所述,针对您的情况,最好的事情就是:
image(BlackOnWhite < 255) = 0;