将时间中值滤波器应用于视频
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
之后修复显示问题。
最佳,
我想将时间中值滤波器应用于深度图视频以确保时间一致性并防止闪烁效果。 因此,我试图通过以下方式一次对所有视频帧应用过滤器:
首先加载所有帧,
%%% 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
之后修复显示问题。
最佳,