• 大小: 2.24MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-08
  • 语言: 其他
  • 标签: 视频  去抖  算法  

资源简介

手持式摄像机在使用时常常会受到使用者有意无意抖动的影响,从而影响成像效果,造成录制视频的不稳定及跳动问题,尤其是在使用者在一场景中特写或者跟踪某一具体目标时,使用者通常不能准确定位到或者估计出运动目标的位置,从而造成目标在视频中位置的不稳定,造成视频的主观效果变得不理想。 为了解决这一问题,我们需要设计一种算法来识别这种无意义的运动并设法通过补偿的方式来使得场景中的目标物体保持位置稳定的状态。 手持式摄像机捕获的视频通常都会受到抖动的影响,这严重的影响视频的主观效果。 这里提出的算法可以可靠的用于数字视频的去抖动。这个算法通过识别这些意外的抖动并且利用运动补偿的方法来获得一个较好的视频输出。 这个系统可以分为三个模块:(1)运动估计模块;(2)抖动识别模块;(3)运动补偿模块。

资源截图

代码片段和文件信息

function [mvf] = EMBA(R accuracySfNf)

% anchor frame : an_f;   target frame : ta_f;
% predict frame : prd_f;
% motion vector MV mvx mvy;
% image size MxM; block size NxN; search range R;
% accuracy: integer pel:1 ; half pel:2
% estimate the motion vector by using integer pel EBMA 
%% Get YUV(352 288 4:2:0) frame 0 1 Y component 
 N = 16;%16x16窗口大小
 mov=aviread(‘counter_gravity‘Sf:1:Sf+Nf);%用于shaky proof
 len=size(mov(1).cdata1);
 w=size(mov(1).cdata2);
 mvxf=zeros(len/Nw/NNf-1);
 mvyf=zeros(len/Nw/NNf-1);
 for index=1:Nf-1
     ta_f=mov(index).cdata;
     ta_f=ta_f(::1);
     an_f=mov(index+1).cdata;
     an_f=an_f(::1);
%%
% setting parameters
N = 16;
[len w] = size(an_f);
if (nargin < 1) R = N-1; end;
if (nargin < 2) accuracy = 1; end;
if (R > N-1) R = N-1; end;
start_range = [];
end_range = [];

% time estimation
% the extend target image for motion estimation
% prd_f = zeros(len w);
mvx = []; mvy = [];
if (accuracy > 1) ta_f = imresize(ta_f accuracy ‘bilinear‘); end;
% figure; imagesc(ta_f);
% title(‘target image‘);
% start to estimate motion vetors
for i=1:N:len-N+1
    for j=1:N:w-N+1
        MAD_min = 255*N*N;
        for k=-R*accuracy:R*accuracy
            start_range(1) = (i-1)*accuracy+1+k;
            end_range(1) = (i-1)*accuracy+k+N*accuracy; % it should be (i-1)*accuracy+1+k+N*accuracy-1;
            if (start_range(1) < 1) start_range(1) = 1; end_range(1) = N*accuracy; end;
            if (end_range(1) > len*accuracy) end_range(1) = len*accuracy; start_range(1) = len*accuracy-N*accuracy+1; end;
            for p=-R*accuracy:R*accuracy
                start_range(2) = (j-1)*accuracy+1+p;
                end_range(2) = (j-1)*accuracy+p+N*accuracy; % it should be (j-1)*accuracy+1+p+N*accuracy-1; 
                if (start_range(2) < 1) start_range(2) = 1; end_range(2) = N*accuracy; end;
                if (end_range(2) > w*accuracy) end_range(2) = w*accuracy; start_range(2) = w*accuracy-N*accuracy+1; end;
                MAD = sum(sum(abs(an_f(i:i+N-1 j:j+N-1)-...
                    ta_f(start_range(1):accuracy:end_range(1) start_range(2):accuracy:end_range(2)))));
                if(MAD < MAD_min)
                    MAD_min = MAD; dy = start_range(1); dx = start_range(2);
                end 
            end
        end
        prd_f(i:i+N-1 j:j+N-1) = ta_f(dy:accuracy:dy+N*accuracy-1...
            dx:accuracy:dx+N*accuracy-1);
        iblk = floor((i-1)/N)+1; jblk = floor((j-1)/N)+1;
        mvx(iblk jblk) = dx/accuracy-j;
        mvy(iblk jblk) = dy/accuracy-i; 
        mean_an_f=mean(mean(an_f(i:i+N-1 j:j+N-1)));
        MBMAD(iblkjblk)= sum(sum(abs(an_f(i:i+N-1 j:j+N-1)-mean_an_f)))/N^2;
        MVMAD(iblkjblk)=MAD_min;
    end
  end
mvxf(::index)=mvx;
mvyf(::index)=mvy;
madf(::index)=MBMAD;%宏块自身MAD
mvmad(::index)=MVMAD;%计算运动矢量时输出的MAD
end
mvf=struct(‘mvx‘mvxf‘mvy‘mvyf‘mad‘madf‘mvmad‘mvmad);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     160256  2010-05-27 21:47  SHAKE_PROOF\132orig.avi

     文件     183808  2010-05-27 21:47  SHAKE_PROOF\132proof.avi

     文件     182272  2010-05-27 21:41  SHAKE_PROOF\65orig.avi

     文件     185856  2010-05-27 21:41  SHAKE_PROOF\65proof.avi

     文件    1500872  2010-05-25 21:55  SHAKE_PROOF\counter_gravity.avi

     文件       3001  2010-06-06 16:01  SHAKE_PROOF\EMBA.m

     文件       1036  2010-06-06 16:02  SHAKE_PROOF\hist2d.m

     文件      50003  2010-05-27 20:51  SHAKE_PROOF\mvf132+46fr7.mat

     文件      67142  2010-05-27 21:46  SHAKE_PROOF\mvf132+46fr7mad.mat

     文件      49647  2010-05-27 21:08  SHAKE_PROOF\mvf65+46fr7.mat

     文件      68260  2010-05-27 21:26  SHAKE_PROOF\mvf65+46fr7mad.mat

     文件       1936  2010-06-06 16:00  SHAKE_PROOF\shakeproof.m

     文件       1130  2010-05-27 20:49  SHAKE_PROOF\splitmv.m

     文件        166  2010-06-06 16:05  SHAKE_PROOF\introduction.txt

     目录          0  2010-05-30 22:31  SHAKE_PROOF

----------- ---------  ---------- -----  ----

              2455385                    15


评论

共有 条评论