Простой способ сделать это - использовать линейное индексирование .Это означает использование единственного индекса, который пересекает все записи в матрице (вниз, затем поперек).В вашем случае:
- Используйте
find
с одним выходом.Это дает линейные индексы желаемых пикселей. - Используйте это для индексации в матрице.
Итак:
ind = find(BlackOnWhite < 255);
image(ind) = 0;
Вы даже можете удалить find
и используйте логическое индексирование .Это означает, что результат логического сравнения напрямую используется в качестве индекса:
ind = BlackOnWhite < 255;
image(ind) = 0;
Проблема с кодом, показанным в вашем вопросе, заключается в том, что ii
и jj
используются как " индексы индекса " .Это выбирает все пары , образованные любым значением из ii
и любым значением из jj
, что не является тем, что вы хотите.
Если у вас есть индексы ii
и jj
Как и в вашем вопросе, и вам нужно только выбрать соответствующие значения из каждого индекса (вместо всех пар), вы можете использовать sub2ind
в для преобразования в линейный индекс :
[ii, jj] = find(BlackOnWhite < 255);
image(sub2ind(size(image), ii, jj)) = 0;