我正在尝试实施一份研究论文,以验证我的结果。我已经分享了代码(由我编写)和研究论文中给出的过程描述。不幸的是,我的结果与他的结果有点不同,这意味着我做错了什么。请指引我朝正确的方向前进。
代码
fileName = 'mobile_cif.yuv';
width=352;
height=288;
numFrames=30;
SAD=0;
%for loop to traverse & process from frame '1' to 'last' frames
for t = 1 : numFrames
if t < numFrames %(Need to traverse to n-1 frames)
result=loadFileYuv(fileName,width,height,t);
currFrame = result.cdata; %reading Current frame
result=loadFileYuv(fileName,width,height,t+1);
nextFrame = result.cdata; %reading Next frame
% First, take the absolute value of the difference at each pixel
myAbsDiff = abs(double(currFrame) - double(nextFrame));
% Then, sum over all pixels
out = sum(myAbsDiff(:));
out=out/(width*height); %(Taking Average with respect to pixel)
out=out/64;%(Dividing By Block size to normalize)
disp(out);
SAD=SAD+out;
else
continue;
end
end
disp(SAD/numFrames); %(Taking Average with respect to Frames)
流程说明
绝对差值和(SAD)是用于块比较和移动矢量计算的简单视频质量度量。每帧被分成小块(即8×8像素),并且对于一帧中的每个块,找到下一帧中最相似(最小SAD)块。这个最小绝对差值之和被指定为每帧中每个块的SAD(直到n-1帧)。然后对每个帧和剪辑中的所有帧平均所有SAD值,并除以块区域,以进行标准化。