Matlab-将圆添加到电影的每一帧

Matlab-将圆添加到电影的每一帧,matlab,geometry,imread,Matlab,Geometry,Imread,我想在电影中围绕移动的粒子添加一个圆。我给出了每帧粒子的坐标(变量Traj)。但是,下面的代码仅为每一帧在我的粒子顶部绘制一个实心矩形。有什么建议吗 function movie = AurelieCreateMovie3(Filename, Traj) L = 369; color = [1:3]; R = 7; info = imfinfo(Filename); W = info.Width; H = info.Height; mov

我想在电影中围绕移动的粒子添加一个圆。我给出了每帧粒子的坐标(变量
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

当使用
矩阵(行、列)=value分配值时,MATLAB分配
中元素的每个排列,而不仅仅是分配这两个元素的成对组合。相反,您需要使用
sub2ind

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

如果我将您的代码添加为“movie(round(y_圈)、round(x_圈)、color,k)=255”,则会出现错误:使用sub2ind的错误超出范围subscript@user6275697很抱歉,我错过了你索引到4D矩阵的地方。我已经更新了它,可以在那种情况下使用。