塊匹配演算法 全搜尋

2021-06-27 15:04:54 字數 2921 閱讀 1988

原理:

假設有兩幀,第k幀(當前幀)與第k-1幀(上一幀),第k幀以m*n的影象塊為單位,分成乙個個塊,塊間不重疊。對於第x個影象塊a,在第k-1幀中,尋找與它最匹配的影象塊a',我們認為a影象塊是由a'影象塊平移而得到的。於是就把影象塊a'到a的運動向量mv記作影象塊a的運動向量。

全搜尋演算法:

假設影象塊在x方向與y方向的可以最大位移為xmax與ymax,那麼在以影象塊a為中心的(m+2*xmax,n+2*ymax)的範圍內,對每乙個可能的影象塊都進行匹配計,尋找乙個最優的匹配塊。全搜尋演算法最簡單,但是演算法耗時比較多,計算量大。

匹配準則:

1 互相關函式

2 均方誤差函式

3 絕對平均誤差函式

這是常用的三個匹配準則,一般情況下,用第三個準則,比較簡單。

**:

本程式中,兩幀進行了塊匹配操作,第二幀是288*352的,分成8*8的小塊,其中的每個塊都是在前一幀中匹配而來的。

%本程式用於試驗塊匹配法

path='e:\test-pic\foreman.yuv';

yuvx=288;

yuvy=352;

start=1;

count=100;

pics=loadyuv(path,yuvx,yuvy,start,count);%得到rgb序列

picsgray=zeros(size(pics,1),size(pics,2),size(pics,4));

for i=1:count

picsgray(:,:,i)=rgb2gray(pics(:,:,:,i));%得到灰度序列

% imshow(picsgray(:,:,i));

% pause(0.1);

endpic1=picsgray(:,:,1);%前一幀的

pic2=picsgray(:,:,2);%當前幀的

pic3=zeros(size(pic1));%**幀

%imshow(pic1-pic2);

pich=size(pic1,1);

picl=size(pic1,2);

blockx=8;

blocky=8;%設定塊的大小

blockh=pich/blockx;

blockl=picl/blocky;

blocka=zeros(blockx,blocky);%當前幀的某塊

blockb=zeros(blockx,blocky);%在上一幀中匹配的塊

vx=30;

vy=30;%一塊運動的最大速度

min=1000000;%存放絕對誤差的最小值

for i=1:blockh

for j=1:blockl

blocka=pic2( (i-1)*8+1:i*8,(j-1)*8+1:j*8 );%當前幀中的塊

%在pic1中匹配

for ii=(i-1)*8+1-vy:i*8+vy-blockx+1

for jj=(j-1)*8+1-vx:j*8+vx-blockx+1

if (ii>=1) && (ii<=(pich-7)) && (jj>=1) && (jj<=picl-7)

blockb=pic1(ii:ii+7,jj:jj+7);

temp=sum(sum(abs(blocka-blockb)));

if min>temp

min=temp;

blockc=blockb;

%px=ii;py=jj;

endend

endend

pic3( (i-1)*8+1:i*8,(j-1)*8+1:j*8 )=blockc;

min=1000000;

endendpic1=uint8(pic1);%前一幀

pic2=uint8(pic2);%當前幀實際影象

pic3=uint8(pic3);%當前幀估計影象

figure(1);

imshow(pic1);

title('前一幀');

figure(2);

imshow(pic2);

title('當前幀');

figure(3);

imshow(pic3);

title('當前幀**影象');

figure(4);

imshow(abs(pic2-pic1));

title('當前幀與前一幀差');

figure(5);

imshow(abs(pic2-pic3));

title('當前幀與**幀差');

程式執行的效果如下:

可以看出,**後的跟當前幀更加的接近啦。但是有乙個問題,就是塊匹配法**的,容易產生方塊現象,從**中就可以看出來。

塊匹配演算法 全搜尋

原理 假設有兩幀,第k幀 當前幀 與第k 1幀 上一幀 第k幀以m n的影象塊為單位,分成乙個個塊,塊間不重疊。對於第x個影象塊a,在第k 1幀中,尋找與它最匹配的影象塊a 我們認為a影象塊是由a 影象塊平移而得到的。於是就把影象塊a 到a的運動向量mv記作影象塊a的運動向量。全搜尋演算法 假設影象...

ruby操作excel 全匹配搜尋

需要將xlconst包含且load進來,再對相應的鍵值如 lookat 賦值,詳見如下 require win32ole def class xlconst enddef main excel visible false excel displayalerts false win32ole.cons...

乙個全字匹配的另類演算法

如果要從乙個字串中匹配某個指定字串 即查詢指定字串是否在某個字串中 那麼除了按字元逐個搜尋外,還有乙個另類通俗的演算法。下面請跟我來。如下 僅給出delphi的實現 functionsearchstr bestr,substr string integer var oldlength integer...