2017-01-11 9 views
0

Я хочу добавить круг вокруг частицы, движущейся в фильме. Я даю в координатах частицы для каждого кадра (переменная Traj). Однако следующий код рисует сплошной прямоугольник поверх моей частицы для каждого кадра. Какие-либо предложения?Matlab - добавление круга к каждому кадру фильма

function movie = AurelieCreateMovie3(Filename, Traj) 
    L = 369; 
    color = [1:3]; 
    R = 7; 
    info = imfinfo(Filename); 
    W = info.Width; 
    H = info.Height; 

    movie = uint8(zeros(H,W,3,L)); 

    frame = Traj(:,1); 
    x = round(Traj(:,2)); 
    y = round(Traj(:,3)); 
    L = length(x); %length of this track 
    dt = 0:0.01:2*pi; 

    for k = 1:L 
     movie(:,:,:,k) = imread(Filename,frame(k));  
     x_circle = R.* cos(dt) + x(k); 
     y_circle = R.* sin(dt) + y(k); 
     movie(round(y_circle), round(x_circle), color, k) = 255; 
    end 

    mov = immovie(movie); 
    movie2avi(mov, 'moviefinal', 'compression', 'None', 'fps', 23); 
    implay(mov); 
end 

ответ

0

При присвоении значений с matrix(rows, columns) = value, MATLAB назначает каждую перестановку элементов в rows и columns, а не просто назначая парную комбинацию из двух. Вместо этого вы хотите, чтобы преобразовать в линейный индекс, используя sub2ind

M = reshape(movie(:,:,:,k), [], size(movie, 3)); 
inds = sub2ind(size(M(:,:)), round(y_circle), round(x_circle)); 
M(inds,:) = 255; 
movie(:,:,:,k) = M; 
+0

Если я добавить свой код istead из «фильма (круглый (y_circle), круглые (x_circle), цвет, к) = 255;» это дает мне ошибку: Ошибка при использовании sub2ind. Недопустимый индекс – user6275697

+0

@ user6275697 Извините, я пропустил, где вы индексировались в 4D-матрицу. Я обновил его для работы в этом случае. – Suever

+0

Извините, но я все равно получаю ту же ошибку, что и раньше – user6275697