我想将时间中值滤镜应用于深度贴图视频,以确保时间一致性并防止闪烁效果。 因此,我试图通过以下方式立即对所有视频帧应用滤镜:
首先加载所有帧,
%%% 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);
然后创建一个三维深度矩阵(高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
最后沿第三个方向(时间)应用1-D中值滤波器
temp = medfilt1(stack);
然而,由于某种原因,这是行不通的。当我尝试查看每个帧时,我会看到白色图像。
frame1 = temp(:,:,1);
imshow(frame1);
任何帮助将不胜感激!
答案 0 :(得分:4)
我的猜测是,这实际上有效,但frame1
属于double
类并且包含值,例如介于0到255之间。由于imshow
代表双默认情况下,在[0,1]比例下,您可以获得白色饱和图像。
因此我建议:
caxis auto
在imshow
之后解决显示问题。
最佳,