Проблема в том, что [i,j,v] = find(x)
ведет себя не так, как вы ожидаете, посмотрите документацию .Эта команда находит только 2d-индексы i,j
ненулевых записей и значения v
этих записей.Это то же самое, что если бы вы написали [i,j] = find(x(:,:)); v = x(i,j);
.
. Чтобы это исправить, мы сначала определяем не черные записи по or
-каналу по всем каналам, а затем конвертируем наши sub
-индикаторы.для линейных индексов, используя sub2ind
, и используйте их для перезаписи соответствующих пикселей.
photo1 = [];
photo1(:,:,1) = [1,1,1;0,0,0;1,1,1];
photo1(:,:,2) = [1,1,1;0,0,0;1,1,1];
photo1(:,:,3) = [1,1,1;0,0,0;1,1,1];
photo2 = [];
photo2(:,:,1) = [2,0,2;2,0,2;2,0,2];
photo2(:,:,2) = [2,0,2;2,0,2;2,0,2];
photo2(:,:,3) = [2,0,2;2,0,2;2,0,2];
[row,column] = find(photo2(:,:,1)|photo2(:,:,2)|photo2(:,:,3));
ind1 = sub2ind(size(photo1), [row;row;row], [column;column;column],[row*0+1;row*0+2;row*0+3]);
ind2 = sub2ind(size(photo2), [row;row;row], [column;column;column],[row*0+1;row*0+2;row*0+3]);
photo1(ind2) = photo2(ind1);
disp(photo1);
Попробуйте онлайн!