Mau*_*ini 3 matlab average image-processing video-processing
我正在尝试制作 5 秒视频的慢动作。为了保持相同的帧速率,我需要更多的帧。我从视频中提取了所有帧,并通过创建新帧将它们的数量加倍。每个帧都与其后继帧相结合,创建一个平均帧以插入它们之间。
average = (predecessor + successor)/2
Run Code Online (Sandbox Code Playgroud)
结果在空间上是正确的,但在颜色方面却不正确。平均图像比原始图像明显暗。我正在尝试放慢费德勒打网球的视频速度。平均图像在原始图像与其后继图像之间找到了中间地带。这种效果可以在球员和球明显移动的帧之间看到。下图显示了我试图消除的颜色差异(左:平均,右:原始)
为什么会出现这种情况?有没有更好的方法来实现我想要做的事情?
处理整数数组时,MATLAB 使用饱和算术。这意味着uint8(200) + uint8(200) == uint8(255)
。
假设您的图像是 uint8,将两个白色像素相加会导致饱和度,即最大亮白色,然后将其除以二以获得中灰色。
\n为了避免将图像转换为浮点类型,MATLAB 默认为double
:
average = uint8((double(predecessor) + double(successor))/2);\n
Run Code Online (Sandbox Code Playgroud)\nsingle
但如果您\xe2\x80\x99担心内存使用情况,也可以使用,正如 Ander 在评论中建议的那样。。