Я наткнулся на этот вопрос, когда искал похожую проблему в 3D. У меня были индексы строк и столбцов, и я хотел изменить все значения, соответствующие этим индексам, но на каждой странице (так во всем 3-м измерении). По сути, я хотел выполнить mtx(row(i),col(i),:) = 0;
, но без циклического перебора векторов строки и столбца.
Я думал, что поделюсь своим решением здесь, вместо того, чтобы задавать новый вопрос, поскольку он тесно связан.
Еще одним отличием было то, что линейные индексы были доступны мне с самого начала, потому что я определял их, используя find
. Я включу эту часть для ясности.
mtx = rand(100,100,3); % you guessed it, image data
mtx2d = sum(mtx,3); % this is similar to brightness
ind = find( mtx2d < 1.5 ); % filter out all pixels below some threshold
% now comes the interesting part, the index magic
allind = sub2ind([numel(mtx2d),3],repmat(ind,1,3),repmat(1:3,numel(ind),1));
mtx(allind) = 0;