2017-01-11 5 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 할당한다. 대신 나는 당신의 코드 istead 추가하는 경우 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

를 사용하여 선형 인덱스로 변환 할 수 있습니다 "영화 (라운드 (y_circle), 원형 (x_circle), 색상, K) = 255;" 그것은 내게 오류가 발생합니다 : sub2ind를 사용하여 오류가 발생했습니다. 범위 밖의 첨자 – user6275697

+0

@ user6275697 죄송합니다. 4D 행렬에 색인을 생성하는 위치를 놓쳤습니다. 이 경우 작동하도록 업데이트했습니다. – Suever

+0

죄송 합니다만 이전과 동일한 오류가 발생합니다. – user6275697