summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/tracking/src/c/getInterpolatePatch.c
blob: 99e95f9c2d7cf00f8a2c0bf586bed9790e239d27 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/********************************
Author: Sravanthi Kota Venkata
********************************/

#include "tracking.h"

/** Perform simple interpolation around  2*winSize*2*winSize neighbourhood **/
F2D* getInterpolatePatch(F2D* src, int cols, float centerX, float centerY, int winSize)
{
    F2D *dst;
    float a, b, a11, a12, a21, a22;
    int i, j, k, srcIdx, dstIdx;
    int srcIdxx, dstIdxx;

    a = centerX - floor(centerX);
    b = centerY - floor(centerY);

    a11 = (1-a)*(1-b);
    a12 = a*(1-b);
    a21 = (1-a)*b;
    a22 = a*b;

    dst = fSetArray(1,2*winSize*2*winSize, 0);


    for(i=-winSize; i<winSize; i++)
    {
        srcIdxx = floor(centerY) + i;
        dstIdxx = i+winSize;

        for(j=-winSize; j<(winSize); j++)
        {
            srcIdx = srcIdxx * cols + floor(centerX) + j;
            dstIdx = dstIdxx * 2 * winSize + j + winSize;
            asubsref(dst,dstIdx) = asubsref(src,srcIdx)*a11 + asubsref(src,srcIdx+1)*a12 + asubsref(src,srcIdx+cols)*a21 + asubsref(src,srcIdx+1+cols)*a22;
        }
    }

    return dst;
}