将时间中值滤波器应用于视频

Applying temporal median filter to a video

我想将时间中值滤波器应用于深度图视频以确保时间一致性并防止闪烁效果。 因此,我试图通过以下方式一次对所有视频帧应用过滤器:

首先加载所有帧,

%%% Read video sequence
numfrm = 5;
infile_name = 'depth_map_1920x1088_80fps.yuv';
width = 1920; %xdim
height = 1088; %ydim

fid_in = fopen(infile_name, 'rb');
[Yd, Ud, Vd] = yuv_import(infile_name,[width, height],numfrm);
fclose(fid_in);

然后创建一个 3-D 深度矩阵(高 x 宽 x 帧数),

%%% Build a stack of images from the video sequence
stack = zeros(height, width, numfrm);
for i=1:numfrm
  RGB = yuv2rgb(Yd{i}, Ud{i}, Vd{i});
  RGB = RGB(:, :, 1);
  stack(:,:,i) = RGB;
end

最后沿第三方向(时间)应用一维中值滤波器

temp = medfilt1(stack);

但是,由于某种原因,这不起作用。当我尝试查看每一帧时,我得到的是白色图像。

 frame1 = temp(:,:,1);
 imshow(frame1);

如有任何帮助,我们将不胜感激!

我的猜测是这确实有效,但 frame1 属于 class double 并且包含值,例如 介于 0 和 255 之间. 由于 imshow 默认在 [0,1] 尺度上表示双重图像,因此您将获得白色饱和图像。

因此我建议:

caxis auto

imshow 之后修复显示问题。

最佳,