資源簡介
手持式攝像機(jī)在使用時常常會受到使用者有意無意抖動的影響,從而影響成像效果,造成錄制視頻的不穩(wěn)定及跳動問題,尤其是在使用者在一場景中特寫或者跟蹤某一具體目標(biāo)時,使用者通常不能準(zhǔn)確定位到或者估計出運(yùn)動目標(biāo)的位置,從而造成目標(biāo)在視頻中位置的不穩(wěn)定,造成視頻的主觀效果變得不理想。
為了解決這一問題,我們需要設(shè)計一種算法來識別這種無意義的運(yùn)動并設(shè)法通過補(bǔ)償?shù)姆绞絹硎沟脠鼍爸械哪繕?biāo)物體保持位置穩(wěn)定的狀態(tài)。
手持式攝像機(jī)捕獲的視頻通常都會受到抖動的影響,這嚴(yán)重的影響視頻的主觀效果。
這里提出的算法可以可靠的用于數(shù)字視頻的去抖動。這個算法通過識別這些意外的抖動并且利用運(yùn)動補(bǔ)償?shù)姆椒▉慝@得一個較好的視頻輸出。
這個系統(tǒng)可以分為三個模塊:(1)運(yùn)動估計模塊;(2)抖動識別模塊;(3)運(yùn)動補(bǔ)償模塊。

代碼片段和文件信息
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;?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;%計算運(yùn)動矢量時輸出的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
評論
共有 條評論