Simple tests of classic OF methods

BA method, simple synthetic images

For simple synthetic images:

I0 =

         0    0.5000         0
         0    1.0000         0
         0    0.5000         0
    0.1000         0         0
    0.0500         0         0
    0.0500    0.1000         0

I1 =

    0.5000         0         0
    1.0000         0         0
    0.5000         0         0
         0    0.1000         0
         0    0.0500         0
         0    0.0500    0.1000


Running code by D.Sun. Disabled texture decomposition, disabled multiscale processing.
uv = estimate_flow_interface(I0, I1, 'classic-c-brightness', [], {'display', 1, 'pyramid_levels', 1, 'gnc_pyramid_levels', 1});




After first iteration ( loop for ignc = 1:this.gnc_iters  in dsun_ijcv_flow_code\@ba_optical_flow\compute_flow.m):
 After 2nd iteration:
 After 3rd iteration:
 I think, it is right answer.


uv(:,:,1) =

   -0.9995   -0.9995   -0.9996
   -0.9994   -0.9994   -0.9995
   -0.9992   -0.9992   -0.9992
    0.9992    0.9992    0.9992
    0.9994    0.9994    0.9994
    0.9995    0.9994    0.9994


uv(:,:,2) =

  1.0e-003 *

   -0.2083   -0.2080   -0.2080
   -0.2080   -0.1848   -0.1848
   -0.1861   -0.1616   -0.1848
   -0.1507   -0.0860   -0.1183
   -0.0860   -0.0633   -0.1183
   -0.0396   -0.0396   -0.0860 

BA method. Another pair of images

I0 =

         0    0.5000         0
         0    1.0000         0
         0    0.5000         0


I1 =

    0.5000         0         0
    1.0000         0         0
    0.5000         0         0
1st iteration
uv(:,:,1) =

    -1    -1    -1
    -1    -1    -1
    -1    -1    -1


uv(:,:,2) =

  1.0e-014 *

    0.8281    0.8281    0.8281
    0.8281    0.8281    0.8281
    0.8281    0.8281    0.8281
2nd iteration
uv(:,:,1) =

   -1.0000   -1.0000   -1.0000
   -1.0000   -1.0000   -1.0000
   -1.0000   -1.0000   -1.0000


uv(:,:,2) =

  1.0e-013 *

   -0.5965   -0.5965   -0.5965
   -0.5965   -0.5965   -0.5965
   -0.5965   -0.5965   -0.5965

3rd iteration
uv(:,:,1) =

   -1.0000   -1.0000   -1.0000
   -1.0000   -1.0000   -1.0000
   -1.0000   -1.0000   -1.0000


uv(:,:,2) =

  1.0e-011 *

    0.5374    0.5374    0.5374
    0.5374    0.5374    0.5374
    0.5374    0.5374    0.5374
Visually the same:







HS method. Simple image

BA - is not the simpliest method. I found there is implmentation of Horn-Schunk.
I found that the results are really poor, when my "image elements" ar just on the border. So I extended image by zeros.

I use the following command:
uv = estimate_flow_interface(I0, I1, ...
    'hs-brightness', [], ...
    {'display', 1, 'pyramid_levels', 1, 'gnc_pyramid_levels', 1, ...
     'pyramid_spacing', sqrt(2)});
I also use slightly modified code. I disabled automatic pyramid height calculation, so I set it manually.
Input
I0 =

         0    0.5000         0
         0    1.0000         0
         0    0.5000         0
    1.0000         0         0
    0.5000         0         0
    0.5000    1.0000         0

I1 =
    0.5000         0         0
    1.0000         0         0
    0.5000         0         0
         0    1.0000         0
         0    0.5000         0
         0    0.5000    1.0000

Gives:


While
I0 =

         0         0         0         0         0
         0         0    0.5000         0         0
         0         0    1.0000         0         0
         0         0    0.5000         0         0
         0    1.0000         0         0         0
         0    0.5000         0         0         0
         0    0.5000    1.0000         0         0
         0         0         0         0         0


I1 =

         0         0         0         0         0
         0    0.5000         0         0         0
         0    1.0000         0         0         0
         0    0.5000         0         0         0
         0         0    1.0000         0         0
         0         0    0.5000         0         0
         0         0    0.5000    1.0000         0
         0         0         0         0         0
gives

HS method. Multiscale.

I0 = [ 0 0 0 0 0 0 0 0 0 0 0 0
       3 0 0 0 0 0 5 5 0 0 0 0 
       3 0 0 0 0 0 1 3 0 0 0 0
       0 0 0 1 0 0 2 4 0 0 0 0
       0 0 0 2 0 0 0 0 0 0 0 0
       5 2 0 0 0 0 0 0 0 0 0 0
       0 0 0 0 0 0 0 0 0 0 0 0
       5 5 0 0 0 0 0 0 0 0 0 0
       5 5 0 0 0 0 0 0 0 0 0 0       ] / 5.;

I1 = [ 0 0 0 0 0 0 0 0 0 0 0 0
       3 0 0 0 0 0 0 0 0 0 0 0 
       3 0 0 0 0 0 0 0 0 0 0 0
       0 0 0 1 0 0 0 0 0 5 5 0
       0 0 0 2 0 0 0 0 0 1 3 0
       5 2 0 0 0 0 0 0 0 2 4 0
       0 0 0 0 0 0 0 0 0 0 0 0
       5 5 0 0 0 0 0 0 0 0 0 0
       5 5 0 0 0 0 0 0 0 0 0 0       ] / 5.;
 
 



Here the shift between frames is much larger than a pixel and the size of objects. So OF fail without resolution scaling.
1 pyramid level
2 pyramid levels
3 pyramid levels

No comments:

Post a Comment