File Exchange

image thumbnail

Block Matching Algorithms for Motion Estimation

version (119 KB) by Aroh Barjatya
Review of various block matching algorithms used for motion estimation in MPEG coding.


Updated 16 Dec 2011

View License

This paper (and accompanying MATLAB source code) is a review of the block matching algorithms used for motion estimation in video compression. It implements and compares 7 different types of block matching algorithms that range from the very basic Exhaustive Search to the recent fast adaptive algorithms like Adaptive Rood Pattern Search. The algorithms that are evaluated in this paper are widely accepted by the video compressing community and have been used in implementing various standards, ranging from MPEG1 / H.261 to MPEG4 / H.263. The paper also presents a very brief introduction to the entire flow of video compression.

Please read the README.txt first.

Cite As

Aroh Barjatya (2020). Block Matching Algorithms for Motion Estimation (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (136)

You should compute SAD instead of MAD for computation improvement (and it follow paper).

% Computes the Sum Absolute Difference (SAD) for the given two blocks
function cost = costFuncMAD(currentBlk,refBlk, n)
err = 0;
for i = 1:n
for j = 1:n
err = err + abs((currentBlk(i,j) - refBlk(i,j)));
cost = err ; %/ (n*n);

This function is called ore than 10 times every loops : 10 * O(n²) .

On the other hand you should add Zero Motion Prejudgement condition for improvement too in the ARPS:
if(costs[2] < ZMP_thresholt)
vectors(1,mbCount) =0;
vectors(1,mbCount) =0;
mbCount = mbCount + 1;

How to get test images. this link is not avaliable. Plz help me

how to implement it for 500 frames

chao liang

These code help me so much! thank you~

I got this error
Error in ==> motionComp at 35
imageComp(i:i+mbSize-1,j:j+mbSize-1) =
imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1);

Error in ==> motionEstAnalysis at 47
imgComp = motionComp(imgI, motionVect, mbSize);
can anyone here help me

i didn't understand the purpose of the codes, will the results be saved in file as an output?


too slow!



very good code


It will be really helpful if you could tell me the coordinates of the macroblocks that are used in the searching algorithm. When i use the ARPS method on a 6x6 array and mbsize =4 and p=1 I get 2x2 motion vector. It means that the program does the ARPS on two macroblocks right? So I guess it is taking the top left pixel of both the macroblocks. correct me if Iam wrong. Thank you.

i need to find sum of absolute difference between two frames using full search algorithm
.can anyone help me out?

i used this code with my image . i got an error message as "Subscript indices must either be real positive integers or logicals."in the file "motionComp" any help please

hi, can any one help me to get matlab coding for adaptive rood pattern search to get reconstruced image

uma mahessh

Hi,Can anyone please help me in resolving this problem.I stucked up here.

??? Error using ==> imread at 372
File "./caltrain/gray/caltrain000.ras" does not exist.

Error in ==> motionEstAnalysis at 40
imgI = double(imread(imgIFile));

thank you.

Thank you


This page is very helpful.
Thank you sir~!


the codes are very helpful!

find the motion vector display with image ...

Thank you sir!!!
these codes are really very helpful.

Monika Dash

I substitute my images for ImgI and ImgP and I get these errors.

Error using zeros
Size inputs must be integers.

Error in motionEstES (line 19)
vectors = zeros(2,row*col/mbSize^2);

Error in motionEstAnalysis (line 46)
[motionVect, computations] = motionEstES(imgP,imgI,mbSize,p);

vijay i

plz can any one help me how to apply these algorithms with fpga

can anyone help for hexagon based search pattern


sir, I'm new in MATLAB programming . Can you please help me in running these files .



sir, i used this code with my video. i got an error message as
undefined function 'costFuncMAD' for input arguments of type 'uint8'.
can you help me to rectify this error?



Thank you


Anybody knows if i can use it with H.264??


It was a huge help in my project. Thanks a lot Aroh!

noor engg

thank you sir..very nice work but can you help me to get decoder function for motion Est ARPS(adaptive rood pattern search).pleas help me


chandu dusa

thank you sir


Thank you!


Nice work!

Vijay Ukani

Can somebody please help in getting caltrain test sequence or similar sequence and guide me on how to create one from a video


Not bad!


It's I want it!



Tuan Nguyen

Oh sorry I was wrong.

Tuan Nguyen

I think your motionEstES function doesn't work. I ran that function with my 2 input images and the function returns a motion vector having the same values for all of the vector's element :(


Can someone help me with hexagon based and cross diamond algorithm

venn lee

Thank you for your posting and sharing!

sun cool

This code is so useful...^^

greta dabre

I have been trying to run this to add the sequences to matlab and run ..please help



can anyone know how to modify this program so that it can show the final position where the motion has been estimated ?

Where to get caltrain sequence. Please help me. i need it urgently


I also get "Index exceeds matrix dimensions"!

it is good work but the results of psnr is so bad it is for bus 17 , any body could let me know why si the proplem from my video or in the code?


I would really like to run the code on my own video, especially using exhaustive search and the ARPS.

Can someone explain to me how to do this?


Perfect summary of simple block matching algorithms. Thanks for all the work you put in there. It is really appreciated!


I am looking for video stabilization.
This code is helpful!Thansk.

ram m

Hi experts

I am new to image processing
I want to know how can I load a YUV sequence into this algorithm, I was like confused about that part,
and imgInumber and imgPnumber represent

Thank you

Marc Quinn

Hi I am having difficulty understanding exactly what the motionEstES.m file does?

Could anyone explain this to me or even point me in the direction where I could find a detailed explanation of this?


Nice and clear code, but as has been mentioned, can be optimised. Also, just as a note, it is not such a good idea to name your variables things such as "min" (as in minCost).

In minCost, you can replace your loop by :

minRowCosts = min(costs);
[minOut,dx] = min(minRowCosts);
[~,dy] = min(costs(:,dx));

Mario m.

You can find yuv test sequnces on this link:

Then convert it to avi with original data (size and pic/sec).Just download the program on this link or any other program than can convert it.
Then use program 'video to picture'(can download original on any warez) to create bmp picture.

Very usefull code,but need a change for PSNR.

err = err + (double(imgP(i,j)) - double(imgComp(i,j)))^2;

zhang hanze

very good for me,a student


to view the above sequences, one can use
pictview software:
or matlab function image()


caltrain sequence can be downloaded in this link.

But I am not sure whethe the resolution and frame size is written for this one or not.



How to get test images. link is not avaliable. Plz help me. It is very urgent

Nikolay S.

Excellent report, clear and commented code. Bottom up, right on my friend!
is no more accesible..can someone help?

plz help me

for the above code i get a message "Index exceeds matrix dimensions" .can some body help me.


Good work... Is of great help :) Thanks a lot :)


it shows the computation results in workspace. where will be output stored. how can i retrieve it? please help me.

Do Lo

Do Lo
this link doesn't work
please can any one send ?


Please explain for me this problem: i run costFuncMAD.m . But Matlab notifies this :
??? Input argument "currentBlk" is undefined.

Error in ==> costFuncMAD at 19
err = err + abs((currentBlk(i,j) - refBlk(i,j)));
Please show me to repair it. Thanks a lot!!!

pupu QQ

very good work for starters
this link doesnt work
please can any one send ?


plzzz make available it can not be acceseed can we perform them on other images too?


can anyone help me to

(1) plot of the average number of
searches required per macro block
(2) plot PSNR comparison


plzzz make available it can not be acceseed can we perform them on other images too?


the test images at can not be accessed anymore :(


can any one help me to run this file

The program my give incorrect results. For example in TSS method motionEstTSS.m. The following function call will give wrong results:
costs(2,2) = costFuncMAD(imgP(i:i+mbSize-1,j:j+mbSize-1), ...
Because for video data pixel values are of type integer (0-255) i.e. imgP and imgI of type uint8. Therefore, first use casting to double then call this method.

e.g. a correct and more readable code would be

refBlk=imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1);
thisCost=costFuncMAD(double(currentBlk),double(refBlk), mbSize);
costs(costRow, costCol ) = thisCost;

Dhruv Dave

this is really good work...
but i am not getting motion vector....
how to get motion vector in that program and display the image with motion vector...

PLZ help me

i need source code based on successive elimation algorithm of video compression send it to my id plz

sir... could i given example programme for recontruction huffman RVLC for mpeg-4, could you help me sir??? i stack sir.
thankyou very much. this my email

a k

sir. i saw your code. Please tell what should be the value of "n" in the code. can we have any value?

Ramakrishna Reddy

morane bob

raghava k

sir..i have seen ur that i did not understand 'caltrain'...wat is caltrain..? and can u provide me with the source code to implement winner update strategy? atleast guidance please.

suresh kumar

its very good.....and i tried for my sequence but its not working and can you give some tips please sir

kimstik kimstik

costFuncMAD speedup:
err = sum(sum(abs(currentBlk - refBlk)));

is equvivalent:

err = 0;
for i = 1:n
for j = 1:n
err = err + abs((currentBlk(i,j) - refBlk(i,j)));

sankari sivalanka

its very good . sir i request u to plz give code for video compression which is very help ful for my project

Guo Antai

It's good, and gives me some idea for my project.

newton bitar

Very Good

najib ben aoun

zeb khan

I am looking for mpeg4 matlab code.Will you please send it to me????

kiran varavdekar

this is great yaar
i read your codes
can you help me to run this code?

pandu ranga reddy

very good


ahmad zaini

Amit Gangwar

i read ur code.
i can understand programs seperately,
but how can i connect all program,
i can not plz help me

Ismail Kujma

nanda nanda

bro, i have final project now, can I ask some questions to u?

ali ali jan

very nice collection of information

swapnil deshpande


swapnil deshpande


karuna sangidwar

good algo

ruchika lalit

i am unable to get the pixel value of whole the image my code is retriving only the pixel value of first pixel and i cannot make the macroblocks of the image because without that i wont be able to apply these codes. plz help

puja hait

i am unable to figure out why mincost has been assigned the particular value=65537.plz tell ma what is the reason behind this?

midhun jasti

I have been trying to run this code...but donno how to add the sequences to matlab and run ..please help

ruchika lalit

thanks.....gr8 work
you have solved my problem

yang ming


midhun jasti

thanks man ..great workk

liu aiping

very good£¡

liu aiping

thank you very much.

Madhav Vaidya

i real thank to the site.

Dima Pröfrock

nice collection

Lionel Broche

Some files are from 1994 and can largely be optimised. Moreover, the code does not work well in the static areas. Needs improvements.

manuele mengozzi


jaafar mansoory

I need it for my final poject

Reshma Shaikh

sir i am Reshma Shaikh ,student of M.Tech(EC),second year , i need your help in the mean time plz help me.

shakiba moaddab

dear sir/madam
it's a m.s. in electrical computer eng. which wants to detect any jam situation in a tunnel traffic by using matlab. i searched matlab image processing tool box to find any useful thing, but i didn't find anything.
would y ou please help me how to do it.
best regards
sh moadab

Guang hyhl

Please avoid for loop in minCost.m and costFuncMAD.m. Very time-consuming.

jian chen

jayesh tembhekar

mohamed ghoniem

very helpfull matlab code

imane ely

can anybody show me how to run the full search algoritm! i'm not used to Matlab. thanks!

yu jian

it is highly helpfull!!!

fadi sbahi


Hassan Moladoust

It is Excellent method

Jason Hay

An excellent piece of work! I used your code for comparison during my development of an alternative ME algorithm, and found it highly helpfull.

sai kishore

M A Khan

Very good work

Suggestion: Following plots would make the program more complete.
(1) plot of the average number of
searches required per macro block
(2) plot PSNR comparison


Updated the README.txt file to reflect the location of test images.

Added a README.txt

MATLAB Release Compatibility
Created with R14
Compatible with any release
Platform Compatibility
Windows macOS Linux