View Single Post
Old 7th April 2007, 01:57   #10  |  Link
tritical
Registered User
 
Join Date: Dec 2003
Location: MO, US
Posts: 999
You're pretty close for only a minute of watching... pseudo code for what it does (Fizick correct me if I'm wrong, I only glanced at the source code):

temporal sequence of pixels (trying to create pixel 'x'):
Code:
  c   h
a   f   k
  d x i
b   g   l
  e   j

int p0 = (c+h)/2;
int p1 = f;
int p2 = (d+i)/2;
int p3 = g;
int p4 = (e+j)/2;

int tdiff0 = abs(d-i);
int tdiff1 = (abs(a-f)+abs(b-g))/2;
int tdiff2 = (abs(k-f)+abs(g-l))/2;

int diff = max3(tdiff0,tdiff1,tdiff2);

int spatial_pred = edi_value;

if (mode < 2)
{
   int max = max3(p2-p3,p2-p1,min(p0-p1,p4-p3));
   int min = min3(p2-p3,p2-p1,max(p0-p1,p4-p3));
   diff = max3(diff,min,-max);
}

if (spatial_pred > p2 + diff)
   spatial_pred = p2 + diff;
if (spatial_pred < p2 - diff)
   spatial_pred = p2 - diff;

x = spatial_pred;

edi_value is determined by:

trying to create pixel 'x' from neighboring lines:

Code:
a b c d e f g
      x
h i j k l m n

int spatial_pred = (d+k)/2;
int spatial_score = abs(c-j)+abs(d-k)+abs(e-l);

int score = abs(b-k)+abs(c-l)+abs(d-m);
if (score < spatial_score)
{
   spatial_pred = (c+l)/2;
   spatial_score = score;
   score = abs(a-l)+abs(b-m)+abs(c-n);
   if (score < spatial_score)
   {
       spatial_pred = (b+m)/2;
       spatial_score = score;
   }
}
score = abs(d-i)+abs(e-j)+abs(f-k);
if (score < spatial_score)
{
   spatial_pred = (e+j)/2;
   spatial_score = score;
   score = abs(e-h)+abs(f-i)+abs(g-j);
   if (score < spatial_score)
   {
       spatial_pred = (f+i)/2;
       spatial_score = score;
   }
}
tritical is offline   Reply With Quote