video_obj = VideoReader('video1.avi');
video_matrix = video_obj.read();
video_matrix = video_matrix(:,:,:,100:200);

[X, Y, Z, t] = size(video_matrix);
gray_video = zeros(X,Y,t);
parfor i = 1:size(video_matrix,4)
    gray_video(:,:,i) = rgb2gray(video_matrix(:,:,:,i));
end

T = 50;
background = zeros(X,Y,t-T);
diff_video = zeros(X,Y,t-T);
diff2_video = zeros(X,Y,t-T);

endT = uint8(size(gray_video,3)-T);
param = strel('disk', 1);
parfor i = 1:endT
    background(:,:,i) = mode(gray_video(:,:,i:i+T),3);
    diff_video(:,:,i) = abs(gray_video(:,:,i) - background(:,:,i));
    diff_frame = diff_video(:,:,i);
    diff_frame(diff_frame > 50) = 255;
    diff_frame(diff_frame <= 50) = 0;
    diff_video(:,:,i) = diff_frame;
    diff2_video(:,:,i) = imdilate(imerode(diff_frame, param), param);
end

output = cat(1,cat(2,gray_video(:,:,1:t-T), background), cat(2,diff_video, diff2_video));

v = VideoWriter('newfile.avi');
open(v)
for i = 1:size(output,3)
    writeVideo(v,output(:,:,i)/255)
end
close(v)
