diff options
| author | leochanj105 <leochanj@live.unc.edu> | 2020-10-19 23:09:30 -0400 |
|---|---|---|
| committer | leochanj105 <leochanj@live.unc.edu> | 2020-10-20 02:40:39 -0400 |
| commit | f618466c25d43f3bae9e40920273bf77de1e1149 (patch) | |
| tree | 460e739e2165b8a9c37a9c7ab1b60f5874903543 /SD-VBS/benchmarks/stitch/src | |
| parent | 47ced4e96bbb782b9e780e8f2cfc637b2c21ff44 (diff) | |
initial sd-vbs
initial sd-vbs
add sd-vbs
sd-vbs
Diffstat (limited to 'SD-VBS/benchmarks/stitch/src')
25 files changed, 1090 insertions, 0 deletions
diff --git a/SD-VBS/benchmarks/stitch/src/c/dist2.c b/SD-VBS/benchmarks/stitch/src/c/dist2.c new file mode 100644 index 0000000..d76fcb2 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/dist2.c | |||
| @@ -0,0 +1,76 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | F2D* dist2(I2D* x, F2D* c) | ||
| 8 | { | ||
| 9 | int ndata, dimx, ncentres, dimc, i, j, k; | ||
| 10 | F2D *n2, *t1, *t2; | ||
| 11 | float temp; | ||
| 12 | F2D *s1, *s2, *ctrans; | ||
| 13 | F2D *mult1, *mult2, *mult3; | ||
| 14 | |||
| 15 | ndata = x->height; | ||
| 16 | dimx = x->width; | ||
| 17 | |||
| 18 | ncentres = c->height; | ||
| 19 | dimc = c->width; | ||
| 20 | |||
| 21 | if(dimx != dimc) | ||
| 22 | return NULL; | ||
| 23 | |||
| 24 | s1 = fSetArray(ncentres, 1, 1); | ||
| 25 | s2 = fSetArray(ndata, 1, 1); | ||
| 26 | t1 = fMallocHandle(1, x->height); | ||
| 27 | |||
| 28 | for(j=0; j<t1->width; j++) | ||
| 29 | { | ||
| 30 | temp = 0; | ||
| 31 | for(i=0; i<t1->height; i++) | ||
| 32 | { | ||
| 33 | temp += subsref(x,j,i) * subsref(x,j,i); | ||
| 34 | } | ||
| 35 | |||
| 36 | asubsref(t1,j) = temp; | ||
| 37 | } | ||
| 38 | |||
| 39 | mult1 = fMtimes(s1, t1); | ||
| 40 | t2 = fMallocHandle(1, c->height); | ||
| 41 | |||
| 42 | for(j=0; j<t2->width; j++) | ||
| 43 | { | ||
| 44 | temp = 0; | ||
| 45 | for(i=0; i<t2->height; i++) | ||
| 46 | { | ||
| 47 | temp += subsref(c,j,i) * subsref(c,j,i); | ||
| 48 | } | ||
| 49 | |||
| 50 | asubsref(t2,j) = temp; | ||
| 51 | } | ||
| 52 | |||
| 53 | mult2 = fMtimes(s2, t2); | ||
| 54 | ctrans = fTranspose(c); | ||
| 55 | mult3 = ifMtimes(x, ctrans); | ||
| 56 | |||
| 57 | for(i=0; i<(mult3->height * mult3->width); i++) | ||
| 58 | asubsref(mult3,i) = asubsref(mult3,i) * 2; | ||
| 59 | |||
| 60 | free(t1); | ||
| 61 | free(t2); | ||
| 62 | free(s1); | ||
| 63 | free(s2); | ||
| 64 | free(ctrans); | ||
| 65 | |||
| 66 | n2 = fMallocHandle(ndata, ncentres); | ||
| 67 | for(i=0; i<(ndata*ncentres); i++) | ||
| 68 | asubsref(n2,i) = asubsref(mult1,i) + asubsref(mult2,i) - asubsref(mult3,i); | ||
| 69 | |||
| 70 | free(mult1); | ||
| 71 | free(mult2); | ||
| 72 | free(mult3); | ||
| 73 | |||
| 74 | return n2; | ||
| 75 | |||
| 76 | } | ||
diff --git a/SD-VBS/benchmarks/stitch/src/c/extractFeatures.c b/SD-VBS/benchmarks/stitch/src/c/extractFeatures.c new file mode 100644 index 0000000..ea574e4 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/extractFeatures.c | |||
| @@ -0,0 +1,181 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | #include <math.h> | ||
| 7 | |||
| 8 | #define min(a,b) (a<b)?a:b | ||
| 9 | |||
| 10 | F2D* extractFeatures(I2D* I, F2D* x, F2D* y) | ||
| 11 | { | ||
| 12 | int n, i, j, k; | ||
| 13 | F2D* I1; | ||
| 14 | F2D *Iconv; | ||
| 15 | F2D *Isub; | ||
| 16 | int nr, nc; | ||
| 17 | F2D *w, *wt, *vecF; | ||
| 18 | I2D *Xsub, *Ysub; | ||
| 19 | float temp, mean, std; | ||
| 20 | int m; | ||
| 21 | F2D *g1, *g; | ||
| 22 | |||
| 23 | g1 = fSetArray(5,5,0); | ||
| 24 | |||
| 25 | asubsref(g1,0) = 1; | ||
| 26 | asubsref(g1,1) = 4; | ||
| 27 | asubsref(g1,2) = 6; | ||
| 28 | asubsref(g1,3) = 4; | ||
| 29 | asubsref(g1,4) = 1; | ||
| 30 | |||
| 31 | asubsref(g1,5) = 4; | ||
| 32 | asubsref(g1,6) = 16; | ||
| 33 | asubsref(g1,7) = 24; | ||
| 34 | asubsref(g1,8) = 16; | ||
| 35 | asubsref(g1,9) = 4; | ||
| 36 | |||
| 37 | asubsref(g1,10) = 6; | ||
| 38 | asubsref(g1,11) = 24; | ||
| 39 | asubsref(g1,12) = 36; | ||
| 40 | asubsref(g1,13) = 24; | ||
| 41 | asubsref(g1,14) = 6; | ||
| 42 | |||
| 43 | asubsref(g1,15) = 4; | ||
| 44 | asubsref(g1,16) = 16; | ||
| 45 | asubsref(g1,17) = 24; | ||
| 46 | asubsref(g1,18) = 16; | ||
| 47 | asubsref(g1,19) = 4; | ||
| 48 | |||
| 49 | asubsref(g1,20) = 1; | ||
| 50 | asubsref(g1,21) = 4; | ||
| 51 | asubsref(g1,22) = 6; | ||
| 52 | asubsref(g1,23) = 4; | ||
| 53 | asubsref(g1,24) = 1; | ||
| 54 | |||
| 55 | g = fDivide(g1, 256); | ||
| 56 | n = x->height; | ||
| 57 | |||
| 58 | vecF = fMallocHandle(n, 64); | ||
| 59 | I1 = fiDeepCopy(I); | ||
| 60 | |||
| 61 | Iconv = ffConv2(I1, g); | ||
| 62 | fFreeHandle(I1); | ||
| 63 | I1 = ffConv2(Iconv, g); | ||
| 64 | fFreeHandle(Iconv); | ||
| 65 | Iconv = fDeepCopy(I1); | ||
| 66 | |||
| 67 | { | ||
| 68 | int i = (Iconv->height/5); | ||
| 69 | int j = (Iconv->width/5); | ||
| 70 | Isub = fMallocHandle(i, j); | ||
| 71 | } | ||
| 72 | |||
| 73 | for(i=0, m=0; m<Isub->height; i+=5, m++) | ||
| 74 | { | ||
| 75 | for(j=0, k=0; k<Isub->width; j+=5, k++) | ||
| 76 | { | ||
| 77 | subsref(Isub,m,k) = subsref(Iconv,i,j); | ||
| 78 | } | ||
| 79 | } | ||
| 80 | |||
| 81 | fFreeHandle(Iconv); | ||
| 82 | fFreeHandle(g1); | ||
| 83 | fFreeHandle(g); | ||
| 84 | fFreeHandle(I1); | ||
| 85 | |||
| 86 | nr = Isub->height; | ||
| 87 | nc = Isub->width; | ||
| 88 | |||
| 89 | Xsub = iMallocHandle(x->height, x->width); | ||
| 90 | Ysub = iMallocHandle(y->height, y->width); | ||
| 91 | |||
| 92 | // printf("Sizes = %d\t%d\t%d\t%d\n", Isub->height, Isub->width, x->height, x->width); | ||
| 93 | |||
| 94 | for(i=0; i<(x->height*x->width); i++) | ||
| 95 | { | ||
| 96 | asubsref(Xsub,i) = min( ( asubsref(x,i) /5), nc-4 ); | ||
| 97 | asubsref(Ysub,i) = min( ( asubsref(y,i) /5), nr-4 ); | ||
| 98 | } | ||
| 99 | |||
| 100 | { | ||
| 101 | int maxX, maxY; | ||
| 102 | maxX = Xsub->height>Xsub->width?Xsub->height:Xsub->width; | ||
| 103 | maxY = Ysub->height>Ysub->width?Ysub->height:Ysub->width; | ||
| 104 | if(maxX < 6 || maxY < 10) | ||
| 105 | { | ||
| 106 | fFreeHandle(vecF); | ||
| 107 | vecF = fSetArray(n,2,0); | ||
| 108 | for(i=0; i<(x->height); i++) | ||
| 109 | { | ||
| 110 | subsref(vecF, i, 0) = asubsref(Xsub,i)*1.0; | ||
| 111 | subsref(vecF, i, 1) = asubsref(Ysub,i)*1.0; | ||
| 112 | } | ||
| 113 | |||
| 114 | fFreeHandle(Isub); | ||
| 115 | iFreeHandle(Xsub); | ||
| 116 | iFreeHandle(Ysub); | ||
| 117 | return vecF; | ||
| 118 | } | ||
| 119 | } | ||
| 120 | |||
| 121 | { | ||
| 122 | int newSize = 4; | ||
| 123 | if(I->height > 32 && I->width >32) | ||
| 124 | newSize = 64; | ||
| 125 | fFreeHandle(vecF); | ||
| 126 | vecF = fMallocHandle(n, newSize); | ||
| 127 | } | ||
| 128 | |||
| 129 | // printf("Size of Isub = %d\t%d\n", Isub->height, Isub->width); | ||
| 130 | for(i=0; i<n; i++) | ||
| 131 | { | ||
| 132 | |||
| 133 | if( asubsref(Ysub,i) < 3) | ||
| 134 | asubsref(Ysub,i) = 3; | ||
| 135 | if( asubsref(Xsub,i) < 3) | ||
| 136 | asubsref(Xsub,i) = 3; | ||
| 137 | |||
| 138 | if( asubsref(Ysub,i) >= (Isub->height-4)) | ||
| 139 | asubsref(Ysub,i) = Isub->height-5; | ||
| 140 | if( asubsref(Xsub,i) >= (Isub->width-4)) | ||
| 141 | asubsref(Xsub,i) = Isub->width-5; | ||
| 142 | |||
| 143 | m = 0; | ||
| 144 | temp = 0; | ||
| 145 | // printf("SUBS %d\t%d\n", asubsref(Ysub,i), asubsref(Xsub,i)); | ||
| 146 | |||
| 147 | for(k= asubsref(Xsub,i)-3; k<=( asubsref(Xsub,i)+4); k++) | ||
| 148 | { | ||
| 149 | for(j= asubsref(Ysub,i)-3; j<=( asubsref(Ysub,i)+4); j++) | ||
| 150 | { | ||
| 151 | // printf("%d\t%d\n", j, k); | ||
| 152 | subsref(vecF,i,m) = subsref(Isub,j,k); | ||
| 153 | temp += subsref(vecF,i,m); | ||
| 154 | m++; | ||
| 155 | } | ||
| 156 | } | ||
| 157 | mean = temp/64.0; | ||
| 158 | |||
| 159 | std = 0; | ||
| 160 | for(j=0; j<64; j++) | ||
| 161 | { | ||
| 162 | subsref(vecF,i,j) = subsref(vecF,i,j) - mean; | ||
| 163 | std += subsref(vecF,i,j) * subsref(vecF,i,j); | ||
| 164 | } | ||
| 165 | |||
| 166 | std = std/64; | ||
| 167 | std = sqrt(std); | ||
| 168 | for(j=0; j<64; j++) | ||
| 169 | { | ||
| 170 | subsref(vecF,i,j) = subsref(vecF,i,j)/std; | ||
| 171 | } | ||
| 172 | } | ||
| 173 | |||
| 174 | iFreeHandle(Xsub); | ||
| 175 | fFreeHandle(Isub); | ||
| 176 | iFreeHandle(Ysub); | ||
| 177 | return vecF; | ||
| 178 | } | ||
| 179 | |||
| 180 | |||
| 181 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/c/getANMS.c b/SD-VBS/benchmarks/stitch/src/c/getANMS.c new file mode 100644 index 0000000..fa03a85 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/getANMS.c | |||
| @@ -0,0 +1,145 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | F2D* getANMS (F2D *points, int r) | ||
| 8 | { | ||
| 9 | unsigned int MAX_LIMIT = 10000000; | ||
| 10 | F2D *suppressR; | ||
| 11 | float C_ROBUST = 0.9; | ||
| 12 | F2D *srtdPnts; | ||
| 13 | int n, k; | ||
| 14 | I2D *srtdVIdx, *supId; | ||
| 15 | float r_sq, t, t1; | ||
| 16 | F2D *tempF, *srtdV, *interestPnts; | ||
| 17 | int i, j, validCount=0, cnt, end; | ||
| 18 | F2D *v; | ||
| 19 | int iter, rows, cols; | ||
| 20 | F2D* temp; | ||
| 21 | int supIdPtr = 0; | ||
| 22 | |||
| 23 | v = fMallocHandle(points->height, 1); | ||
| 24 | for(i=0; i<v->height; i++) | ||
| 25 | asubsref(v,i) = subsref(points,i,2); | ||
| 26 | |||
| 27 | r_sq = r * r * 1.0; | ||
| 28 | n = v->height; | ||
| 29 | |||
| 30 | srtdVIdx = fSortIndices (v, 1); | ||
| 31 | srtdPnts = fMallocHandle (srtdVIdx->height, points->width); | ||
| 32 | |||
| 33 | for (i = 0; i < srtdVIdx->height; i++) | ||
| 34 | for(j=0; j<points->width; j++) | ||
| 35 | subsref(srtdPnts,i,j) = subsref(points, asubsref(srtdVIdx,i), j); | ||
| 36 | |||
| 37 | temp = fSetArray (1, 3, 0); | ||
| 38 | suppressR = fSetArray(n, 1, MAX_LIMIT); | ||
| 39 | |||
| 40 | validCount = 0; | ||
| 41 | iter = 0; | ||
| 42 | for (i = 0; i < suppressR->height; i++) | ||
| 43 | { | ||
| 44 | if ( asubsref(suppressR,i) > r_sq) | ||
| 45 | { | ||
| 46 | validCount++; | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | k = 0; | ||
| 51 | supId = iMallocHandle(validCount, 1); | ||
| 52 | for (i = 0; i < (suppressR->height*suppressR->width); i++) | ||
| 53 | { | ||
| 54 | if ( asubsref(suppressR,i) > r_sq) | ||
| 55 | { | ||
| 56 | asubsref(supId,k++) = i; | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | while (validCount > 0) | ||
| 61 | { | ||
| 62 | F2D *tempp, *temps; | ||
| 63 | asubsref(temp,0) = subsref(srtdPnts, asubsref(supId,0), 0); | ||
| 64 | asubsref(temp,1) = subsref(srtdPnts, asubsref(supId,0), 1); | ||
| 65 | asubsref(temp,2) = subsref(srtdPnts, asubsref(supId,0), 2); | ||
| 66 | |||
| 67 | if(iter == 0) | ||
| 68 | interestPnts = fDeepCopy(temp); | ||
| 69 | else | ||
| 70 | { | ||
| 71 | tempp = fDeepCopy(interestPnts); | ||
| 72 | fFreeHandle(interestPnts); | ||
| 73 | interestPnts = ffVertcat(tempp, temp); | ||
| 74 | fFreeHandle(tempp); | ||
| 75 | } | ||
| 76 | iter++; | ||
| 77 | |||
| 78 | tempp = fDeepCopy(srtdPnts); | ||
| 79 | temps = fDeepCopy(suppressR); | ||
| 80 | |||
| 81 | fFreeHandle(srtdPnts); | ||
| 82 | fFreeHandle(suppressR); | ||
| 83 | |||
| 84 | srtdPnts = fMallocHandle(supId->height-1, 3); | ||
| 85 | suppressR = fMallocHandle(supId->height-1, 1); | ||
| 86 | |||
| 87 | k=0; | ||
| 88 | for(i=1; i<supId->height; i++) | ||
| 89 | { | ||
| 90 | subsref(srtdPnts,k,0) = subsref(tempp, asubsref(supId,i) ,0); | ||
| 91 | subsref(srtdPnts,k,1) = subsref(tempp, asubsref(supId,i) ,1); | ||
| 92 | subsref(srtdPnts,k,2) = subsref(tempp, asubsref(supId,i) ,2); | ||
| 93 | subsref(suppressR,k,0) = subsref(temps, asubsref(supId,i) ,0); | ||
| 94 | k++; | ||
| 95 | } | ||
| 96 | |||
| 97 | fFreeHandle(tempp); | ||
| 98 | fFreeHandle(temps); | ||
| 99 | rows = interestPnts->height-1; | ||
| 100 | cols = interestPnts->width; | ||
| 101 | for (i = 0; i < srtdPnts->height; i++) | ||
| 102 | { | ||
| 103 | t = 0; | ||
| 104 | t1 = 0; | ||
| 105 | |||
| 106 | if ((C_ROBUST * subsref(interestPnts,rows,2)) >= subsref(srtdPnts, i,2)) | ||
| 107 | { | ||
| 108 | t = subsref(srtdPnts, i,0) - subsref(interestPnts,rows,0); | ||
| 109 | t1 = subsref(srtdPnts, i,1) - subsref(interestPnts,rows,1); | ||
| 110 | t = t * t + t1 * t1; | ||
| 111 | t1 = 0; | ||
| 112 | } | ||
| 113 | |||
| 114 | if ((C_ROBUST * subsref(interestPnts,rows,2)) < subsref(srtdPnts, i,2)) | ||
| 115 | t1 = 1 * MAX_LIMIT; | ||
| 116 | |||
| 117 | if ( asubsref(suppressR, i) > (t + t1)) | ||
| 118 | { | ||
| 119 | asubsref(suppressR, i) = t + t1; | ||
| 120 | } | ||
| 121 | } | ||
| 122 | |||
| 123 | validCount=0; | ||
| 124 | for (i = 0; i < suppressR->height; i++) | ||
| 125 | if ( asubsref(suppressR,i) > r_sq) | ||
| 126 | validCount++; | ||
| 127 | |||
| 128 | k = 0; | ||
| 129 | iFreeHandle(supId); | ||
| 130 | supId = iMallocHandle(validCount, 1); | ||
| 131 | |||
| 132 | for (i = 0; i < suppressR->height*suppressR->width; i++) | ||
| 133 | if ( asubsref(suppressR,i) > r_sq) | ||
| 134 | asubsref(supId,k++) = i; | ||
| 135 | } | ||
| 136 | |||
| 137 | iFreeHandle(supId); | ||
| 138 | iFreeHandle(srtdVIdx); | ||
| 139 | fFreeHandle(srtdPnts); | ||
| 140 | fFreeHandle(temp); | ||
| 141 | fFreeHandle(suppressR); | ||
| 142 | fFreeHandle(v); | ||
| 143 | |||
| 144 | return interestPnts; | ||
| 145 | } | ||
diff --git a/SD-VBS/benchmarks/stitch/src/c/harris.c b/SD-VBS/benchmarks/stitch/src/c/harris.c new file mode 100644 index 0000000..a24c2b4 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/harris.c | |||
| @@ -0,0 +1,141 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | F2D* harris(I2D* im) | ||
| 8 | { | ||
| 9 | F2D *img1; | ||
| 10 | F2D *g1, *g2, *g; | ||
| 11 | F2D *Ix, *Iy; | ||
| 12 | F2D *Ix2, *Iy2, *IxIy; | ||
| 13 | F2D *v, *R, *Rmax, *Rnm; | ||
| 14 | float eps; | ||
| 15 | F2D *sobel, *sob, *temp, *temp1; | ||
| 16 | I2D *win, *x, *y; | ||
| 17 | int i; | ||
| 18 | |||
| 19 | g1 = fSetArray(5,5,0); | ||
| 20 | g2 = fSetArray(3,3,0); | ||
| 21 | |||
| 22 | asubsref(g1,0) = 1; | ||
| 23 | asubsref(g1,1) = 4; | ||
| 24 | asubsref(g1,2) = 6; | ||
| 25 | asubsref(g1,3) = 4; | ||
| 26 | asubsref(g1,4) = 1; | ||
| 27 | |||
| 28 | asubsref(g1,5) = 4; | ||
| 29 | asubsref(g1,6) = 16; | ||
| 30 | asubsref(g1,7) = 24; | ||
| 31 | asubsref(g1,8) = 16; | ||
| 32 | asubsref(g1,9) = 4; | ||
| 33 | |||
| 34 | asubsref(g1,10) = 6; | ||
| 35 | asubsref(g1,11) = 24; | ||
| 36 | asubsref(g1,12) = 36; | ||
| 37 | asubsref(g1,13) = 24; | ||
| 38 | asubsref(g1,14) = 6; | ||
| 39 | |||
| 40 | asubsref(g1,15) = 4; | ||
| 41 | asubsref(g1,16) = 16; | ||
| 42 | asubsref(g1,17) = 24; | ||
| 43 | asubsref(g1,18) = 16; | ||
| 44 | asubsref(g1,19) = 4; | ||
| 45 | |||
| 46 | asubsref(g1,20) = 1; | ||
| 47 | asubsref(g1,21) = 4; | ||
| 48 | asubsref(g1,22) = 6; | ||
| 49 | asubsref(g1,23) = 4; | ||
| 50 | asubsref(g1,24) = 1; | ||
| 51 | |||
| 52 | asubsref(g2,0) = 1; | ||
| 53 | asubsref(g2,1) = 2; | ||
| 54 | asubsref(g2,2) = 1; | ||
| 55 | |||
| 56 | asubsref(g2,3) = 2; | ||
| 57 | asubsref(g2,4) = 4; | ||
| 58 | asubsref(g2,5) = 2; | ||
| 59 | |||
| 60 | asubsref(g2,6) = 1; | ||
| 61 | asubsref(g2,7) = 2; | ||
| 62 | asubsref(g2,8) = 1; | ||
| 63 | |||
| 64 | g = fDivide(g1, 256); | ||
| 65 | sob = fMallocHandle(1,3); | ||
| 66 | asubsref(sob,0) = -0.5; | ||
| 67 | asubsref(sob,1) = 0; | ||
| 68 | asubsref(sob,2) = 0.5; | ||
| 69 | |||
| 70 | { | ||
| 71 | F2D* imf; | ||
| 72 | imf = fiDeepCopy(im); | ||
| 73 | img1 = ffConv2(imf, g); | ||
| 74 | fFreeHandle(imf); | ||
| 75 | } | ||
| 76 | |||
| 77 | Ix = ffConv2(img1, sob); | ||
| 78 | fFreeHandle(sob); | ||
| 79 | sob = fMallocHandle(3,1); | ||
| 80 | asubsref(sob,0) = -0.5; | ||
| 81 | asubsref(sob,1) = 0; | ||
| 82 | asubsref(sob,2) = 0.5; | ||
| 83 | Iy = ffConv2(img1, sob); | ||
| 84 | |||
| 85 | fFreeHandle(g); | ||
| 86 | g = fDivide(g2, 16); | ||
| 87 | eps = 2.2204e-16; | ||
| 88 | sobel = fTimes(Ix, Ix); | ||
| 89 | Ix2 = ffConv2(sobel, g); | ||
| 90 | fFreeHandle(sobel); | ||
| 91 | |||
| 92 | sobel = fTimes(Iy, Iy); | ||
| 93 | Iy2 = ffConv2(sobel, g); | ||
| 94 | fFreeHandle(sobel); | ||
| 95 | |||
| 96 | sobel = fTimes(Ix, Iy); | ||
| 97 | IxIy = ffConv2(sobel, g); | ||
| 98 | fFreeHandle(sobel); | ||
| 99 | |||
| 100 | temp = fTimes(Ix2, Iy2); | ||
| 101 | temp1 = fTimes(IxIy, IxIy); | ||
| 102 | sobel = fMinus(temp, temp1); | ||
| 103 | |||
| 104 | fFreeHandle(temp); | ||
| 105 | temp = fPlus(Ix2, Iy2); | ||
| 106 | |||
| 107 | for(i=0; i<(temp->height*temp->width); i++) | ||
| 108 | asubsref(temp,i) += eps; | ||
| 109 | |||
| 110 | R = ffDivide(sobel, temp); | ||
| 111 | |||
| 112 | win = iSetArray(1,2,3); | ||
| 113 | Rmax = maxWindow(R, win); | ||
| 114 | Rnm = supress(R, Rmax); | ||
| 115 | |||
| 116 | v = fFind3(Rnm); | ||
| 117 | |||
| 118 | iFreeHandle(win); | ||
| 119 | fFreeHandle(Rmax); | ||
| 120 | fFreeHandle(Rnm); | ||
| 121 | fFreeHandle(R); | ||
| 122 | |||
| 123 | fFreeHandle(img1); | ||
| 124 | fFreeHandle(g1); | ||
| 125 | fFreeHandle(g2); | ||
| 126 | fFreeHandle(g); | ||
| 127 | fFreeHandle(Ix); | ||
| 128 | fFreeHandle(Iy); | ||
| 129 | fFreeHandle(Ix2); | ||
| 130 | fFreeHandle(Iy2); | ||
| 131 | fFreeHandle(IxIy); | ||
| 132 | fFreeHandle(sobel); | ||
| 133 | fFreeHandle(sob); | ||
| 134 | fFreeHandle(temp); | ||
| 135 | fFreeHandle(temp1); | ||
| 136 | // iFreeHandle(x); | ||
| 137 | // iFreeHandle(y); | ||
| 138 | |||
| 139 | return v; | ||
| 140 | } | ||
| 141 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/c/matchFeatures.c b/SD-VBS/benchmarks/stitch/src/c/matchFeatures.c new file mode 100644 index 0000000..5450eb9 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/matchFeatures.c | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | I2D* matchFeatures(F2D* vecF1, F2D* vecF2) | ||
| 8 | { | ||
| 9 | int m, n, n1, n2, n1c, n2c, i, j; | ||
| 10 | I2D *id, *retMatch, *t; | ||
| 11 | F2D *val, *temp; | ||
| 12 | int rows, cols; | ||
| 13 | |||
| 14 | n1 = vecF1->height; | ||
| 15 | n1c = vecF1->width; | ||
| 16 | n2 = vecF2->height; | ||
| 17 | n2c = vecF2->width; | ||
| 18 | |||
| 19 | retMatch = iMallocHandle(1, 2); | ||
| 20 | |||
| 21 | for(i=0; i<n1; i++) | ||
| 22 | { | ||
| 23 | id = iMallocHandle(1, n2); | ||
| 24 | t = iMallocHandle(1, n1c); | ||
| 25 | |||
| 26 | for(j=0; j<n1c; j++) | ||
| 27 | asubsref(t,j) = subsref(vecF1,i,j); | ||
| 28 | |||
| 29 | temp = dist2(t, vecF2); | ||
| 30 | val = fSort(temp,1); | ||
| 31 | id = fSortIndices(temp,1); | ||
| 32 | |||
| 33 | free(temp); | ||
| 34 | free(t); | ||
| 35 | |||
| 36 | if( asubsref(val,1) != 0 & (( asubsref(val,0) / asubsref(val,1) ) < 0.65)) | ||
| 37 | { | ||
| 38 | t = retMatch; | ||
| 39 | rows = t->height + 1; | ||
| 40 | cols = t->width; | ||
| 41 | retMatch = iMallocHandle(rows, cols); | ||
| 42 | n = 0; | ||
| 43 | |||
| 44 | for(m=0; m<(t->height*t->width); m++) | ||
| 45 | { | ||
| 46 | asubsref(retMatch,n++) = asubsref(t,m); | ||
| 47 | } | ||
| 48 | |||
| 49 | asubsref(retMatch,n++) = i; | ||
| 50 | asubsref(retMatch,n) = asubsref(id,0); | ||
| 51 | } | ||
| 52 | } | ||
| 53 | |||
| 54 | return retMatch; | ||
| 55 | } | ||
diff --git a/SD-VBS/benchmarks/stitch/src/c/maxWindow.c b/SD-VBS/benchmarks/stitch/src/c/maxWindow.c new file mode 100644 index 0000000..07f8dc9 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/maxWindow.c | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | F2D* maxWindow(F2D* im, I2D* window) | ||
| 8 | { | ||
| 9 | int exR, exC, rows, cols, tr, tc, i, j, k; | ||
| 10 | F2D *out, *temp; | ||
| 11 | float t; | ||
| 12 | int m; | ||
| 13 | |||
| 14 | exR = asubsref(window,0)/2; | ||
| 15 | exC = asubsref(window,1)/2; | ||
| 16 | |||
| 17 | rows = im->height; | ||
| 18 | cols = im->width; | ||
| 19 | |||
| 20 | tr = rows+exR-1; | ||
| 21 | tc = cols+exC-1; | ||
| 22 | temp = fDeepCopy(im); | ||
| 23 | out = fMallocHandle(rows, cols); | ||
| 24 | |||
| 25 | for(i=0; i<rows; i++) | ||
| 26 | { | ||
| 27 | for(j=0; j<cols; j++) | ||
| 28 | { | ||
| 29 | t = 0; | ||
| 30 | for(k=-exR; k<=exR; k++) | ||
| 31 | { | ||
| 32 | for(m=-exC; m<=exC; m++) | ||
| 33 | { | ||
| 34 | if( (i+k) < 0 || (i+k) >= rows || (j+m) < 0 || (j+m) >= cols) | ||
| 35 | continue; | ||
| 36 | if( subsref(temp,(i+k),(j+m)) > t) | ||
| 37 | t = subsref(temp,(i+k),(j+m)); | ||
| 38 | } | ||
| 39 | } | ||
| 40 | subsref(out,i,j) = t; | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 44 | fFreeHandle(temp); | ||
| 45 | return out; | ||
| 46 | } | ||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | |||
| 51 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/c/script_stitch.c b/SD-VBS/benchmarks/stitch/src/c/script_stitch.c new file mode 100644 index 0000000..00c9a93 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/script_stitch.c | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | #include <malloc.h> | ||
| 7 | #include "extra.h" | ||
| 8 | #define STITCH_MEM 1<<30 | ||
| 9 | int main(int argc, char* argv[]) | ||
| 10 | { | ||
| 11 | SET_UP | ||
| 12 | mallopt(M_TOP_PAD, STITCH_MEM); | ||
| 13 | mallopt(M_MMAP_MAX, 0); | ||
| 14 | int rows, cols; | ||
| 15 | F2D *x, *y, *v, *interestPnts, *Fcur, *int1, *int2; | ||
| 16 | I2D *Icur; | ||
| 17 | int i, j; | ||
| 18 | char im1[100], im2[100]; | ||
| 19 | |||
| 20 | |||
| 21 | printf("Input image: "); | ||
| 22 | scanf("%s", im1); | ||
| 23 | Icur = readImage(im1); | ||
| 24 | rows = Icur->height; | ||
| 25 | cols = Icur->width; | ||
| 26 | |||
| 27 | printf("start\n"); | ||
| 28 | for_each_job{ | ||
| 29 | v = harris(Icur); | ||
| 30 | interestPnts = getANMS(v, 24); | ||
| 31 | int1 = fMallocHandle(interestPnts->height, 1); | ||
| 32 | int2 = fSetArray(interestPnts->height, 1, 0); | ||
| 33 | for(i=0; i<int1->height; i++) | ||
| 34 | { | ||
| 35 | asubsref(int1,i) = subsref(interestPnts,i,0); | ||
| 36 | asubsref(int2,i) = subsref(interestPnts,i,1); | ||
| 37 | } | ||
| 38 | |||
| 39 | Fcur = extractFeatures(Icur, int1, int2); | ||
| 40 | } | ||
| 41 | printf("end..\n"); | ||
| 42 | |||
| 43 | |||
| 44 | #ifdef CHECK | ||
| 45 | /** Self checking - use expected.txt from data directory **/ | ||
| 46 | { | ||
| 47 | int ret=0; | ||
| 48 | float tol = 0.02; | ||
| 49 | #ifdef GENERATE_OUTPUT | ||
| 50 | fWriteMatrix(Fcur, argv[1]); | ||
| 51 | #endif | ||
| 52 | ret = fSelfCheck(Fcur, "expected_C.txt", tol); | ||
| 53 | if (ret == -1) | ||
| 54 | printf("Error in Stitch\n"); | ||
| 55 | } | ||
| 56 | #endif | ||
| 57 | iFreeHandle(Icur); | ||
| 58 | fFreeHandle(v); | ||
| 59 | fFreeHandle(interestPnts); | ||
| 60 | fFreeHandle(int1); | ||
| 61 | fFreeHandle(int2); | ||
| 62 | fFreeHandle(Fcur); | ||
| 63 | WRITE_TO_FILE | ||
| 64 | return 0; | ||
| 65 | } | ||
diff --git a/SD-VBS/benchmarks/stitch/src/c/stitch.h b/SD-VBS/benchmarks/stitch/src/c/stitch.h new file mode 100644 index 0000000..e2202fc --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/stitch.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #ifndef _SCRIPT_STITCH_ | ||
| 6 | #define _SCRIPT_STITCH_ | ||
| 7 | |||
| 8 | #include "sdvbs_common.h" | ||
| 9 | |||
| 10 | F2D* dist2(I2D* x, F2D* c); | ||
| 11 | F2D* extractFeatures(I2D* I, F2D* x, F2D* y); | ||
| 12 | F2D* getANMS (F2D *points, int r); | ||
| 13 | F2D* harris(I2D* im); | ||
| 14 | I2D* matchFeatures(F2D* vecF1, F2D* vecF2); | ||
| 15 | F2D* maxWindow(F2D* im, I2D* window); | ||
| 16 | F2D* supress(F2D* im, F2D* im1); | ||
| 17 | int script_stitch(); | ||
| 18 | |||
| 19 | #endif | ||
| 20 | |||
| 21 | |||
| 22 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/c/supress.c b/SD-VBS/benchmarks/stitch/src/c/supress.c new file mode 100644 index 0000000..6fbdb6c --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/c/supress.c | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | /******************************** | ||
| 2 | Author: Sravanthi Kota Venkata | ||
| 3 | ********************************/ | ||
| 4 | |||
| 5 | #include "stitch.h" | ||
| 6 | |||
| 7 | F2D* supress(F2D* im, F2D* im1) | ||
| 8 | { | ||
| 9 | int rows, cols, i, j; | ||
| 10 | F2D *out; | ||
| 11 | |||
| 12 | rows = im->height; | ||
| 13 | cols = im->width; | ||
| 14 | |||
| 15 | out = fSetArray(rows, cols, 0); | ||
| 16 | |||
| 17 | for(i=0; i<rows; i++) | ||
| 18 | { | ||
| 19 | for(j=0; j<cols; j++) | ||
| 20 | { | ||
| 21 | if( subsref(im,i,j) == subsref(im1,i,j)) | ||
| 22 | subsref(out,i,j) = subsref(im,i,j); | ||
| 23 | } | ||
| 24 | } | ||
| 25 | return out; | ||
| 26 | } | ||
| 27 | |||
| 28 | |||
| 29 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/calculateH.m b/SD-VBS/benchmarks/stitch/src/matlab/calculateH.m new file mode 100755 index 0000000..caefd74 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/calculateH.m | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | function retH=calculateH(pnt1, pnt2) | ||
| 2 | |||
| 3 | [n temp]=size(pnt1); | ||
| 4 | |||
| 5 | X=zeros(0,8); | ||
| 6 | b=zeros(0,1); | ||
| 7 | |||
| 8 | for i=1:n | ||
| 9 | X=[X; pnt1(i,1) pnt1(i,2) 1 0 0 0 -pnt2(i,1)*pnt1(i,1) -pnt2(i,1)*pnt1(i,2);0, 0, 0, pnt1(i,1), pnt1(i,2), 1, -pnt2(i,2)*pnt1(i,1), -pnt2(i,2)*pnt1(i,2)]; | ||
| 10 | b=[b; pnt2(i,1); pnt2(i,2)]; | ||
| 11 | end | ||
| 12 | |||
| 13 | if n==4 | ||
| 14 | %if abs(det(X)~=0 | ||
| 15 | H=X^(-1)*b; | ||
| 16 | %else | ||
| 17 | % H=[0 0 0; 0 0 0; 0 0 1]; | ||
| 18 | %end | ||
| 19 | else | ||
| 20 | Xt = X'; | ||
| 21 | H=(Xt*X)^(-1)*Xt*b; | ||
| 22 | end | ||
| 23 | |||
| 24 | retH=[H(1) H(2) H(3);H(4) H(5) H(6);H(7) H(8) 1]; | ||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/dist2.m b/SD-VBS/benchmarks/stitch/src/matlab/dist2.m new file mode 100755 index 0000000..89116ac --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/dist2.m | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | function n2 = dist2(x, c) | ||
| 2 | %DIST2 Calculates squared distance between two sets of points. | ||
| 3 | % | ||
| 4 | % Description | ||
| 5 | % D = DIST2(X, C) takes two matrices of vectors and calculates the | ||
| 6 | % squared Euclidean distance between them. Both matrices must be of | ||
| 7 | % the same column dimension. If X has M rows and N columns, and C has | ||
| 8 | % L rows and N columns, then the result has M rows and L columns. The | ||
| 9 | % I, Jth entry is the squared distance from the Ith row of X to the | ||
| 10 | % Jth row of C. | ||
| 11 | % | ||
| 12 | % See also | ||
| 13 | % GMMACTIV, KMEANS, RBFFWD | ||
| 14 | % | ||
| 15 | |||
| 16 | % Copyright (c) Christopher M Bishop, Ian T Nabney (1996, 1997) | ||
| 17 | |||
| 18 | [ndata, dimx] = size(x); | ||
| 19 | [ncentres, dimc] = size(c); | ||
| 20 | if dimx ~= dimc | ||
| 21 | error('Data dimension does not match dimension of centres') | ||
| 22 | end | ||
| 23 | |||
| 24 | ct = c'; | ||
| 25 | opt = (x.^2)'; | ||
| 26 | op2t = (x.^2)'; | ||
| 27 | tempT = (ones(ncentres, 1) * sum(opt, 1))'; | ||
| 28 | n2 = tempT + ones(ndata, 1) * sum(op2t,1) - 2.*(x*ct); | ||
| 29 | |||
| 30 | |||
| 31 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/extractFeatures.m b/SD-VBS/benchmarks/stitch/src/matlab/extractFeatures.m new file mode 100755 index 0000000..38d2f7c --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/extractFeatures.m | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | function vecF=extractFeatures(I, x, y, dataDir) | ||
| 2 | |||
| 3 | Igray = I; | ||
| 4 | w = (1/16)*[1 4 6 4 1]; | ||
| 5 | [n temp]=size(x); | ||
| 6 | |||
| 7 | %SUB sample rate s=5 | ||
| 8 | wt = w'; | ||
| 9 | Iconv=conv2(w, wt, Igray, 'same'); | ||
| 10 | Iconv=conv2(w, wt, Iconv, 'same'); | ||
| 11 | Isub=Iconv(1:5:end,1:5:end); | ||
| 12 | [nr nc]=size(Isub); | ||
| 13 | |||
| 14 | Xsub=min(floor(x/5)+1, nc-4); | ||
| 15 | Ysub=min(floor(y/5)+1, nr-4); | ||
| 16 | |||
| 17 | if(length(Xsub) < 6 || length(Ysub) < 10) | ||
| 18 | vecF = [Xsub Ysub]; | ||
| 19 | return; | ||
| 20 | end | ||
| 21 | |||
| 22 | newSize = 4; | ||
| 23 | [rows, cols] = size(I); | ||
| 24 | if(rows > 32 & cols >32) | ||
| 25 | newSize = 64; | ||
| 26 | end | ||
| 27 | |||
| 28 | for i=1:n | ||
| 29 | |||
| 30 | minValy = 3; | ||
| 31 | minValx = 3; | ||
| 32 | if( Ysub(i) < 4) | ||
| 33 | Ysub(i) = 4; | ||
| 34 | end | ||
| 35 | if( Xsub(i) < 4) | ||
| 36 | Xsub(i) = 4; | ||
| 37 | end | ||
| 38 | |||
| 39 | if( Ysub(i) > size(Isub,1)-4) | ||
| 40 | Ysub(i) = size(Isub,1)-4; | ||
| 41 | end | ||
| 42 | if( Xsub(i) > size(Isub,2)-4) | ||
| 43 | Xsub(i) = size(Isub,2)-4; | ||
| 44 | end | ||
| 45 | |||
| 46 | vecF(i,:)=reshape(Isub(Ysub(i)-minValy:Ysub(i)+4,Xsub(i)-minValx:Xsub(i)+4),1,newSize); | ||
| 47 | |||
| 48 | %normalization | ||
| 49 | vecF(i,:)=vecF(i,:)-mean(vecF(i,:)); | ||
| 50 | vecF(i,:)=vecF(i,:)/std(vecF(i,:)); | ||
| 51 | %imagesc(reshape(vecF(i,:),8,8)); colormap gray | ||
| 52 | %drawnow | ||
| 53 | %pause | ||
| 54 | end | ||
| 55 | |||
| 56 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/getANMS.m b/SD-VBS/benchmarks/stitch/src/matlab/getANMS.m new file mode 100755 index 0000000..caece31 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/getANMS.m | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | function [interestPnts]=getANMS(x, y, v, r, dataDir) | ||
| 2 | %interestPnts=[x y v] | ||
| 3 | MAX_LIMIT=100000000; | ||
| 4 | C_ROBUST=0.9; | ||
| 5 | r_sq=r^2; | ||
| 6 | points=[x y v]; | ||
| 7 | [n temp]=size(v); | ||
| 8 | [srtdV srtdVIdx]=sort(v,'descend'); | ||
| 9 | srtdPnts=points(srtdVIdx,:); | ||
| 10 | |||
| 11 | interestPnts=zeros(0,3); | ||
| 12 | |||
| 13 | suppressR=ones(n,1)*MAX_LIMIT; | ||
| 14 | supId=find(suppressR>r_sq); | ||
| 15 | |||
| 16 | iter = 0; | ||
| 17 | while length(supId)>0 | ||
| 18 | interestPnts=[interestPnts; srtdPnts(supId(1),:)]; | ||
| 19 | srtdPnts=srtdPnts(supId(2:end),:); | ||
| 20 | suppressR=suppressR(supId(2:end),:); | ||
| 21 | |||
| 22 | suppressR=min(suppressR,(C_ROBUST*interestPnts(end,3)>srtdPnts(:,3)).*((srtdPnts(:,1)-interestPnts(end,1)).^2 + (srtdPnts(:,2)-interestPnts(end,2)).^2)+(C_ROBUST*interestPnts(end,3)<=srtdPnts(:,3))*MAX_LIMIT); | ||
| 23 | supId=find(suppressR>r_sq); | ||
| 24 | iter = iter + 1; | ||
| 25 | end | ||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/getDirParamLocal.m b/SD-VBS/benchmarks/stitch/src/matlab/getDirParamLocal.m new file mode 100755 index 0000000..7b36886 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/getDirParamLocal.m | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | function DIR_PARAM=getDirParam | ||
| 2 | DIR_PARAM.main_dir=pwd; | ||
| 3 | DIR_PARAM.data_dir=fullfile(DIR_PARAM.main_dir,'data'); | ||
| 4 | DIR_PARAM.report_dir=fullfile(DIR_PARAM.main_dir,'report'); | ||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/harris.m b/SD-VBS/benchmarks/stitch/src/matlab/harris.m new file mode 100755 index 0000000..423330e --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/harris.m | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | |||
| 2 | % Sample code for detecting Harris corners, following | ||
| 3 | % Brown et al, CVPR 2005 | ||
| 4 | % by Alyosha Efros, so probably buggy... | ||
| 5 | |||
| 6 | function [x,y,v] = harris(im, dataDir); | ||
| 7 | |||
| 8 | g1 = [1,4,6,4,1; 4,16,24,16,4;6,24,36,24,6;4,16,24,16,4;1,4,6,4,1]/256; | ||
| 9 | g2 = [1,2,1;2,4,2;1,2,1]/16; | ||
| 10 | |||
| 11 | img1 = conv2(im,g1,'same'); % blur image with sigma_d | ||
| 12 | |||
| 13 | Ix = conv2(img1,[-0.5 0 0.5],'same'); % take x derivative | ||
| 14 | Iy = conv2(img1,[-0.5;0;0.5],'same'); % take y derivative | ||
| 15 | |||
| 16 | % Compute elements of the Harris matrix H | ||
| 17 | %%% we can use blur instead of the summing window | ||
| 18 | Ix2 = conv2(Ix.*Ix,g2,'same'); | ||
| 19 | Iy2 = conv2(Iy.*Iy,g2,'same'); | ||
| 20 | IxIy = conv2(Ix.*Iy,g2,'same'); | ||
| 21 | |||
| 22 | R = (Ix2.*Iy2 - IxIy.*IxIy) ... % det(H) | ||
| 23 | ./ (Ix2 + Iy2 + eps); % trace(H) + epsilon | ||
| 24 | |||
| 25 | % don't want corners close to image border | ||
| 26 | [rows, cols] = size(im); | ||
| 27 | |||
| 28 | % non-maxima supression within 3x3 windows | ||
| 29 | nonmax = inline('max(x)'); | ||
| 30 | Rmax = colfilt(R,[3 3],'sliding',nonmax); % find neighbrhood max | ||
| 31 | Rnm = R.*(R == Rmax); % supress non-max | ||
| 32 | |||
| 33 | % extract all interest points | ||
| 34 | [y,x,v] = find(Rnm); | ||
| 35 | |||
| 36 | |||
| 37 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/main.m b/SD-VBS/benchmarks/stitch/src/matlab/main.m new file mode 100755 index 0000000..9be8504 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/main.m | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | Icur_list=readData('capitol'); | ||
| 2 | Icur=Icur_list{1}; | ||
| 3 | %Icur=Icur(1:150,:,:); | ||
| 4 | [x y v]=harris(Icur); | ||
| 5 | interestPntsCur=getANMS(x, y, v, 24); | ||
| 6 | Fcur=extractFeatures(Icur, interestPntsCur(:,1), interestPntsCur(:,2)); | ||
| 7 | |||
| 8 | for id=2:length(Icur_list) | ||
| 9 | Iprev=Icur; | ||
| 10 | Fprev=Fcur; | ||
| 11 | interestPntsPrev=interestPntsCur; | ||
| 12 | Icur=Icur_list{id}; | ||
| 13 | %Icur=Icur(1:150,:,:); | ||
| 14 | [x y v]=harris(Icur); | ||
| 15 | %showInterestPoints(I, x, y) | ||
| 16 | interestPntsCur=getANMS(x, y, v, 16); | ||
| 17 | %showInterestPoints(I, interestPnts(:,1), interestPnts(:,2)) | ||
| 18 | Fcur=extractFeatures(Icur, interestPntsCur(:,1), interestPntsCur(:,2)); | ||
| 19 | matchedPntsIdx=matchFeatures(Fprev, Fcur); | ||
| 20 | matchedPntsPrev=interestPntsPrev(matchedPntsIdx(:,1),:); | ||
| 21 | matchedPntsCur=interestPntsCur(matchedPntsIdx(:,2),:); | ||
| 22 | |||
| 23 | %subplot(1,2,1);showInterestPoints(Iprev, matchedPntsPrev(:,1), matchedPntsPrev(:,2));axis image | ||
| 24 | %subplot(1,2,2);showInterestPoints(Icur, matchedPntsCur(:,1), matchedPntsCur(:,2));axis image | ||
| 25 | %drawnow | ||
| 26 | %pause; | ||
| 27 | %printImage(['featureMatching' int2str(id-1) '_' int2str(id)]); | ||
| 28 | [retH retPntsIdx]=ransac(matchedPntsPrev, matchedPntsCur, 10000, 100); | ||
| 29 | subplot(2,2,1);showInterestPoints(Iprev, matchedPntsPrev(retPntsIdx,1), matchedPntsPrev(retPntsIdx,2));axis image | ||
| 30 | subplot(2,2,2);showInterestPoints(Icur, matchedPntsCur(retPntsIdx,1), matchedPntsCur(retPntsIdx,2));axis image | ||
| 31 | T=maketform('projective', retH'); | ||
| 32 | Tfn_Mat=T; | ||
| 33 | [nr nc nd]=size(Iprev); | ||
| 34 | Itrans=imtransform(Iprev,T,'XData', [1 nc], 'YData', [1 nr],'FillValues',[0;0;0]); | ||
| 35 | subplot(2,2,3);imshow(Itrans) | ||
| 36 | subplot(2,2,4);imagesc(rgb2gray(abs(Icur-Itrans))) | ||
| 37 | drawnow | ||
| 38 | pause; | ||
| 39 | printImage(['ransac' int2str(id-1) '_' int2str(id)]); | ||
| 40 | end | ||
| 41 | |||
| 42 | %[Itrans2 XData YData]=imtransform(Iprev,T,'FillValues',[0;0;0]); | ||
| 43 | %for the fast iteration | ||
| 44 | %[Itrans2 XData2 YData2]=imtransform(Iprev,T,'XData', [-2*nc 2*nc], 'YData', [-2*nr 2*nr],'FillValues',[0;0;0]); | ||
| 45 | |||
| 46 | %h=imshow(Itrans); | ||
| 47 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/matchFeatures.m b/SD-VBS/benchmarks/stitch/src/matlab/matchFeatures.m new file mode 100755 index 0000000..7af77e0 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/matchFeatures.m | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | function retMatch=matchFeatures(vecF1, vecF2) | ||
| 2 | [n1 temp]=size(vecF1); | ||
| 3 | [n2 temp]=size(vecF2); | ||
| 4 | |||
| 5 | retMatch=zeros(0,2); | ||
| 6 | |||
| 7 | for i=1:n1 | ||
| 8 | [val id]=sort(dist2(vecF1(i,:),vecF2)); | ||
| 9 | if val(2)~=0 & val(1)/val(2)<0.65 | ||
| 10 | retMatch=[retMatch; i id(1)]; | ||
| 11 | end | ||
| 12 | end | ||
| 13 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/pics/matched_base_cur.jpg b/SD-VBS/benchmarks/stitch/src/matlab/pics/matched_base_cur.jpg new file mode 100644 index 0000000..a4bd68b --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/pics/matched_base_cur.jpg | |||
| Binary files differ | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/pics/ransaced_feat.jpg b/SD-VBS/benchmarks/stitch/src/matlab/pics/ransaced_feat.jpg new file mode 100644 index 0000000..821ca11 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/pics/ransaced_feat.jpg | |||
| Binary files differ | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/printImage.m b/SD-VBS/benchmarks/stitch/src/matlab/printImage.m new file mode 100755 index 0000000..82e74f0 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/printImage.m | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | function printImage(fname, DIR_PARAM) | ||
| 2 | print('-djpeg', fullfile(DIR_PARAM, [fname '.jpg'])); | ||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/ransac.m b/SD-VBS/benchmarks/stitch/src/matlab/ransac.m new file mode 100755 index 0000000..4a3c364 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/ransac.m | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | function [retH retPntsIdx]=ransac(pntsPrev, pntsCur, k, epsilon) | ||
| 2 | [n temp]=size(pntsPrev); | ||
| 3 | pntsPrev=[pntsPrev(:,1:2) ones(n,1)]; | ||
| 4 | pntsCur=[pntsCur(:,1:2) ones(n,1)]; | ||
| 5 | |||
| 6 | inlierIdx=cell(k,1); | ||
| 7 | inlierNum=zeros(k,1); | ||
| 8 | for i=1:k | ||
| 9 | seed=randperm(n); | ||
| 10 | H=calculateH(pntsPrev(seed(1:4),:), pntsCur(seed(1:4),:)); | ||
| 11 | err=(pntsCur-transformH(H,pntsPrev)); | ||
| 12 | inlierIdx{i}=find(sum(err(:,1:2).^2,2) < epsilon); | ||
| 13 | inlierNum=length(inlierIdx{i}); | ||
| 14 | end | ||
| 15 | |||
| 16 | [v maxIdx]=max(inlierNum); | ||
| 17 | retPntsIdx=inlierIdx{maxIdx}; | ||
| 18 | retH=calculateH(pntsPrev(retPntsIdx,:), pntsCur(retPntsIdx,:)); | ||
| 19 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/readData.m b/SD-VBS/benchmarks/stitch/src/matlab/readData.m new file mode 100755 index 0000000..19643bb --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/readData.m | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | function retImgs=readData(imgName, dataDir) | ||
| 2 | fn=fullfile(dataDir, imgName, '*.jpg'); | ||
| 3 | filelist=dir(fn); | ||
| 4 | |||
| 5 | retImgs=cell(length(filelist),1); | ||
| 6 | for i=1:length(filelist) | ||
| 7 | retImgs{i}=imread(fullfile(dataDir, imgName, filelist(i).name)); | ||
| 8 | end | ||
| 9 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/script_run_profile.m b/SD-VBS/benchmarks/stitch/src/matlab/script_run_profile.m new file mode 100755 index 0000000..f2ca68b --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/script_run_profile.m | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | function script_run_profile(dataDir, resultDir, type, common, toolDir) | ||
| 2 | |||
| 3 | path(path, common); | ||
| 4 | image_list = 1; | ||
| 5 | |||
| 6 | elapsed = zeros(1,2); | ||
| 7 | for i=1:image_list | ||
| 8 | Icur = readImage([dataDir, '/', num2str(i) ,'.bmp']); | ||
| 9 | rows = size(Icur,1); | ||
| 10 | cols = size(Icur,2); | ||
| 11 | fprintf(1,'Input size\t\t- (%dx%d)\n', rows, cols); | ||
| 12 | |||
| 13 | %% Self check params | ||
| 14 | tol = 1; | ||
| 15 | |||
| 16 | %% Timing | ||
| 17 | start = photonStartTiming; | ||
| 18 | |||
| 19 | [x y v]=harris(Icur,dataDir); | ||
| 20 | interestPntsCur=getANMS(x, y, v, 24, dataDir); | ||
| 21 | Fcur=extractFeatures(Icur, interestPntsCur(:,1), interestPntsCur(:,2), dataDir); | ||
| 22 | |||
| 23 | %% Timing | ||
| 24 | stop = photonEndTiming; | ||
| 25 | |||
| 26 | temp = photonReportTiming(start, stop); | ||
| 27 | elapsed(1) = elapsed(1) + temp(1); | ||
| 28 | elapsed(2) = elapsed(2) + temp(2); | ||
| 29 | |||
| 30 | |||
| 31 | end | ||
| 32 | |||
| 33 | %% Self checking | ||
| 34 | fWriteMatrix(Fcur, dataDir); | ||
| 35 | |||
| 36 | %% Timing | ||
| 37 | photonPrintTiming(elapsed); | ||
| 38 | |||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/showInterestPoints.m b/SD-VBS/benchmarks/stitch/src/matlab/showInterestPoints.m new file mode 100755 index 0000000..487cae4 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/showInterestPoints.m | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | function showInterestPoints(im, x, y) | ||
| 2 | % show 'em | ||
| 3 | imagesc(im); | ||
| 4 | colormap(gray); | ||
| 5 | hold on; | ||
| 6 | plot(x,y,'r.'); | ||
| 7 | hold off; \ No newline at end of file | ||
diff --git a/SD-VBS/benchmarks/stitch/src/matlab/transformH.m b/SD-VBS/benchmarks/stitch/src/matlab/transformH.m new file mode 100755 index 0000000..7a22eb8 --- /dev/null +++ b/SD-VBS/benchmarks/stitch/src/matlab/transformH.m | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | function retPnts=transformH(H, pnts) | ||
| 2 | MAX_LIMIT=10000000; | ||
| 3 | [n temp]=size(pnts); | ||
| 4 | |||
| 5 | pntsT = pnts'; | ||
| 6 | retPnts=(H*pntsT)'; | ||
| 7 | for i=1:n | ||
| 8 | if retPnts(i,3)~=0 | ||
| 9 | retPnts(i,:)=retPnts(i,:)./retPnts(i,3); | ||
| 10 | else | ||
| 11 | retPnts(i,:)=[MAX_LIMIT MAX_LIMIT 1]; | ||
| 12 | end | ||
| 13 | end | ||
