1 #include "DataandMorphing.h"
7 static CvMatrix3 matrix;
10 static IplImage* datares = 0;
16 static uchar* buffer_1;
17 static uchar* buffer_2;
18 static uchar* morph_buffer;
21 static int* num_runs_1;
22 static int* num_runs_2;
27 static int* lens_1, *lens_2;
29 static int* morph_lens;
32 ///////////////////////////////////////////////////////////////////////////////
33 int MemoryAllocation()
36 cvMakeScanlines( &matrix, imgsize, 0, 0, 0, 0, &numlines);
38 scanlines_1 = (int*)(calloc( numlines * 2, sizeof(int) * 4));
39 scanlines_2 = (int*)(calloc( numlines * 2, sizeof(int) * 4));
40 scanlines_a = (int*)(calloc( numlines * 2, sizeof(int) * 4));
42 lens_1 = (int*)(calloc( numlines * 2, sizeof(int)*4));
43 lens_2 = (int*)(calloc( numlines * 2, sizeof(int)*4));
44 morph_lens = (int*)(calloc( numlines * 2, sizeof(int)*4));
46 runs_1 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
47 runs_2 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
49 corr_1 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
50 corr_2 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
52 num_runs_1 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
53 num_runs_2 = (int*)(calloc(imgsize.width * imgsize.height * 2, 2 * sizeof(int)));
55 buffer_1 = (uchar*)(malloc(imgsize.width * (imgsize.height+1) * 2 * sizeof(int)));
57 buffer_2 = (uchar*)(malloc(imgsize.width * (imgsize.height+1) * 2 * sizeof(int)));
59 morph_buffer = (uchar*)(calloc(imgsize.width * (imgsize.height+1), 2 * sizeof(int)));
63 ///////////////////////////////////////////////////////////////////////////////////
64 int loaddata (Tcl_Interp *interp)
68 //datal = cvvLoadImage(
76 cvReleaseImage( &datares );
78 datares = cvCreateImage( cvSize( tx, ty ), IPL_DEPTH_8U, 3 );
80 if(tx !=tx1 || ty != ty1) return 2;
82 Tcl_Eval(interp, "readini $var FundMatrix {F[0][0]}");
83 (matrix).m[0][0] = (float)atof( (*interp).result );
85 Tcl_Eval(interp, "readini $var FundMatrix {F[0][1]}");
86 (matrix).m[0][1] = (float)atof( (*interp).result );
88 Tcl_Eval(interp, "readini $var FundMatrix {F[0][2]}");
89 (matrix).m[0][2] = (float)atof( (*interp).result );
91 Tcl_Eval(interp, "readini $var FundMatrix {F[1][0]}");
92 (matrix).m[1][0] = (float)atof( (*interp).result );
94 Tcl_Eval(interp, "readini $var FundMatrix {F[1][1]}");
95 (matrix).m[1][1] = (float)atof( (*interp).result );
97 Tcl_Eval(interp, "readini $var FundMatrix {F[1][2]}");
98 (matrix).m[1][2] = (float)atof( (*interp).result );
100 Tcl_Eval(interp, "readini $var FundMatrix {F[2][0]}");
101 (matrix).m[2][0] = (float)atof( (*interp).result );
103 Tcl_Eval(interp, "readini $var FundMatrix {F[2][1]}");
104 (matrix).m[2][1] = (float)atof( (*interp).result );
106 Tcl_Eval(interp, "readini $var FundMatrix {F[2][2]}");
107 (matrix).m[2][2] = (float)atof( (*interp).result );
112 ///////////////////////////////////////////////////////////////////////////////
113 int OnMakeMorphing(float sk,Tcl_Interp *interp)
116 IplImage *image1, *image2, *imageRes;
124 cvMakeScanlines( &matrix1, imgsize, 0, 0, 0, 0, &numScanlines);
128 cvMakeScanlines( &matrix1, imgsize, scanlines_1,
129 scanlines_2, lens_1, lens_2, &numScanlines);
131 cvPreWarpImage( numScanlines, image1, buffer_1,
132 lens_1, scanlines_1);
134 /* Prewarp second image */
135 cvPreWarpImage( numScanlines, image2,
136 buffer_2, lens_2, scanlines_2);
138 cvFindRuns( numScanlines, buffer_1, /* prewarp image */
139 buffer_2, lens_1, /* prewarp line lens in pixels */
140 lens_2, runs_1, /* first runs */
142 num_runs_1, /* number of first runs */
145 cvDynamicCorrespondMulti(
146 numScanlines, // number of scanlines
147 runs_1, // s0|w0|s1|w1|...
148 num_runs_1, // numbers of runs
151 corr_1, // s0'|e0'|s1'|e1'|...
159 cvMakeAlphaScanlines( scanlines_1,
167 cvMorphEpilinesMulti(
168 numScanlines, /* number of lines */
169 buffer_1, /* raster epilines from the first image */
170 lens_1, /* number of pixel in first line */
171 buffer_2, /* raster epilines from the second image */
172 lens_2, /* number of pixel in second line */
173 morph_buffer , /* raster epiline from the destination image */
174 /* (it's an output parameter) */
175 morph_lens, /* numbers of pixel in output line */
176 sk, /* relative position of camera */
177 runs_1, /* first sequence of runs */
178 num_runs_1, /* it's length */
179 runs_2, /* second sequence of runs */
181 corr_1, /* correspond information for the 1st seq */
182 corr_2); /* correspond information for the 2nd seq */
185 numScanlines, /* number of scanlines */
186 morph_buffer, /* source buffers */
187 morph_lens, /* lens of buffers */
188 imageRes, /* dest image */
189 scanlines_a /* scanline */
192 cvDeleteMoire( imageRes);
193 cvvShowImage( "result", imageRes );
200 //////////////////////////////////////////////////////////////////////////////////
204 if (scanlines_1 != 0) free (scanlines_1);
205 if (scanlines_2 != 0) free (scanlines_2);
206 if (scanlines_a != 0) free (scanlines_a);
208 if (lens_1 != 0) free (lens_1);
209 if (lens_2 != 0) free (lens_2);
210 if (morph_lens != 0) free (morph_lens);
212 if (buffer_1 != 0) free (buffer_1);
213 if (buffer_2 != 0) free (buffer_2);
214 if (morph_buffer != 0) free (morph_buffer);
216 if (runs_1 != 0) free (runs_1);
217 if (runs_2 != 0) free (runs_2);
219 if (corr_1 != 0) free (corr_1);
220 if (corr_2 != 0) free (corr_2);
222 if (num_runs_1 != 0) free (num_runs_1);
223 if (num_runs_2 != 0) free (num_runs_2);