0

ムービー内で動くパーティクルの周りに円を追加したいと考えています。フレームごとにパーティクルの座標を指定します (変数Traj)。ただし、次のコードは、フレームごとにパーティクルの上に塗りつぶされた長方形のみを描画します。助言がありますか?

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
4

1 に答える 1

0

で値を代入する場合matrix(rows, columns) = value、MATLABは と の要素のすべての順列を代入します。単に 2 つのペアごとの組み合わせを代入するのではありませんrowscolumns代わりに、次を使用して線形インデックスに変換する必要がありますsub2ind

M = reshape(movie(:,:,:,k), [], size(movie, 3));
inds = sub2ind(size(M(:,:)), round(y_circle), round(x_circle));
M(inds,:) = 255;
movie(:,:,:,k) = M;
于 2017-01-11T23:16:51.580 に答える