Я экспериментирую с исправлением краевых артефактов в частично законченных RGB-изображениях, таких как half5 , правая половина мозаичного изображения p31m, с помощью различных методов, таких как рисование с помощью inpaint_nans . Поскольку положение краев известно аналитически, я сначала рисую серую маску того же размера с помощью insertShape outmask_h . Теперь я хочу заставить те пиксели от половины5 до NaN, которые соответствуют ненулевым пикселям outmask_h, получить NaN, необходимые для inpaint_nans, поэтому я попробовал
[r,c] = find(outmask_h);
for i = 1:length(r); half5(r(i),c(i)) = NaN; end
Сначала я подумал, что это нормально, потому что запись результата показывает черные пиксели, где маска отлична от нуля, но результат после inpaint_nans выглядит так же, как и раньше, и подсчет NaN в одном из каналов дает 0, так что это неправильно (почему ?).
Кажется, что работает противоположная стратегия (создание массива NaN и замена нулевых пикселей), НО это слишком медленно
half5n = NaN(size(half5,1), size(half5,2), 3);
[r,c] = find(outmask_h==0);
for i = 1:length(r); half5n(r(i),c(i)) = half5(r(i),c(i)); end