From: <dk...@us...> - 2009-08-13 22:34:19
|
Revision: 1026 http://panotools.svn.sourceforge.net/panotools/?rev=1026&view=rev Author: dkg5 Date: 2009-08-13 22:34:11 +0000 (Thu, 13 Aug 2009) Log Message: ----------- tilt parameter from ptmender script is passed to tilt stack function Modified Paths: -------------- branches/libpano_gsoc2009_mosaic/PTcommon.c branches/libpano_gsoc2009_mosaic/math.c branches/libpano_gsoc2009_mosaic/tools/wall2.txt Modified: branches/libpano_gsoc2009_mosaic/PTcommon.c =================================================================== --- branches/libpano_gsoc2009_mosaic/PTcommon.c 2009-08-13 04:39:45 UTC (rev 1025) +++ branches/libpano_gsoc2009_mosaic/PTcommon.c 2009-08-13 22:34:11 UTC (rev 1026) @@ -489,13 +489,13 @@ //The "inverse" transform allows us to map pixel coordinates in each source image //to their location in the output image. - printf("calling from getROI\n"); + //printf("calling from getROI\n"); SetInvMakeParams(invstack, &mpinv, &(aP->im), &(aP->pano), color); finvD.func = execute_stack_new; finvD.param = invstack; //Dev: - printf("getROI - after execute new stack, mpinv.vertical is %f\n",mpinv.vertical); + //printf("getROI - after execute new stack, mpinv.vertical is %f\n",mpinv.vertical); //iterate over edges of input image and compute left/right/top/bottom-most coordinate @@ -544,9 +544,11 @@ if (ROIRect->right > (TrPtr->dest->width-1)) ROIRect->right = TrPtr->dest->width-1; if (ROIRect->bottom > (TrPtr->dest->height-1)) ROIRect->bottom = TrPtr->dest->height-1; - //printf("ROI: %d,%d - %d, %d\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); + printf("************************FINISHED getROI*******************************\n"); + printf("************************FINISHED getROI*******************************\n"); + printf("ROI: %d,%d - %d, %d\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); //Dev: - printf("getROI - end of function, mpinv.vertical is %f\n",mpinv.vertical); + //printf("getROI - end of function, mpinv.vertical is %f\n",mpinv.vertical); } Modified: branches/libpano_gsoc2009_mosaic/math.c =================================================================== --- branches/libpano_gsoc2009_mosaic/math.c 2009-08-13 04:39:45 UTC (rev 1025) +++ branches/libpano_gsoc2009_mosaic/math.c 2009-08-13 22:34:11 UTC (rev 1026) @@ -248,6 +248,13 @@ #define var1 ((double*)params)[1] #define mp ((struct MakeParams*)params) +//Dev: Create a #define similar to shift, but for the tilt parameter +#define tiltangle (*((double*)params)) +// The reason this #define works is that when a stack function is called, the last argument +// passed is a void * to an element of a makeparams structure containing the relevant parameter, +// e.g. mp->vertical or mp->tilt in my case + + // execute a stack of functions stored in stack // called in morpher.c by InterpolateTrianglesPerspective(). params set to the array name for @@ -305,7 +312,7 @@ { // params: double 180degree_turn(screenpoints), double turn(screenpoints); - printf( "Entered rotate_erect function \n"); + //printf( "Entered rotate_erect function \n"); *x_src = x_dest + var1; while( *x_src < - var0 ) @@ -331,7 +338,7 @@ register double rs, rd, f, scale; int iter = 0; - printf( "Entered inv_radial function \n"); + //printf( "Entered inv_radial function \n"); rd = (sqrt( x_dest*x_dest + y_dest*y_dest )) / ((double*)params)[4]; // Normalized rs = rd; @@ -391,7 +398,7 @@ int resize( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { // params: double scale_horizontal, double scale_vertical; - printf( "Entered resize function \n"); + //printf( "Entered resize function \n"); *x_src = x_dest * var0; *y_src = y_dest * var1; return 1; @@ -400,7 +407,7 @@ int shear( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { // params: double shear_horizontal, double shear_vertical; - printf( "Entered shear function \n"); + //printf( "Entered shear function \n"); *x_src = x_dest + var0 * y_dest; *y_src = y_dest + var1 * x_dest; return 1; @@ -409,7 +416,7 @@ int horiz( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { // params: double horizontal shift - printf( "Entered horiz function \n"); + //printf( "Entered horiz function \n"); *x_src = x_dest + shift; *y_src = y_dest; return 1; @@ -421,12 +428,11 @@ { // params: double vertical shift - printf("mp->vertical value passed to VERT function: %f\n", mp->vertical); - printf("shift value passed to VERT function: %f\n", shift); + //printf("shift value passed to VERT function: %f\n", shift); *x_src = x_dest; *y_src = y_dest + shift; - printf( "Entered vert function \n"); + //printf( "Entered vert function \n"); return 1; } // ==============END ORIGINAL VERT() FUNCTION @@ -524,70 +530,61 @@ int tilt( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - printf( "Entered tilt function \n"); - printf("Tilt value passed: %f\n", mp->tilt); - printf("Vertical shift value passed to TILT function: %f\n", mp->vertical); - - // params: double - double theta = 0.523599; // 30 degrees in radians - //double theta = 0.174532925; // 10 degrees in radians - //double theta = 0.0523598776; // 3 degrees in radians - //double theta = 0.087; // small angle in radians - double v[3]; // 3D projective coordinate vector - double m_tilt[3][3]; // tilt matrix - double ymax, z0, z1, FOV; - - // TILT to STRAIGHT matrix (matrix 2 in MATLAB) -// m_slant[0][0] = 1; m_slant[0][1] = 0; m_slant[0][2] = 0; -// m_slant[1][0] = 0; m_slant[1][1] = 1/cos(theta); m_slant[1][2] = 0; -// m_slant[2][0] = 0; m_slant[2][1] = sin(theta)/cos(theta); m_slant[2][2] = 1; - - - // STRAIGHT to TILT matrix (tilt2() in MATLAB) - m_tilt[0][0] = 1; m_tilt[0][1] = 0; m_tilt[0][2] = 0; - m_tilt[1][0] = 0; m_tilt[1][1] = cos(theta); m_tilt[1][2] = 0; - m_tilt[2][0] = 0; m_tilt[2][1] = -sin(theta); m_tilt[2][2] = 1; - - - // identity matrix, for testing purposes: -// m_tilt[0][0] = 1; m_tilt[0][1] = 0; m_tilt[0][2] = 0; -// m_tilt[1][0] = 0; m_tilt[1][1] = 1; m_tilt[1][2] = 0; -// m_tilt[2][0] = 0; m_tilt[2][1] = 0; m_tilt[2][2] = 1; - - - // Parameters for minigrid image -// ymax = 5.5; // max pixel coordinate for minigrid image -// FOV = DEG_TO_RAD(30); // FOV for minigrid image -// z0 = ymax/tan(FOV/2); // FOV is full angle FOV in degrees +// //printf( "Entered tilt function \n"); +// //printf("Tilt value passed: %f\n", tiltangle); +// +// // params: double +// double theta = 0.523599; // 30 degrees in radians +// //double theta = 0.174532925; // 10 degrees in radians +// //double theta = 0.0523598776; // 3 degrees in radians +// //double theta = 0.087; // small angle in radians +// theta = DEG_TO_RAD(tiltangle); // use the tilt angle specified by the 'L' parameter +// double v[3]; // 3D projective coordinate vector +// double m_tilt[3][3]; // tilt matrix +// double ymax, z0, z1, FOV; +// +// // STRAIGHT to TILT matrix (tilt2() in MATLAB) +// m_tilt[0][0] = 1; m_tilt[0][1] = 0; m_tilt[0][2] = 0; +// m_tilt[1][0] = 0; m_tilt[1][1] = cos(theta); m_tilt[1][2] = 0; +// m_tilt[2][0] = 0; m_tilt[2][1] = -sin(theta); m_tilt[2][2] = 1; +// +// +// // identity matrix, for testing purposes: +//// m_tilt[0][0] = 1; m_tilt[0][1] = 0; m_tilt[0][2] = 0; +//// m_tilt[1][0] = 0; m_tilt[1][1] = 1; m_tilt[1][2] = 0; +//// m_tilt[2][0] = 0; m_tilt[2][1] = 0; m_tilt[2][2] = 1; +// +// +// // Parameters for minigrid image +//// ymax = 5.5; // max pixel coordinate for minigrid image +//// FOV = DEG_TO_RAD(30); // FOV for minigrid image +//// z0 = ymax/tan(FOV/2); // FOV is full angle FOV in degrees +//// // z0 is distance to image from center of projection +//// // replace with distance param?? +// +// // Parameters for wall image +// ymax = 375; // max pixel coordinate for wall image +// // this value is entered manually. +// // where does this value come from?? +// //FOV = DEG_TO_RAD(25.3607669836396); // FOV for wall image +// FOV = DEG_TO_RAD(26); // FOV for wall image +// z0 = ymax/tan(FOV/2); // FOV is full angle FOV in radians // // z0 is distance to image from center of projection -// // replace with distance param?? - - // Parameters for wall image - ymax = 375; // max pixel coordinate for wall image - // this value is entered manually. - // where does this value come from?? - //FOV = DEG_TO_RAD(25.3607669836396); // FOV for wall image - FOV = DEG_TO_RAD(26); // FOV for wall image - z0 = ymax/tan(FOV/2); // FOV is full angle FOV in radians - // z0 is distance to image from center of projection - // replace with distance param?? +// // replace with distance param?? +// +// //printf("z0 is %f \n", z0); +// // Now you have [x_dest, y_dest, z1]'. Multiply that vector by M, the adjusted tilt matrix +// v[0] = x_dest; +// v[1] = y_dest; +// v[2] = z0; +// +// matrix_mult(m_tilt,v); +// *x_src = z0 * v[0] / v[2]; // convert back to cartesian coordinates +// *y_src = z0 * v[1] / v[2]; - - //z0 = 1667.618212; // distance param for image - //z1 = z0 - y_dest *tan(theta); - printf("z0 is %f \n", z0); - // Now you have [x_dest, y_dest, z1]'. Multiply that vector by M, the adjusted tilt matrix - v[0] = x_dest; - v[1] = y_dest; - v[2] = z0; - - matrix_mult(m_tilt,v); - *x_src = z0 * v[0] / v[2]; // convert back to cartesian coordinates - *y_src = z0 * v[1] / v[2]; - - // Uncommenting code below causes tilt function to do nothing.: -// *x_src = x_dest; -// *y_src = y_dest; + // Uncommenting code below causes tilt function to do nothing: + *x_src = x_dest; + *y_src = y_dest; return 1; @@ -599,7 +596,7 @@ // params: double coefficients[4], scale, correction_radius register double r, scale; - printf( "Entered radial function \n"); + //printf( "Entered radial function \n"); r = (sqrt( x_dest*x_dest + y_dest*y_dest )) / ((double*)params)[4]; if( r < ((double*)params)[5] ) { @@ -619,7 +616,7 @@ // params: double coefficients[4] register double r, scale; - printf( "Entered vertical function \n"); + //printf( "Entered vertical function \n"); r = y_dest / ((double*)params)[4]; if( r < 0.0 ) r = -r; @@ -637,7 +634,7 @@ // params: double coefficients[4] register double r, scale; - printf( "Entered deregister function \n"); + //printf( "Entered deregister function \n"); r = y_dest / ((double*)params)[4]; if( r < 0.0 ) r = -r; @@ -659,7 +656,7 @@ register double theta,s,r; double v[3]; - printf( "Entered persp_sphere function \n"); + //printf( "Entered persp_sphere function \n"); #if 0 // old theta = sqrt( x_dest * x_dest + y_dest * y_dest ) / *((double*) ((void**)params)[1]); phi = atan2( y_dest , x_dest ); @@ -705,7 +702,7 @@ // params : double Matrix[3][3], double distanceparam, double x-offset, double y-offset double v[3]; - printf( "Entered persp_rect function \n"); + //printf( "Entered persp_rect function \n"); v[0] = x_dest + *((double*) ((void**)params)[2]); v[1] = y_dest + *((double*) ((void**)params)[3]); v[2] = *((double*) ((void**)params)[1]); @@ -721,7 +718,7 @@ int rect_pano( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { - printf( "Entered rect_pano function \n"); + //printf( "Entered rect_pano function \n"); *x_src = distanceparam * tan( x_dest / distanceparam ) ; *y_src = y_dest / cos( x_dest / distanceparam ); return 1; @@ -729,7 +726,7 @@ int pano_rect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { - printf( "Entered pano_rect function \n"); + //printf( "Entered pano_rect function \n"); *x_src = distanceparam * atan ( x_dest / distanceparam ); *y_src = y_dest * cos( *x_src / distanceparam ); return 1; @@ -740,7 +737,7 @@ // params: double distanceparam register double phi, theta; - printf( "Entered rect_erect function \n"); + //printf( "Entered rect_erect function \n"); phi = x_dest / distanceparam; theta = - y_dest / distanceparam + PI / 2.0; if(theta < 0) @@ -792,7 +789,7 @@ int pano_erect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: double distanceparam - printf( "Entered pano_erect function \n"); + //printf( "Entered pano_erect function \n"); *x_src = x_dest; *y_src = distanceparam * tan( y_dest / distanceparam); return 1; @@ -801,7 +798,7 @@ int erect_pano( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: double distanceparam - printf( "Entered erect_pano function \n"); + //printf( "Entered erect_pano function \n"); *x_src = x_dest; *y_src = distanceparam * atan( y_dest / distanceparam); return 1; @@ -812,7 +809,7 @@ { // params: distanceparam double phi, lambda,k1; - printf( "Entered lambertazimuthal_erect function \n"); + //printf( "Entered lambertazimuthal_erect function \n"); lambda = x_dest/distanceparam; phi = y_dest/distanceparam; @@ -835,7 +832,7 @@ { double x, y, ro,c; - printf( "Entered erect_lambertazimuthal function \n"); + //printf( "Entered erect_lambertazimuthal function \n"); x = x_dest/distanceparam; y = y_dest/distanceparam; @@ -878,7 +875,7 @@ int mercator_erect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam - printf( "Entered mercator_erect function \n"); + //printf( "Entered mercator_erect function \n"); *x_src = x_dest; *y_src = distanceparam*log(tan(y_dest/distanceparam)+1/cos(y_dest/distanceparam)); return 1; @@ -888,7 +885,7 @@ int erect_mercator( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam - printf( "Entered erect_mercator function \n"); + //printf( "Entered erect_mercator function \n"); *x_src = x_dest; *y_src = distanceparam*atan(sinh(y_dest/distanceparam)); return 1; @@ -901,7 +898,7 @@ // params: distanceparam double phi; - printf( "Entered millercylindrical_erect function \n"); + //printf( "Entered millercylindrical_erect function \n"); *x_src = x_dest; phi = y_dest/distanceparam; @@ -915,7 +912,7 @@ // params: distanceparam double phi; - printf( "Entered arch_erect function \n"); + //printf( "Entered arch_erect function \n"); phi = y_dest/distanceparam; if (phi < 0) { millercylindrical_erect(x_dest, y_dest, x_src, y_src, params); @@ -932,7 +929,7 @@ // params: distanceparam double y; - printf( "Entered erect_arch function \n"); + //printf( "Entered erect_arch function \n"); y = y_dest/distanceparam; if (y < 0) { erect_millercylindrical(x_dest, y_dest, x_src, y_src, params); @@ -949,7 +946,7 @@ int erect_millercylindrical( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { double y; - printf( "Entered erect_millercylindrical function \n"); + //printf( "Entered erect_millercylindrical function \n"); *x_src = x_dest; y = y_dest/distanceparam; @@ -967,7 +964,7 @@ double phi, lambdaHalf, temp,y,x; - printf( "Entered panini_erect function \n"); + //printf( "Entered panini_erect function \n"); phi = y_dest/distanceparam; lambdaHalf = x_dest/ (distanceparam*2); x = 2 * tan (lambdaHalf); @@ -998,7 +995,7 @@ double lambda; double phi; - printf( "Entered erect_panini function \n"); + //printf( "Entered erect_panini function \n"); y = y_dest/distanceparam; x = x_dest/distanceparam; lambda = atan(x/2); @@ -1025,7 +1022,7 @@ // this is the inverse double phi, lambdaHalf, temp,y,x; - printf( "Entered equipanini_erect function \n"); + //printf( "Entered equipanini_erect function \n"); phi = y_dest/distanceparam; lambdaHalf = x_dest/ (distanceparam*2); x = 2 * tan (lambdaHalf); @@ -1053,7 +1050,7 @@ double lambda; double phi; - printf( "Entered erect_equipanini function \n"); + //printf( "Entered erect_equipanini function \n"); y = y_dest/distanceparam; x = x_dest/distanceparam; lambda = atan(x/2); @@ -1076,7 +1073,7 @@ int lambert_erect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam - printf( "Entered lambert_erect function \n"); + //printf( "Entered lambert_erect function \n"); *x_src = x_dest; *y_src = distanceparam*sin(y_dest/distanceparam); return 1; @@ -1086,7 +1083,7 @@ int erect_lambert( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam - printf( "Entered erect_lambert function \n"); + //printf( "Entered erect_lambert function \n"); *x_src = x_dest; *y_src = distanceparam*asin(y_dest/distanceparam); return 1; @@ -1576,7 +1573,7 @@ register double phi, theta, r,s; double v[3]; - printf( "Entered sphere_tp_erect function \n"); + //printf( "Entered sphere_tp_erect function \n"); phi = x_dest / distanceparam; theta = - y_dest / distanceparam + PI / 2; if(theta < 0) @@ -1644,7 +1641,7 @@ // params: double distanceparam register double rho, theta,r; - printf( "Entered rect_sphere_tp function \n"); + //printf( "Entered rect_sphere_tp function \n"); #if 0 theta = sqrt( x_dest * x_dest + y_dest * y_dest ) / distanceparam; phi = atan2( y_dest , x_dest ); @@ -1692,7 +1689,7 @@ // params: double distanceparam register double theta, r; - printf( "Entered sphere_tp_rect function \n"); + //printf( "Entered sphere_tp_rect function \n"); #if 0 theta = atan( sqrt(x_dest*x_dest + y_dest*y_dest) / *((double*)params)); phi = atan2( y_dest , x_dest ); @@ -1810,7 +1807,7 @@ int erect_rect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: double distanceparam - printf( "Entered erect_rect function \n"); + //printf( "Entered erect_rect function \n"); #if 0 theta = atan( sqrt(x_dest*x_dest + y_dest*y_dest) / distanceparam ); phi = atan2( y_dest , x_dest ); @@ -1987,7 +1984,7 @@ register double theta,r,s; double v[3]; - printf( "Entered erect_sphere_tp function \n"); + //printf( "Entered erect_sphere_tp function \n"); #if 0 theta = sqrt( x_dest * x_dest + y_dest * y_dest ) / *((double*)params); phi = atan2( y_dest , x_dest ); Modified: branches/libpano_gsoc2009_mosaic/tools/wall2.txt =================================================================== --- branches/libpano_gsoc2009_mosaic/tools/wall2.txt 2009-08-13 04:39:45 UTC (rev 1025) +++ branches/libpano_gsoc2009_mosaic/tools/wall2.txt 2009-08-13 22:34:11 UTC (rev 1026) @@ -4,5 +4,5 @@ m g1 i0 f0 m2 p0.00784314 # output image lines -o w750 h500 f0 a0 b0 c0 d0 e0.1234 g0 L56.78 p0 r0 t0 v25.3607669836396 y0 u10 m0 n"/home/demo/dev/gsoclibpano13/tools/wall.jpg" +o w750 h500 f0 a0 b0 c0 d0 e50 g0 L0 p0 r0 t0 v25.3607669836396 y0 u10 m0 n"/home/demo/dev/gsoclibpano13/tools/wall.jpg" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |