File Exchange

## Fast Motion Detection(bugs fixed)

version 1.0 (169 KB) by

this script used a new fast block matching algorithm with dynamic search patterns to obtain motion v

4.33333
3 Ratings

Updated

this script used a new fast block matching algorithm with dynamic search patterns to obtain motion vectors for each blocks.
[rep_motion motion_vector] = fastMV(im1, im2, w)
1. check with big diamond.
2. check with one of the hexagon subject to previous results.
3. check with small diamond.
'im1' is base frame of a video and 'im2' is the second frame. and 'w' is
the window size. 'rep_motion' is the representative motion vector and
'motion_vector' declare motion vectors for each block of image.
Example:
w = 16;
[rep_m m_vector] = fastMV(im1, im2, w);
files: fastMV.m, frame01.pgm, frame02.pgm

Preetam Reddy

### Preetam Reddy (view profile)

and can i know how the above code works ??

Abel roc

### Abel roc (view profile)

Analaozing this file, I found that the calculations of the differences between the reference Macro Block and his neihgborhoods, sometimes the difference between pixels are zero but the pixels are not the same. I explain it better in an example.

on line 77

diff.diam1{1, k} = abs(slice1{i, j}- im2(s_h_r + pat.diam1(1, k):...
i *w + pat.diam1(1, k),...
s_h_c + pat.diam1(2, k):...
j * w + pat.diam1(2, k)));

if for exemple slice{1,j} = [255 128]
and im2 of the seleced pixels is im2(...)=[255 255]
Then the difference in the fastMV.m file is
diff.diam1{1,k} = [0 0]
and if I'm not wrong this would be
diff.diam1{1,k} = [0 127]

I think that this happens because uint8 doesn't admit negative numbers and the difference (before the abs function) is negative and it aproximates it to 0.

I don't know if it is known and is correct for the algoritm or there is a mistake.

Thanks.

w w

### w w (view profile)

##### MATLAB Release
MATLAB 7.4 (R2007a)