summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/sift/src/c/diffss.c
blob: 683cbe749c826591e4a06617f27102579d130c0b (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
44
45
46
47
48
49
50
51
52
53
/********************************
Author: Sravanthi Kota Venkata
********************************/

#include "sift.h"

/**
    DIFFSS  Difference of scale space
    Returns a scale space DSS obtained by subtracting
    consecutive levels of the scale space SS.

    In SIFT, this function is used to compute the difference of
    Gaussian scale space from the Gaussian scale space of an image.
**/

F2D** diffss(F2D** ss, int num, int intervals)
{
    F2D** dss;
    int o, sizeM, sizeN, s, i, j; 
    F2D *current, *in1, *in2;

    dss = malloc(num*intervals*sizeof(F2D*));

    for(o=0; o<num; o++)
    {
        for(s=0; s<(intervals-1); s++)
        {
            sizeM = ss[o*intervals+s]->height;
            sizeN = ss[o*intervals+s]->width;

            dss[o*intervals+s] = fMallocHandle(sizeM, sizeN);

            current = dss[o*intervals+s];
            in1 = ss[o*intervals+s+1];
            in2 = ss[o*intervals+s];
            
            for(i=0; i<sizeM; i++)
            {
                for(j=0; j<sizeN; j++)
                {
                    subsref(current,i,j) = subsref(in1,i,j) - subsref(in2,i,j);
                }
            }
        }
    }

    return dss;

}