From: <dm...@us...> - 2009-08-01 09:16:52
|
Revision: 1017 http://panotools.svn.sourceforge.net/panotools/?rev=1017&view=rev Author: dmg Date: 2009-08-01 09:16:46 +0000 (Sat, 01 Aug 2009) Log Message: ----------- 2009-08-01 <dm...@uv...> * parser.c: on discussion with Tom Modes I made sure that parser saves and restores the locale. Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/parser.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-08-01 02:48:16 UTC (rev 1016) +++ trunk/libpano/ChangeLog 2009-08-01 09:16:46 UTC (rev 1017) @@ -1,3 +1,8 @@ +2009-08-01 <dm...@uv...> + + * parser.c: on discussion with Tom Modes I made sure that parser + saves and restores the locale. + 2009-05-01 21:01 brunopostle * man/Makefile.am, man/PTAInterpolate.pod, man/PToptimizer.1, Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-08-01 02:48:16 UTC (rev 1016) +++ trunk/libpano/parser.c 2009-08-01 09:16:46 UTC (rev 1017) @@ -93,6 +93,22 @@ #define LINE_LENGTH 65536 +static char *oldLocale = NULL; + +void panoLocaleSave(void) +{ + char *p; + p=setlocale(LC_ALL, NULL); + oldLocale=strdup(p); + setlocale(LC_ALL, "C"); +} +void panoLocaleRestore(void) +{ + setlocale(LC_ALL,oldLocale); + free(oldLocale); +} + + // Optimizer Script parser; fill global info structure int ParseScript( char* script, AlignInfo *gl ) @@ -111,7 +127,7 @@ int n=0; // Number of parameters to optimize int numIm,numPts,nt; - setlocale(LC_ALL, "C"); + panoLocaleSave(); gl->im = NULL; gl->opt = NULL; @@ -139,7 +155,7 @@ if( gl->im == NULL || gl->opt == NULL || gl->cpt == NULL || gl->t == NULL || gl->cim == NULL ) { PrintError("Not enough memory"); - return -1; + goto fail; } // Rik's mask-from-focus hacking @@ -243,7 +259,7 @@ case IMAGE_FORMAT_FISHEYE_STEREOGRAPHIC: im->format = _stereographic; break; case IMAGE_FORMAT_FISHEYE_EQUISOLID: im->format = _equisolid; break; default: PrintError("Syntax error in script: Line %d", lineNum); - return -1; + goto fail; break; } break; @@ -389,7 +405,7 @@ if( ReadControlPoint( &(gl->cpt[numPts]), &(line[1]) ) != 0 ) { PrintError("Syntax error in script in control point 'c': Line %d", lineNum); - return -1; + goto fail; } numPts++; break; @@ -398,7 +414,7 @@ if( ReadModeDescription( &gl->sP, &(line[1]) ) != 0 ) { PrintError( "Syntax error in script in mode description 'm': line %d" , lineNum); - return -1; + goto fail; } break; @@ -456,7 +472,7 @@ if( ReadPanoramaDescription( &(gl->pano), &(gl->st), &(line[1]) ) != 0 ) { PrintError( "Syntax error in panorama description p line: %d (%s)" , lineNum,line); - return -1; + goto fail; } switch (gl->pano.format) { case PANO_FORMAT_RECTILINEAR: @@ -518,12 +534,12 @@ break; default: PrintError( "Unknown panorama projection: %d", gl->pano.format ); - return -1; + goto fail; } if( (gl->pano.format == _rectilinear || gl->pano.format == _trans_mercator) && gl->pano.hfov >= 180.0 ) { PrintError( "Destination image must have HFOV < 180" ); - return -1; + goto fail; } break; @@ -628,7 +644,12 @@ } + panoLocaleRestore(); return 0; + + fail: + panoLocaleRestore(); + return -1; } @@ -642,13 +663,13 @@ int format; int i; - setlocale(LC_ALL, "C"); - + panoLocaleSave(); + hres = (char**) mymalloc( strlen(script) + g->numIm * 600 + g->numPts * 200 + 10000 ); // Do we ever need more? if( hres == NULL ) { PrintError("Not enough memory to create resultfile"); - return; + goto fail; } line = res = *hres; line += sprintf( line, "%s", script ); @@ -870,7 +891,13 @@ PrintError("Could not write results to scriptfile"); } if( hres ) myfree( (void**)hres ); + + panoLocaleRestore(); return; + + fail: + panoLocaleRestore(); + } @@ -889,7 +916,7 @@ int seti; - setlocale(LC_ALL, "C"); + panoLocaleSave(); // Set prefs and sBuf to defaults @@ -901,7 +928,7 @@ script = LoadScript( sfile ); if( script == NULL ) - return -1; + goto fail; // Parse script @@ -932,8 +959,7 @@ if (!seto && !seti) { if( ReadImageDescription( &(p->im), &(p->sBuf), &(line[1]) ) != 0 ) { PrintError("Syntax error in i-line %d (%s)", lineNum, line); - free(script); - return -1; + goto fail; } seti = TRUE; @@ -944,8 +970,7 @@ // 'o' has priority over 'i' lines if( ReadImageDescription( &(p->im), &(p->sBuf), &(line[1]) ) != 0 ) { PrintError( "Syntax error parsing o-line %d (%s)" , lineNum, line); - free( script ); - return -1; + goto fail; } seto = TRUE; } @@ -954,8 +979,7 @@ if( ReadModeDescription( sP, &(line[1]) ) != 0 ) { PrintError( "Syntax error in m-line %d (%s)" , lineNum, line); - free( script ); - return -1; + goto fail; } break; case 'p': // panorama @@ -964,8 +988,7 @@ if( ReadPanoramaDescription( &(p->pano), &(p->sBuf), &(line[1]) ) != 0 ) { PrintError( "Syntax error in line %d" , lineNum); - free( script ); - return -1; + goto fail; } switch (p->pano.format) { case PANO_FORMAT_RECTILINEAR: @@ -1027,11 +1050,11 @@ break; default: PrintError( "Unknown panorama projection: %d", p->pano.format ); - return -1; + goto fail; } if( (p->pano.format == _rectilinear || p->pano.format == _trans_mercator) && p->pano.hfov >= 180.0 ) { PrintError( "Destination image must have HFOV < 180" ); - return -1; + goto fail; } break; @@ -1044,8 +1067,7 @@ if( ! (seto || seti) ) { PrintError( "Syntax error in scriptfile (readAdjust). It contains no 'o' line"); - free( script ); - return -1; + goto fail; } // Create and Write changed scriptfile if inserting @@ -1113,13 +1135,23 @@ if( WriteScript( script, sfile, 0 ) != 0 ) { PrintError("Could not write scriptfile"); - free( script ); - return -1; + goto fail; } } free( script); + panoLocaleRestore(); return 0; + + fail: + if (script != NULL) + free(script); + panoLocaleRestore(); + + return -1; + + + } @@ -1135,7 +1167,7 @@ int numPts; - setlocale(LC_ALL, "C"); + panoLocaleSave(); defCn.num[0] = defCn.num[1] = -1; defCn.type = 0; @@ -1659,7 +1691,8 @@ double sigma = 0; int n; - setlocale(LC_ALL, "C"); + panoLocaleSave(); + memcpy( &theSprefs, sP, sizeof(sPrefs) ); // set some default values @@ -1671,7 +1704,7 @@ { case 'g': READ_VAR( "%lf", &theSprefs.gamma ); if( theSprefs.gamma <= 0.0 ) - return -1; + goto fail; break; case 'i': READ_VAR( "%d", &theSprefs.interpolator ); if( theSprefs.interpolator < 0 || theSprefs.interpolator > 23) @@ -1700,7 +1733,13 @@ // appears ok memcpy( sP, &theSprefs, sizeof(sPrefs) ); + panoLocaleRestore(); return 0; + + fail: + panoLocaleRestore(); + return -1; + } // Parse a string desscribing VRPanoOptions @@ -1711,7 +1750,8 @@ char buf[LINE_LENGTH]; VRPanoOptions VRopt; - setlocale(LC_ALL, "C"); + panoLocaleSave(); + memcpy( &VRopt, v, sizeof( VRPanoOptions ) ); while( *ch != 0) @@ -1739,6 +1779,8 @@ } } memcpy( v, &VRopt, sizeof( VRPanoOptions ) ); + panoLocaleRestore(); + return 0; } @@ -1755,7 +1797,8 @@ int nr=0,np=0; - setlocale(LC_ALL, "C"); + panoLocaleSave(); + // Determine number of images and control points @@ -1796,20 +1839,29 @@ if( ReadCoordinates( &tP->p[np++], &(line[1]) ) != 0 ) { PrintError( "Syntax error in line %d" , lineNum); - return -1; + goto fail; } break; case 'R': // Coordinate values requested if( ReadCoordinates( &tP->r[nr++], &(line[1]) ) != 0 ) { PrintError( "Syntax error in line %d" , lineNum); - return -1; + goto fail; } break; default: break; } } + panoLocaleRestore(); + return 0; + + fail: + panoLocaleRestore(); + + return -1; + + } @@ -1863,14 +1915,14 @@ void *tmp; - setlocale(LC_ALL, "C"); + panoLocaleSave(); // Determine number of morph control points gl->numPts = numLines( script, 'C' ); if( gl->numPts == 0 ) - return 0; + goto success; // Allocate Space for Pointers to images, preferences and control points @@ -1879,7 +1931,7 @@ if( gl->cpt == NULL ) { PrintError("Not enough memory"); - return -1; + goto fail; } @@ -1906,7 +1958,7 @@ if( ReadControlPoint( &cp, &(line[1]) ) != 0 ) { PrintError( "Syntax error in line %d" , lineNum); - return -1; + goto fail; } if( cp.num[0] == nIm ) { @@ -1921,10 +1973,16 @@ tmp = realloc( gl->cpt, np * sizeof( controlPoint ) ); - if( tmp == NULL ) return -1; + if( tmp == NULL ) goto fail; gl->numPts=np; gl->cpt = (controlPoint*)tmp; + success: + panoLocaleRestore(); + return np; + fail: + panoLocaleRestore(); + return -1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-08-14 06:15:06
|
Revision: 1031 http://panotools.svn.sourceforge.net/panotools/?rev=1031&view=rev Author: dmg Date: 2009-08-14 06:14:58 +0000 (Fri, 14 Aug 2009) Log Message: ----------- 2009-08-13 <dm...@uv...> * PTcommon.c (panoCreatePanorama): Added support for uncropped TIFF_m, but only when it is not circular fisheye * tests/panoAutomateTest.pl (Compare_Images): Added support for uncropped and cropped images. * Updated tests Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c trunk/libpano/tests/panoAutomateTest.pl trunk/libpano/tests/simpleStitch/reference/tiff_m_uncropped0000.tif trunk/libpano/tests/simpleStitch/reference/tiff_m_uncropped0001.tif trunk/libpano/tests/simpleTiff16/reference/tiff_m0000.tif trunk/libpano/tests/simpleTiff16/temp.txt Added Paths: ----------- trunk/libpano/tests/simpleTiff16/reference/tiff_m_uncropped0000.tif Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-08-14 06:05:12 UTC (rev 1030) +++ trunk/libpano/ChangeLog 2009-08-14 06:14:58 UTC (rev 1031) @@ -1,3 +1,13 @@ +2009-08-13 <dm...@uv...> + + * PTcommon.c (panoCreatePanorama): Added support for uncropped + TIFF_m, but only when it is not circular fisheye + + * tests/panoAutomateTest.pl (Compare_Images): Added support for + uncropped and cropped images. + + * Updated tests + 2009-08-01 <dm...@uv...> * parser.c: on discussion with Tom Modes I made sure that parser Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-08-14 06:05:12 UTC (rev 1030) +++ trunk/libpano/PTcommon.c 2009-08-14 06:14:58 UTC (rev 1031) @@ -731,14 +731,7 @@ //to ever disable this feature, other than for testing/debugging purposes. - // By default we do cropped TIFF, - // but at this point we cannot properly calculate the ROI for fisheyes, so just - // process them uncropped. - if (prefs->im.format == _fisheye_circ) { - croppedTIFFIntermediate = 0; - } - colourCorrection = prefs->sBuf.colcorrect; // This is a strange value: // colourCorrection == (i & 3) + (i+1)*4; @@ -777,7 +770,24 @@ --tempString; /* nextWord does ++ before testing anything, this guarantess proper execution */ nextWord(output_file_format, &tempString); - if (loopCounter == 0 && strcmp(output_file_format, "TIFF_m") != 0) { + if (strcmp(output_file_format, "TIFF_m") == 0 ) { + // CHeck if we are suppose to do cropped or uncropped + croppedTIFFIntermediate = 1; + nextWord(output_file_format, &tempString); + if (strcmp(output_file_format, "") == 0 || + strcmp(output_file_format, "r:CROP") == 0 + ) { + // DO uncropped by default unless we are fisheye + if (prefs->im.format == _fisheye_circ) { + PrintError("Cropped output is unsupported for circular fisheye lenses. Ignored"); + croppedTIFFIntermediate = 0; + } + } else if (strcmp(output_file_format, "r:UNCROP") == 0) { + croppedTIFFIntermediate = 0; + } else { + PrintError("Unsupported option in TIFF_m output (%s). Ignored", output_file_format); + } + } else { PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); } Modified: trunk/libpano/tests/panoAutomateTest.pl =================================================================== --- trunk/libpano/tests/panoAutomateTest.pl 2009-08-14 06:05:12 UTC (rev 1030) +++ trunk/libpano/tests/panoAutomateTest.pl 2009-08-14 06:14:58 UTC (rev 1031) @@ -73,9 +73,10 @@ # 'tiff_none' => "TIFF c:NONE", # simple tiff output # 'tiff_lzw' => "TIFF c:LZW", # simple tiff output # 'tiff_deflate' => "TIFF c:DEFLATE", # simple tiff output -# 'tiff_m' => "TIFF_m", # + 'tiff_m' => "TIFF_m", # # 'tiff_mask' => "TIFF_mask", 'tiff_m_cropped' => "TIFF_m r:CROP", + 'tiff_m_uncropped' => "TIFF_m r:UNCROP", # 'psd' => "PSD", # 'psd_nomask' => "PSD_nomask", # 'psd_mask' => "PSD_mask", @@ -149,48 +150,20 @@ if (! $onlyTest) { Create_Script($type, $pre, $post, $outputFormat); - if ($type =~ "tiff_m") { - Remove_Images("output", "tif", $images, $destination, $type); - } else { - `rm -f $destination/$savedFile{$type}`; - } + Remove_Images("output", "tif", $images, $destination, $type); - print "Creating panorama.. please wait\n"; system ($stitcher, '-o', 'output' , 'temp.txt'); - if ($type =~ "tiff_m") { - Move_Images("output", "tif", $images, $destination, $type); - } else { - `mv -f $outputFile{$type} $destination/$savedFile{$type}`; - } + Move_Images("output", "tif", $images, $destination, $type); } if (! $createNewReferences) { my $output = ""; - if ($type =~ "tiff_m") { - $output = Compare_Images("tif", $images, "tests", "reference", $type); - } else { - - defined $savedFile{$type} || die "\$savedFile{$type} is not defined"; - - if (! -f "reference/$savedFile{$type}") { - printf("Reference file 'reference/$savedFile{$type}' does not exist\n"); - $output = "fail"; - } elsif (! -f "tests/$savedFile{$type}") { - printf("Output file tests/$savedFile{$type} was not created\n"); - $output = "fail"; - } else { - if ($savedFile{$type} =~ /\.tif/) { - $output = `tiffcmp reference/$savedFile{$type} tests/ | grep -v 'Created by Panotools'`; - } else { - $output = `diff reference/$savedFile{$type} tests/`; - } - } - } + $output = Compare_Images("tif", $images, "tests", "reference", $type); if ($output eq "") { printf "\nTest $type................................. passed\n\n"; @@ -291,3 +264,12 @@ close OUT; } + + +sub execute +{ + my ($c) = @_; + `$c`; + my $status = ($? >> 8); + die "execution of program [$c] failed: status [$status]" if ($status != 0); +} Modified: trunk/libpano/tests/simpleStitch/reference/tiff_m_uncropped0000.tif =================================================================== (Binary files differ) Modified: trunk/libpano/tests/simpleStitch/reference/tiff_m_uncropped0001.tif =================================================================== (Binary files differ) Modified: trunk/libpano/tests/simpleTiff16/reference/tiff_m0000.tif =================================================================== (Binary files differ) Added: trunk/libpano/tests/simpleTiff16/reference/tiff_m_uncropped0000.tif =================================================================== (Binary files differ) Property changes on: trunk/libpano/tests/simpleTiff16/reference/tiff_m_uncropped0000.tif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/libpano/tests/simpleTiff16/temp.txt =================================================================== --- trunk/libpano/tests/simpleTiff16/temp.txt 2009-08-14 06:05:12 UTC (rev 1030) +++ trunk/libpano/tests/simpleTiff16/temp.txt 2009-08-14 06:14:58 UTC (rev 1031) @@ -1,6 +1,6 @@ # PTStitcher script, written by hugin -p f0 w60 h297 v22 n"TIFF_m r:CROP" +p f0 w60 h297 v22 n"TIFF_m r:UNCROP" m g1 i7 f0 # output image lines This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-08-14 18:36:16
|
Revision: 1033 http://panotools.svn.sourceforge.net/panotools/?rev=1033&view=rev Author: dmg Date: 2009-08-14 18:36:07 +0000 (Fri, 14 Aug 2009) Log Message: ----------- 2009-08-14 <dm...@uv...> * Updated tests cases to reflect the slight change in the boundaries of the ROI. * adjust.c, math.c, filter.h: The inverse of shear was broken. I have added a shearInv function that takes care of this bug. * PTcommon.c (getROI): Improved its computation of its edges to make it err on the outside rather than on the inside of the actual area. I have also added code to test the inverse computations for any particular function. Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c trunk/libpano/adjust.c trunk/libpano/filter.h trunk/libpano/math.c trunk/libpano/tests/simpleStitch/reference/tiff_m0000.tif trunk/libpano/tests/simpleStitch/reference/tiff_m_cropped0000.tif trunk/libpano/tests/simpleStitch/reference/tiff_m_cropped0001.tif trunk/libpano/tests/simpleTiff16/reference/tiff_m0000.tif trunk/libpano/tests/simpleTiff16/reference/tiff_m_cropped0000.tif Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/ChangeLog 2009-08-14 18:36:07 UTC (rev 1033) @@ -1,3 +1,17 @@ +2009-08-14 <dm...@uv...> + + * Updated tests cases to reflect the slight change in the + boundaries of the ROI. + + * adjust.c, math.c, filter.h: The inverse of shear was broken. I + have added a shearInv function that takes care of this bug. + + * PTcommon.c (getROI): Improved its computation of its edges to + make it err on the outside rather than on the inside of the actual + area. I have also added code to test the inverse computations for + any particular function. + + 2009-08-13 <dm...@uv...> * PTcommon.c (panoCreatePanorama): Added support for uncropped Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/PTcommon.c 2009-08-14 18:36:07 UTC (rev 1033) @@ -30,7 +30,6 @@ #include "filter.h" #include "PTcommon.h" #include "ColourBrightness.h" - #include "pttiff.h" #include "file.h" #include "PTcommon.h" @@ -38,6 +37,7 @@ #include <assert.h> #include <float.h> +#include <math.h> //#include <stdio.h> //#include <stdlib.h> @@ -465,11 +465,16 @@ { struct MakeParams mpinv; fDesc invstack[15], finvD; +#ifndef NDEBUG + struct MakeParams mp; + fDesc stack[15], fD; +#endif int color = 0; int x, y, x_jump; double x_d, y_d; // Cartesian Coordinates of point in source (i.e. input) image double Dx, Dy; // Coordinates of corresponding point in destination (i.e. output) image + double Dx2, Dy2; // Coordinates of corresponding point in destination (i.e. output) image double w2 = (double) TrPtr->dest->width / 2.0 - 0.5; //half destination image width double h2 = (double) TrPtr->dest->height / 2.0 - 0.5; //half destination image height @@ -482,10 +487,14 @@ ROIRect->top = TrPtr->dest->height - 1; ROIRect->bottom = 0; - //The "forward" transform (although not used here) allows us to map pixel +#ifndef NDEBUG + //The "forward" transform allows us to map pixel //coordinates in the output image to their location in the source image. - //SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); - //fD.func = execute_stack; fD.param = stack; + // We use it to test the inverse functions of libpano + SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); + fD.func = execute_stack_new; + fD.param = stack; +#endif //The "inverse" transform allows us to map pixel coordinates in each source image //to their location in the output image. @@ -501,45 +510,73 @@ //needed here, but for now include some representative interior points as well. for (y = 0; y <= TrPtr->src->height; y += 1) { - x_jump = (y==0 || y==TrPtr->src->height || abs(y - TrPtr->src->height/2)<=5) ? 1 : TrPtr->src->width/2; - + x_jump = (y==0 || y==TrPtr->src->height || abs(y - TrPtr->src->height/2)<=5) ? 1 : TrPtr->src->width/2; + for (x = 0; x <= TrPtr->src->width; x += x_jump) { //convert source coordinates to cartesian coordinates (i.e. origin at center of image) x_d = (double) x - sw2 ; y_d = (double) y - sh2 ; - + //Map the source image cartesian coordinate to the destination image cartesian coordinate finvD.func( x_d, y_d, &Dx, &Dy, finvD.param); +#ifndef NDEBUG + fD.func( Dx, Dy, &Dx2, &Dy2, fD.param); + { + int newX, newY; + if (!isnan(Dx2) && !isnan(Dy2)) { + + newX = (int)(Dx2 + 0.5 + sw2); + newY = (int)(Dy2 + 0.5 + sh2); + + if (newX != x || newY != y) { + printf(" IN1: %f,%f (%d,%d) -> OUT: %f, %f inv -> %f %f (%d, %d)\n", x_d, y_d, + x,y, + Dx, Dy, Dx2, Dy2, + newX, newY + ); + } + // If this assertion fails, there is an error. The question is, how big? See the values above. + // it is possible that the error is so small that it does not matter. + assert(fabs(newX-x) <= 1.0); + assert(fabs(newY-y) <= 1.0); + } + + } + //printf(" IN1: %f,%f -> OUT: %f, %f inv -> %f %f (%d, %d)\n", x_d, y_d, Dx, Dy, Dx2, Dy2, (int)(Dx +0.5), (int)(Dy+0.5)); + //printf(" IN3: %d,%d -> OUT: %f, %f (%d, %d)\n", x, y, Dx, Dy, (int)(Dx +0.5), (int)(Dy+0.5)); +#endif + //Convert destination cartesian coordinate back to destination "screen" coordinates (i.e. origin at top left of image) Dx += w2; Dy += h2; - - //printf(" IN: %d,%d -> OUT: %f, %f (%d, %d)\n", x, y, Dx, Dy, (int)Dx, (int)Dy); - + //Expand ROI if necessary //I've observed that in some cases, the mapping function returns //a value of "-1.#IND00". This is not a number, and probably indicates //a divide by zero error somewhere in the mapping function. This should //be solved, but, for now, discard this value and keep going if (!isnan(Dx)) { - if ((int)Dx < ROIRect->left) ROIRect->left = (int)Dx; - if ((int)Dx > ROIRect->right) ROIRect->right = (int)Dx; + if ((int)Dx < ROIRect->left) ROIRect->left = (int)(Dx + 0.5); + if ((int)Dx > ROIRect->right) ROIRect->right = (int)(Dx + 0.5); } if (!isnan(Dy)){ - if ((int)Dy < ROIRect->top) ROIRect->top = (int)Dy; - if ((int)Dy > ROIRect->bottom) ROIRect->bottom = (int)Dy; + if ((int)Dy < ROIRect->top) ROIRect->top = (int)(Dy + 0.5); + if ((int)Dy > ROIRect->bottom) ROIRect->bottom = (int)(Dy + 0.5); } } } + // printf("ROI1: %ld,%ld - %ld, %ld\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); + + //Reduce ROI if it extends beyond boundaries of final panorama region if (ROIRect->left < 0) ROIRect->left =0; if (ROIRect->top < 0) ROIRect->top =0; 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("ROI2: %ld,%ld - %ld, %ld\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); } @@ -1706,7 +1743,7 @@ strcpy(outputPrefix, defaultPrefix); bzero(&croppingParms, sizeof(croppingParms)); - printf(version); + printf("%s", version); //Need enough space for a message to be returned if something goes wrong @@ -1735,7 +1772,7 @@ ptQuietFlag = 1; break; case 'h': - printf(usage); + printf("%s",usage); exit(0); default: break; @@ -1745,7 +1782,7 @@ if (filesCount < 1) { PrintError("No files specified in the command line"); - printf(usage); + printf("%s",usage); exit(0); } // Allocate memory for filenames Modified: trunk/libpano/adjust.c =================================================================== --- trunk/libpano/adjust.c 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/adjust.c 2009-08-14 18:36:07 UTC (rev 1033) @@ -793,8 +793,9 @@ printf("rot[0] %f\n", mp->rot[0]); printf("rot[1] %f\n", mp->rot[1]); printf("scale[0] %f\n", mp->rot[0]); + printf("mp->horizontal %f\n", mp->horizontal); + printf("mp->vertical %f\n", mp->vertical); */ - mp->perspect[0] = (void*)(mp->mt); mp->perspect[1] = (void*)&(mp->distance); @@ -1124,8 +1125,8 @@ } mp->scale[1] = mp->scale[0]; - mp->shear[0] = -im->cP.shear_x / im->height; - mp->shear[1] = -im->cP.shear_y / im->width; + mp->shear[0] = im->cP.shear_x / im->height; + mp->shear[1] = im->cP.shear_y / im->width; mp->scale[0] = 1.0 / mp->scale[0]; mp->scale[1] = mp->scale[0]; @@ -1147,14 +1148,22 @@ mp->perspect[0] = (void*)(mp->mt); mp->perspect[1] = (void*)&(mp->distance); - - + /* + printf("Image format %d\n", im->format); + printf("shear[0] %f\n", mp->shear[0]); + printf("shear[1] %f\n", mp->shear[1]); + printf("rot[0] %f\n", mp->rot[0]); + printf("rot[1] %f\n", mp->rot[1]); + printf("scale[0] %f\n", mp->rot[0]); + printf("mp->horizontal %f\n", mp->horizontal); + printf("mp->vertical %f\n", mp->vertical); + */ i = 0; // Stack counter // Perform radial correction if( im->cP.shear ) { - SetDesc( stack[i],shear, mp->shear ); i++; + SetDesc( stack[i],shearInv, mp->shear ); i++; } if ( im->cP.horizontal ) Modified: trunk/libpano/filter.h =================================================================== --- trunk/libpano/filter.h 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/filter.h 2009-08-14 18:36:07 UTC (rev 1033) @@ -808,6 +808,7 @@ int resize ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int shear ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); +int shearInv ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int horiz ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int vert ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int radial ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); Modified: trunk/libpano/math.c =================================================================== --- trunk/libpano/math.c 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/math.c 2009-08-14 18:36:07 UTC (rev 1033) @@ -379,6 +379,15 @@ return 1; } +int shearInv( double x_dest, double y_dest, double* x_src, double* y_src, void* params) +{ + // params: double shear_horizontal, double shear_vertical; + + *y_src = (y_dest - var1 * x_dest) / (1 - var1 * var0); + *x_src = (x_dest - var0 * *y_src); + return 1; +} + int horiz( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { // params: double horizontal shift Modified: trunk/libpano/tests/simpleStitch/reference/tiff_m0000.tif =================================================================== (Binary files differ) Modified: trunk/libpano/tests/simpleStitch/reference/tiff_m_cropped0000.tif =================================================================== --- trunk/libpano/tests/simpleStitch/reference/tiff_m_cropped0000.tif 2009-08-14 17:44:44 UTC (rev 1032) +++ trunk/libpano/tests/simpleStitch/reference/tiff_m_cropped0000.tif 2009-08-14 18:36:07 UTC (rev 1033) @@ -1,96 +1,96 @@ -II* |
From: <bru...@us...> - 2009-09-03 14:08:41
|
Revision: 1039 http://panotools.svn.sourceforge.net/panotools/?rev=1039&view=rev Author: brunopostle Date: 2009-09-03 14:08:33 +0000 (Thu, 03 Sep 2009) Log Message: ----------- Add a pkgconfig support with a libpano13.pc file (Andreas Metzler) Modified Paths: -------------- trunk/libpano/Makefile.am trunk/libpano/configure.ac Added Paths: ----------- trunk/libpano/libpano13.pc.in Modified: trunk/libpano/Makefile.am =================================================================== --- trunk/libpano/Makefile.am 2009-08-24 15:57:25 UTC (rev 1038) +++ trunk/libpano/Makefile.am 2009-09-03 14:08:33 UTC (rev 1039) @@ -94,6 +94,11 @@ noinst_HEADERS = $(INTERNAL_HDR) $(SYS_HDR) $(MAC_HDR) +# Pkg-config script. +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libpano13.pc +DISTCLEANFILES = $(pkgconfig_DATA) + SUBDIRS=m4 . tools doc build tests man distdir=lib$(PACKAGE)-$(VERSION) Modified: trunk/libpano/configure.ac =================================================================== --- trunk/libpano/configure.ac 2009-08-24 15:57:25 UTC (rev 1038) +++ trunk/libpano/configure.ac 2009-09-03 14:08:33 UTC (rev 1039) @@ -142,7 +142,7 @@ AC_FUNC_VPRINTF AC_CHECK_FUNCS([floor memset pow setlocale sqrt strrchr]) -AC_CONFIG_FILES([Makefile build/Makefile build/win32/Makefile doc/Makefile m4/Makefile tools/Makefile tests/Makefile tests/simpleStitch/Makefile tests/simpleTiff16/Makefile tests/simpleStitch/reference/Makefile tests/simpleTiff16/reference/Makefile man/Makefile]) +AC_CONFIG_FILES([Makefile build/Makefile build/win32/Makefile doc/Makefile m4/Makefile tools/Makefile tests/Makefile tests/simpleStitch/Makefile tests/simpleTiff16/Makefile tests/simpleStitch/reference/Makefile tests/simpleTiff16/reference/Makefile man/Makefile libpano13.pc]) AC_SUBST(ac_aux_dir) Added: trunk/libpano/libpano13.pc.in =================================================================== --- trunk/libpano/libpano13.pc.in (rev 0) +++ trunk/libpano/libpano13.pc.in 2009-09-03 14:08:33 UTC (rev 1039) @@ -0,0 +1,23 @@ +# Process this file with autoconf to produce a pkg-config metadata file. +# Copyright (C) 2009 Andreas Metzler + +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libpano13 +Description: cross-platform library behind Panorama Tools and many other GUI photo stitchers +URL: http://sourceforge.net/projects/panotools/ +Version: @VERSION@ +Libs: -L${libdir} -lpano13 +Libs.private: @LIB_JPEG@ @LIB_PNG@ @LIB_TIFF@ @LIB_ZLIB@ +Cflags: -I${includedir} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-09-03 17:13:38
|
Revision: 1040 http://panotools.svn.sourceforge.net/panotools/?rev=1040&view=rev Author: brunopostle Date: 2009-09-03 17:13:32 +0000 (Thu, 03 Sep 2009) Log Message: ----------- Fixes for implicit declarations (Stanislav Brabec) Modified Paths: -------------- trunk/libpano/adjust.h trunk/libpano/parser.c Modified: trunk/libpano/adjust.h =================================================================== --- trunk/libpano/adjust.h 2009-09-03 14:08:33 UTC (rev 1039) +++ trunk/libpano/adjust.h 2009-09-03 17:13:32 UTC (rev 1040) @@ -26,3 +26,4 @@ // sigma = 0 disables the m-estimator void setFcnPanoHuberSigma(double sigma); +int EvaluateControlPointErrorAndComponents (int num, double *errptr, double errComponent[2]); Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-09-03 14:08:33 UTC (rev 1039) +++ trunk/libpano/parser.c 2009-09-03 17:13:32 UTC (rev 1040) @@ -46,6 +46,7 @@ #include <locale.h> #include "ZComb.h" +#include "adjust.h" /* defined in adjust.c */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-10 06:41:28
|
Revision: 1044 http://panotools.svn.sourceforge.net/panotools/?rev=1044&view=rev Author: dmg Date: 2009-09-10 06:41:20 +0000 (Thu, 10 Sep 2009) Log Message: ----------- 2009-09-09 <dm...@uv...> * PTcommon.c, panorama.h, pt_stdint.h, math.c, adjust.c PTcommon.c, filter.h, parser.c, correct.c: Integrated Dev"s implementation of tilt, extended to support rotation of the camera before independent of roll,pitch,yaw. The new parameters are: Tx,Ty,Tz,Ts (tilt on x axis, y axis, z axis, and scaling of field of view in the transformation). Supported by PTmender and PToptimizer Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c trunk/libpano/adjust.c trunk/libpano/correct.c trunk/libpano/filter.h trunk/libpano/math.c trunk/libpano/panorama.h trunk/libpano/parser.c trunk/libpano/pt_stdint.h Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/ChangeLog 2009-09-10 06:41:20 UTC (rev 1044) @@ -1,3 +1,12 @@ +2009-09-09 <dm...@uv...> + + * PTcommon.c, panorama.h, pt_stdint.h, math.c, adjust.c + PTcommon.c, filter.h, parser.c, correct.c: Integrated Dev"s + implementation of tilt, extended to support rotation of the camera + before independent of roll,pitch,yaw. The new parameters are: + Tx,Ty,Tz,Ts (tilt on x axis, y axis, z axis, and scaling of field + of view in the transformation). Supported by PTmender and PToptimizer + 2009-09-03 17:26 brunopostle * Makefile.am, configure.ac, version.h: Bump version and soname Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/PTcommon.c 2009-09-10 06:41:20 UTC (rev 1044) @@ -27,6 +27,9 @@ * */ +#define NDEBUG + + #include "filter.h" #include "PTcommon.h" #include "ColourBrightness.h" @@ -491,6 +494,7 @@ //The "forward" transform allows us to map pixel //coordinates in the output image to their location in the source image. // We use it to test the inverse functions of libpano + printf("-------------------------------------------\n"); SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); fD.func = execute_stack_new; fD.param = stack; @@ -498,7 +502,10 @@ //The "inverse" transform allows us to map pixel coordinates in each source image //to their location in the output image. + // printf("INV-------------------------------------------\n"); SetInvMakeParams(invstack, &mpinv, &(aP->im), &(aP->pano), color); + + // printf("-------------------------------------------\n"); finvD.func = execute_stack_new; finvD.param = invstack; @@ -530,16 +537,22 @@ newY = (int)(Dy2 + 0.5 + sh2); if (newX != x || newY != y) { - printf(" IN1: %f,%f (%d,%d) -> OUT: %f, %f inv -> %f %f (%d, %d)\n", x_d, y_d, + printf(" X,Y: %7.1f,%7.1f (%5d,%5d) -> OUT: %9.1f, %9.1f inv -> %9.1f %9.1f (%5d, %5d) -- error %5d,%5d\n", + x_d, y_d, x,y, - Dx, Dy, Dx2, Dy2, - newX, newY + Dx, Dy, + Dx2, Dy2, + newX, newY, + newX - x, + newY - y ); } // If this assertion fails, there is an error. The question is, how big? See the values above. // it is possible that the error is so small that it does not matter. - assert(fabs(newX-x) <= 1.0); - assert(fabs(newY-y) <= 1.0); +/* + assert(fabs(newX-x) <= 20.0); + assert(fabs(newY-y) <= 20.0); +*/ } } @@ -576,7 +589,7 @@ 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("ROI2: %ld,%ld - %ld, %ld\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); + // printf("ROI2: %ld,%ld - %ld, %ld\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); } @@ -827,6 +840,7 @@ } else { PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); } + // croppedTIFFIntermediate = 0; Modified: trunk/libpano/adjust.c =================================================================== --- trunk/libpano/adjust.c 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/adjust.c 2009-09-10 06:41:20 UTC (rev 1044) @@ -66,6 +66,7 @@ int pt_average( UCHAR* pixel, int BytesPerLine, double rgb[3], int bytesPerChannel ); double distsqLine(int N0, int N1); + void adjust(TrformStr *TrPtr, aPrefs *prefs) { int destwidth, destheight; @@ -664,7 +665,7 @@ } mp->scale[1] = mp->scale[0]; - printf("\nOrig params: mp->distance: %lf, mp->scale: %lf\n\n", mp->distance, mp->scale[0]); + // printf("\nOrig params: mp->distance: %lf, mp->scale: %lf\n\n", mp->distance, mp->scale[0]); #endif /* Pablo d'Angelo, April 2006. @@ -779,22 +780,34 @@ } mp->scale[1] = mp->scale[0]; -// printf("new params: mp->distance: %lf, mp->scale: %lf\n\n", mp->distance, mp->scale[0]); + // printf("new params: mp->distance: %lf, mp->scale: %lf\n\n", mp->distance, mp->scale[0]); mp->shear[0] = im->cP.shear_x / image_selection_height; mp->shear[1] = im->cP.shear_y / image_selection_width; mp->rot[0] = mp->distance * PI; // 180 in screenpoints mp->rot[1] = -im->yaw * mp->distance * PI / 180.0; // rotation angle in screenpoints + + mp->tilt[0] = DEG_TO_RAD(im->cP.tilt_x); + mp->tilt[1] = DEG_TO_RAD(im->cP.tilt_y); + mp->tilt[2] = DEG_TO_RAD(im->cP.tilt_z); + mp->tilt[3] = im->cP.tilt_scale; /* - printf("Image format %d\n", im->format); + printf("Image format %d\n", (int)(im->format)); + printf("distnace %f\n", mp->distance); printf("shear[0] %f\n", mp->shear[0]); printf("shear[1] %f\n", mp->shear[1]); printf("rot[0] %f\n", mp->rot[0]); printf("rot[1] %f\n", mp->rot[1]); - printf("scale[0] %f\n", mp->rot[0]); + printf("tilt[0] %f\n", mp->tilt[0]); + printf("tilt[1] %f\n", mp->tilt[1]); + printf("tilt[2] %f\n", mp->tilt[2]); + printf("tilt[3] %f\n", mp->tilt[3]); + printf("mp->horizontal %f\n", mp->horizontal); printf("mp->vertical %f\n", mp->vertical); + printf(">>>im->cP.shear %d\n", im->cP.shear); + printf(">>>im->cP.tilt %d\n", im->cP.tilt); */ mp->perspect[0] = (void*)(mp->mt); mp->perspect[1] = (void*)&(mp->distance); @@ -928,6 +941,10 @@ case correction_mode_deregister:SetDesc(stack[i],deregister,mp->rad); i++; break; } } + if (im->cP.tilt) { + SetDesc(stack[i], tiltInverse, mp); i++; + } + if (mp->vertical != 0.0) { SetDesc(stack[i], vert, &(mp->vertical)); i++; @@ -966,6 +983,10 @@ if( aP->correct ) { printf( "Correct:\n" ); + if( aP->c_prefs.tilt ) + { + printf( "Tilt: %lg\n", mp->tilt ); + } if( aP->c_prefs.shear ) { printf( "Shear: %lg\n", mp->shear ); @@ -996,7 +1017,33 @@ #endif } +void PrintMakeParams(char *msg, struct MakeParams *mp, Image *im) +{ + printf("-------------%s\n", msg); + printf("distnace %f\n", mp->distance); + printf("shear[0] %f\n", mp->shear[0]); + printf("shear[1] %f\n", mp->shear[1]); + printf("rot[0] %f\n", mp->rot[0]); + printf("rot[1] %f\n", mp->rot[1]); + printf("tilt[0] %f\n", mp->tilt[0]); + printf("tilt[1] %f\n", mp->tilt[1]); + printf("tilt[2] %f\n", mp->tilt[2]); + printf("tilt[3] %f\n", mp->tilt[3]); + printf("mp->horizontal %f\n", mp->horizontal); + printf("mp->vertical %f\n", mp->vertical); + printf(">>>Image format %d\n", (int)im->format); + printf(">>>im->cP.shear %d\n", im->cP.shear); + printf(">>>im->cP.tilt %d\n", im->cP.tilt); + printf(">>>im->cP.tilt_x %f\n", im->cP.tilt_x); + printf(">>>im->cP.tilt_y %f\n", im->cP.tilt_y); + printf(">>>im->cP.tilt_z %f\n", im->cP.tilt_z); + printf(">>>im->cP.tilt_scale %f\n", im->cP.tilt_scale); + + +} + + // Set inverse Makeparameters depending on adjustprefs, color and source image void SetInvMakeParams( struct fDesc *stack, struct MakeParams *mp, Image *im , Image *pn, int color ) @@ -1020,7 +1067,7 @@ // dangelo: added mercator, sinusoidal and stereographic projection switch (pn->format) - { + { case _rectilinear: mp->distance = (double) pn->width / (2.0 * tan(b/2.0)); break; @@ -1069,7 +1116,7 @@ case _albersequalareaconic: mp->distance = 1.0; //albersequalareaconic_erect(1.924913116, -PI/2.0, &tx, &ty, mp); //b/2.0 - albersequalareaconic_distance(&tx, mp); + albersequalareaconic_distance(&tx, mp); mp->distance = pn->width/(2.0*tx); break; case _equisolid: @@ -1078,23 +1125,23 @@ case _orthographic: mp->distance = (double) pn->width / (2.0 * sin(b/2.0)); break; - case _biplane: - biplane_distance(pn->width,b,mp); - break; - case _triplane: - triplane_distance(pn->width,b,mp); - break; default: + case _biplane: + biplane_distance(pn->width,b,mp); + break; + case _triplane: + triplane_distance(pn->width,b,mp); + break; default: // unknown PrintError ("SetInvMakeParams: Unsupported panorama projection"); // no way to report an error back to the caller... mp->distance = 1; break; - } + } // calculate final scaling factor, that reverses the mp->distance // scaling and applies the required output scaling factor switch (im->format) - { + { case _rectilinear: // calculate distance for this projection mp->scale[0] = (double) im->width / (2.0 * tan(a/2.0)) / mp->distance; @@ -1117,17 +1164,26 @@ case _stereographic: mp->scale[0] = (double) im->width / (4.0 * tan(a/4.0)) / mp->distance; break; - default: + default: PrintError ("SetInvMakeParams: Unsupported input image projection"); // no way to report an error back to the caller... mp->scale[0] = 1; break; - } + } mp->scale[1] = mp->scale[0]; mp->shear[0] = im->cP.shear_x / im->height; mp->shear[1] = im->cP.shear_y / im->width; + //PrintMakeParams("Inverse 10", mp,im); + + mp->tilt[0] = DEG_TO_RAD(im->cP.tilt_x); + mp->tilt[1] = DEG_TO_RAD(im->cP.tilt_y); + mp->tilt[2] = DEG_TO_RAD(im->cP.tilt_z); + mp->tilt[3] = im->cP.tilt_scale; + + // PrintMakeParams("Inverse 20",mp,im); + mp->scale[0] = 1.0 / mp->scale[0]; mp->scale[1] = mp->scale[0]; mp->horizontal = -im->cP.horizontal_params[color]; @@ -1137,30 +1193,23 @@ mp->rad[5] = im->cP.radial_params[color][4]; switch( im->cP.correction_mode & 3 ) - { + { case correction_mode_radial: mp->rad[4] = ((double)(im->width < im->height ? im->width : im->height) ) / 2.0;break; case correction_mode_vertical: case correction_mode_deregister: mp->rad[4] = ((double) im->height) / 2.0;break; - } + } mp->rot[0] = mp->distance * PI; // 180 in screenpoints mp->rot[1] = im->yaw * mp->distance * PI / 180.0; // rotation angle in screenpoints mp->perspect[0] = (void*)(mp->mt); mp->perspect[1] = (void*)&(mp->distance); - /* - printf("Image format %d\n", im->format); - printf("shear[0] %f\n", mp->shear[0]); - printf("shear[1] %f\n", mp->shear[1]); - printf("rot[0] %f\n", mp->rot[0]); - printf("rot[1] %f\n", mp->rot[1]); - printf("scale[0] %f\n", mp->rot[0]); - printf("mp->horizontal %f\n", mp->horizontal); - printf("mp->vertical %f\n", mp->vertical); - */ + + // PrintMakeParams("Invert 30",mp,im); + i = 0; // Stack counter - // Perform radial correction + if( im->cP.shear ) { SetDesc( stack[i],shearInv, mp->shear ); i++; @@ -1170,10 +1219,19 @@ { SetDesc(stack[i],horiz, &(mp->horizontal)); i++; } + if ( im->cP.vertical) { SetDesc(stack[i],vert, &(mp->vertical)); i++; } + + if( im->cP.tilt ) + { + SetDesc( stack[i],tiltForward, mp ); i++; + } + + // Perform radial correction + if( im->cP.radial ) { switch( im->cP.correction_mode & 3) @@ -1215,11 +1273,11 @@ //SetDesc(stack[i], sphere_tp_stereographic, &(mp->distance) ); i++; // Convert stereographic to spherical } - + SetDesc( stack[i], persp_sphere, mp->perspect ); i++; // Perspective Control spherical Image SetDesc( stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical image to equirect. SetDesc( stack[i], rotate_erect, mp->rot ); i++; // Rotate equirect. image horizontally - + // THESE ARE ALL FORWARD transforms if(pn->format == _rectilinear) // rectilinear panorama { SetDesc(stack[i], rect_erect, &(mp->distance) ); i++; // Convert equirectangular to rectilinear @@ -2412,6 +2470,24 @@ if( k == 1 ){ g->im[i].cP.vertical_params[0] = x[j++]; }else{ g->im[i].cP.vertical_params[0] = g->im[k-2].cP.vertical_params[0];} } + // tilt + if( (k = g->opt[i].tiltX) > 0 ){ + if( k == 1 ){ g->im[i].cP.tilt_x = x[j++]; + }else{ g->im[i].cP.tilt_x = g->im[k-2].cP.tilt_x;} + } + if( (k = g->opt[i].tiltY) > 0 ){ + if( k == 1 ){ g->im[i].cP.tilt_y = x[j++]; + }else{ g->im[i].cP.tilt_y = g->im[k-2].cP.tilt_y;} + } + if( (k = g->opt[i].tiltZ) > 0 ){ + if( k == 1 ){ g->im[i].cP.tilt_z = x[j++]; + }else{ g->im[i].cP.tilt_z = g->im[k-2].cP.tilt_z;} + } + if( (k = g->opt[i].tiltScale) > 0 ){ + if( k == 1 ){ g->im[i].cP.tilt_scale = x[j++]; + }else{ g->im[i].cP.tilt_scale = g->im[k-2].cP.tilt_scale;} + } + //shear if( (k = g->opt[i].shear_x) > 0 ){ if( k == 1 ){ g->im[i].cP.shear_x = x[j++]; }else{ g->im[i].cP.shear_x = g->im[k-2].cP.shear_x;} @@ -2474,6 +2550,19 @@ if(g->opt[i].e == 1) // optimize e? 0-no 1-yes x[j++] = g->im[i].cP.vertical_params[0] ; + if(g->opt[i].tiltX == 1) { // optimize tilt_x? 0-no 1-yes + x[j++] = g->im[i].cP.tilt_x ; + } + + if(g->opt[i].tiltY == 1) // optimize tilt_y? 0-no 1-yes + x[j++] = g->im[i].cP.tilt_y ; + + if(g->opt[i].tiltZ == 1) { // optimize tilt_Z? 0-no 1-yes + x[j++] = g->im[i].cP.tilt_z ; + } + if(g->opt[i].tiltScale == 1) { // optimize tilt_scale? 0-no 1-yes + x[j++] = g->im[i].cP.tilt_scale ; + } if(g->opt[i].shear_x == 1) // optimize shear_x? 0-no 1-yes x[j++] = g->im[i].cP.shear_x ; @@ -2609,7 +2698,10 @@ void SetOptDefaults( optVars *opt ) { - opt->hfov = opt->yaw = opt->pitch = opt->roll = opt->a = opt->b = opt->c = opt->d = opt->e = opt->shear_x = opt->shear_y = 0; + opt->hfov = opt->yaw = opt->pitch = opt->roll = 0; + opt->a = opt->b = opt->c = opt->d = opt->e = 0; + opt->tiltX = opt->tiltY = 0; + opt->shear_x = opt->shear_y = 0; } void DoColorCorrection( Image *im1, Image *im2, int mode ) Modified: trunk/libpano/correct.c =================================================================== --- trunk/libpano/correct.c 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/correct.c 2009-09-10 06:41:20 UTC (rev 1044) @@ -31,6 +31,7 @@ #include "filter.h" +#include <assert.h> static void ShiftImage(TrformStr *TrPtr, int xoff, int yoff); static int getFrame( Image *im, int *xoff, int *yoff, int width, int height, int showprogress ); @@ -39,7 +40,7 @@ -void correct (TrformStr *TrPtr, cPrefs *prefs) +void correct (TrformStr *TrPtr, cPrefs *prefs) { int i=0,j,k, kstart, kend, kdone, color; @@ -67,8 +68,14 @@ src = TrPtr->src; dest = TrPtr->dest; + printf("inside Correct\n"); + + exit(1); + assert(0); // try to see when it is called + // Apply filters, if required + TrPtr->success = 1; if( prefs->luminance ) @@ -902,6 +909,13 @@ prefs->radial_params[i][k] = 0.0; prefs->lum_params[i] = 0.0; } + prefs->tilt = FALSE; + prefs->tilt_x = 0; + prefs->tilt_y = 0; + prefs->tilt_z = 0; + prefs->tilt_scale = 1; + + prefs->shear = prefs->resize = FALSE; prefs->shear_x = prefs->shear_y = 0.0; prefs->width = prefs->height = 0; Modified: trunk/libpano/filter.h =================================================================== --- trunk/libpano/filter.h 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/filter.h 2009-09-10 06:41:20 UTC (rev 1044) @@ -185,6 +185,10 @@ int e; int shear_x; int shear_y; + int tiltX; + int tiltY; + int tiltZ; + int tiltScale; }; typedef struct optVars optVars; @@ -358,6 +362,11 @@ double distance; double horizontal; double vertical; + + // Tilt + double tilt[4]; // 0 around x, 1 around y, 2 around z, 3 scaling factor + + Image *im; Image *pn; }; @@ -814,6 +823,8 @@ int radial ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int radial_brown ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); +int tiltForward ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); +int tiltInverse ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int persp_sphere ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int persp_rect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); Modified: trunk/libpano/math.c =================================================================== --- trunk/libpano/math.c 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/math.c 2009-09-10 06:41:20 UTC (rev 1044) @@ -1,4 +1,4 @@ -/* Panorama_Tools - Generate, Edit and Convert Panoramic Images +/* Panorama_Tools - Generate, Edit and Convert Panoramic Images Copyright (C) 1998,1999 - Helmut Dersch de...@fh... This program is free software; you can redistribute it and/or modify @@ -22,7 +22,7 @@ #include <float.h> #include "f2c.h" -#define R_EPS 1.0e-6 +#define R_EPS 1.0e-6 #define MAXITER 100 #include <assert.h> @@ -37,8 +37,8 @@ #define isinf(a) (_fpclass(a) == _FPCLASS_NINF || _fpclass(a) == _FPCLASS_PINF) #endif -void matrix_matrix_mult ( double m1[3][3],double m2[3][3],double result[3][3]); -int polzeros_(); +void matrix_matrix_mult ( double m1[3][3],double m2[3][3],double result[3][3]); +int polzeros_(); //------------------------- Some auxilliary math functions -------------------------------------------- @@ -90,70 +90,70 @@ void matrix_mult( double m[3][3], double vector[3] ) { - register int i; - register double v0 = vector[0]; - register double v1 = vector[1]; - register double v2 = vector[2]; - - - for(i=0; i<3; i++) - { - vector[i] = m[i][0] * v0 + m[i][1] * v1 + m[i][2] * v2; - } + register int i; + register double v0 = vector[0]; + register double v1 = vector[1]; + register double v2 = vector[2]; + + + for(i=0; i<3; i++) + { + vector[i] = m[i][0] * v0 + m[i][1] * v1 + m[i][2] * v2; + } } - + void matrix_inv_mult( double m[3][3], double vector[3] ) { - register int i; - register double v0 = vector[0]; - register double v1 = vector[1]; - register double v2 = vector[2]; - - for(i=0; i<3; i++) - { - vector[i] = m[0][i] * v0 + m[1][i] * v1 + m[2][i] * v2; - } + register int i; + register double v0 = vector[0]; + register double v1 = vector[1]; + register double v2 = vector[2]; + + for(i=0; i<3; i++) + { + vector[i] = m[0][i] * v0 + m[1][i] * v1 + m[2][i] * v2; + } } - + void matrix_matrix_mult( double m1[3][3],double m2[3][3],double result[3][3]) { - register int i,k; - - for(i=0;i<3;i++) - { - for(k=0; k<3; k++) - { - result[i][k] = m1[i][0] * m2[0][k] + m1[i][1] * m2[1][k] + m1[i][2] * m2[2][k]; - } - } + register int i,k; + + for(i=0;i<3;i++) + { + for(k=0; k<3; k++) + { + result[i][k] = m1[i][0] * m2[0][k] + m1[i][1] * m2[1][k] + m1[i][2] * m2[2][k]; + } + } } // Set matrix elements based on Euler angles a, b, c void SetMatrix( double a, double b, double c , double m[3][3], int cl ) { - double mx[3][3], my[3][3], mz[3][3], dummy[3][3]; - + double mx[3][3], my[3][3], mz[3][3], dummy[3][3]; + - // Calculate Matrices; + // Calculate Matrices; - mx[0][0] = 1.0 ; mx[0][1] = 0.0 ; mx[0][2] = 0.0; - mx[1][0] = 0.0 ; mx[1][1] = cos(a) ; mx[1][2] = sin(a); - mx[2][0] = 0.0 ; mx[2][1] =-mx[1][2] ; mx[2][2] = mx[1][1]; - - my[0][0] = cos(b); my[0][1] = 0.0 ; my[0][2] =-sin(b); - my[1][0] = 0.0 ; my[1][1] = 1.0 ; my[1][2] = 0.0; - my[2][0] = -my[0][2]; my[2][1] = 0.0 ; my[2][2] = my[0][0]; - - mz[0][0] = cos(c) ; mz[0][1] = sin(c) ; mz[0][2] = 0.0; - mz[1][0] =-mz[0][1] ; mz[1][1] = mz[0][0] ; mz[1][2] = 0.0; - mz[2][0] = 0.0 ; mz[2][1] = 0.0 ; mz[2][2] = 1.0; + mx[0][0] = 1.0 ; mx[0][1] = 0.0 ; mx[0][2] = 0.0; + mx[1][0] = 0.0 ; mx[1][1] = cos(a) ; mx[1][2] = sin(a); + mx[2][0] = 0.0 ; mx[2][1] =-mx[1][2] ; mx[2][2] = mx[1][1]; + + my[0][0] = cos(b); my[0][1] = 0.0 ; my[0][2] =-sin(b); + my[1][0] = 0.0 ; my[1][1] = 1.0 ; my[1][2] = 0.0; + my[2][0] = -my[0][2]; my[2][1] = 0.0 ; my[2][2] = my[0][0]; + + mz[0][0] = cos(c) ; mz[0][1] = sin(c) ; mz[0][2] = 0.0; + mz[1][0] =-mz[0][1] ; mz[1][1] = mz[0][0] ; mz[1][2] = 0.0; + mz[2][0] = 0.0 ; mz[2][1] = 0.0 ; mz[2][2] = 1.0; - if( cl ) - matrix_matrix_mult( mz, mx, dummy); - else - matrix_matrix_mult( mx, mz, dummy); - matrix_matrix_mult( dummy, my, m); + if( cl ) + matrix_matrix_mult( mz, mx, dummy); + else + matrix_matrix_mult( mx, mz, dummy); + matrix_matrix_mult( dummy, my, m); } @@ -161,99 +161,99 @@ void doCoordinateTransform( CoordInfo *ci, tMatrix *t ) { - double m[3][3],a,b,c; - int i; - double mx[3][3], my[3][3], mz[3][3], dummy[3][3]; - + double m[3][3],a,b,c; + int i; + double mx[3][3], my[3][3], mz[3][3], dummy[3][3]; + - // Calculate Matrices; - a = DEG_TO_RAD( t->alpha ); - b = DEG_TO_RAD( t->beta ); - c = DEG_TO_RAD( t->gamma ); + // Calculate Matrices; + a = DEG_TO_RAD( t->alpha ); + b = DEG_TO_RAD( t->beta ); + c = DEG_TO_RAD( t->gamma ); - mx[0][0] = 1.0 ; mx[0][1] = 0.0 ; mx[0][2] = 0.0; - mx[1][0] = 0.0 ; mx[1][1] = cos(a) ; mx[1][2] = sin(a); - mx[2][0] = 0.0 ; mx[2][1] =-mx[1][2] ; mx[2][2] = mx[1][1]; - - my[0][0] = cos(b); my[0][1] = 0.0 ; my[0][2] =-sin(b); - my[1][0] = 0.0 ; my[1][1] = 1.0 ; my[1][2] = 0.0; - my[2][0] = -my[0][2]; my[2][1] = 0.0 ; my[2][2] = my[0][0]; - - mz[0][0] = cos(c) ; mz[0][1] = sin(c) ; mz[0][2] = 0.0; - mz[1][0] =-mz[0][1] ; mz[1][1] = mz[0][0] ; mz[1][2] = 0.0; - mz[2][0] = 0.0 ; mz[2][1] = 0.0 ; mz[2][2] = 1.0; + mx[0][0] = 1.0 ; mx[0][1] = 0.0 ; mx[0][2] = 0.0; + mx[1][0] = 0.0 ; mx[1][1] = cos(a) ; mx[1][2] = sin(a); + mx[2][0] = 0.0 ; mx[2][1] =-mx[1][2] ; mx[2][2] = mx[1][1]; + + my[0][0] = cos(b); my[0][1] = 0.0 ; my[0][2] =-sin(b); + my[1][0] = 0.0 ; my[1][1] = 1.0 ; my[1][2] = 0.0; + my[2][0] = -my[0][2]; my[2][1] = 0.0 ; my[2][2] = my[0][0]; + + mz[0][0] = cos(c) ; mz[0][1] = sin(c) ; mz[0][2] = 0.0; + mz[1][0] =-mz[0][1] ; mz[1][1] = mz[0][0] ; mz[1][2] = 0.0; + mz[2][0] = 0.0 ; mz[2][1] = 0.0 ; mz[2][2] = 1.0; - matrix_matrix_mult( my, mz, dummy); - matrix_matrix_mult( mx, dummy, m); - - // Scale - - for(i=0; i<3; i++) - ci->x[i] *= t->scale; - - // Do shift - - for(i=0; i<3; i++) - ci->x[i] += t->x_shift[i]; - - // Do rotation -#if 0 - SetMatrix( DEG_TO_RAD( t->alpha ) , - DEG_TO_RAD( t->beta ) , - DEG_TO_RAD( t->gamma ) , - m, 0 ); + matrix_matrix_mult( my, mz, dummy); + matrix_matrix_mult( mx, dummy, m); + + // Scale + + for(i=0; i<3; i++) + ci->x[i] *= t->scale; + + // Do shift + + for(i=0; i<3; i++) + ci->x[i] += t->x_shift[i]; + + // Do rotation +#if 0 + SetMatrix( DEG_TO_RAD( t->alpha ) , + DEG_TO_RAD( t->beta ) , + DEG_TO_RAD( t->gamma ) , + m, 0 ); #endif - matrix_inv_mult( m, ci->x ); + matrix_inv_mult( m, ci->x ); } void SettMatrixDefaults( tMatrix *t ) { - int i; - - t->alpha = t->beta = t->gamma = 0.0; - for(i=0; i<3; i++) - t->x_shift[i] = 0.0; - - t->scale = 1.0; + int i; + + t->alpha = t->beta = t->gamma = 0.0; + for(i=0; i<3; i++) + t->x_shift[i] = 0.0; + + t->scale = 1.0; } - - - - + + + + //------------------------------- Transformation functions -------------------------------------------- -#define distanceparam (*((double*)params)) -#define shift (*((double*)params)) -#define var0 ((double*)params)[0] -#define var1 ((double*)params)[1] -#define mp ((struct MakeParams*)params) +#define distanceparam (*((double*)params)) +#define shift (*((double*)params)) +#define var0 ((double*)params)[0] +#define var1 ((double*)params)[1] +#define mp ((struct MakeParams*)params) // execute a stack of functions stored in stack -void execute_stack ( double x_dest, double y_dest, double* x_src, double* y_src, void* params) +void execute_stack ( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - register double xd = x_dest, - yd = y_dest; - register struct fDesc* stack = (struct fDesc *) params;; - - - while( (stack->func) != NULL ) - { + register double xd = x_dest, + yd = y_dest; + register struct fDesc* stack = (struct fDesc *) params;; + + + while( (stack->func) != NULL ) + { - (stack->func) ( xd, yd, x_src, y_src, stack->param ); - xd = *x_src; - yd = *y_src; - stack++; - } + (stack->func) ( xd, yd, x_src, y_src, stack->param ); + xd = *x_src; + yd = *y_src; + stack++; + } } - + int execute_stack_new( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { register double xd = x_dest, @@ -263,7 +263,7 @@ while( (stack->func) != NULL ) { if ( (stack->func) ( xd, yd, x_src, y_src, stack->param ) ) { - // printf("Execute stack %f %f %f %f\n", xd, yd, *x_src, *y_src); + // printf("Execute stack %f %f %f %f\n", xd, yd, *x_src, *y_src); xd = *x_src; yd = *y_src; stack++; @@ -279,17 +279,17 @@ int rotate_erect( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - // params: double 180degree_turn(screenpoints), double turn(screenpoints); + // params: double 180degree_turn(screenpoints), double turn(screenpoints); - *x_src = x_dest + var1; + *x_src = x_dest + var1; - while( *x_src < - var0 ) - *x_src += 2 * var0; + while( *x_src < - var0 ) + *x_src += 2 * var0; - while( *x_src > var0 ) - *x_src -= 2 * var0; + while( *x_src > var0 ) + *x_src -= 2 * var0; - *y_src = y_dest ; + *y_src = y_dest ; return 1; } @@ -301,61 +301,61 @@ int inv_radial( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - // params: double coefficients[4] + // params: double coefficients[4] - register double rs, rd, f, scale; - int iter = 0; + register double rs, rd, f, scale; + int iter = 0; - rd = (sqrt( x_dest*x_dest + y_dest*y_dest )) / ((double*)params)[4]; // Normalized + rd = (sqrt( x_dest*x_dest + y_dest*y_dest )) / ((double*)params)[4]; // Normalized - rs = rd; - f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + - ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; + rs = rd; + f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + + ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; - while( abs(f - rd) > R_EPS && iter++ < MAXITER ) - { - rs = rs - (f - rd) / ((( 4 * ((double*)params)[3] * rs + 3 * ((double*)params)[2]) * rs + - 2 * ((double*)params)[1]) * rs + ((double*)params)[0]); + while( abs(f - rd) > R_EPS && iter++ < MAXITER ) + { + rs = rs - (f - rd) / ((( 4 * ((double*)params)[3] * rs + 3 * ((double*)params)[2]) * rs + + 2 * ((double*)params)[1]) * rs + ((double*)params)[0]); - f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + - ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; - } + f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + + ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; + } - scale = rs / rd; -// printf("scale = %lg iter = %d\n", scale,iter); - - *x_src = x_dest * scale ; - *y_src = y_dest * scale ; + scale = rs / rd; +// printf("scale = %lg iter = %d\n", scale,iter); + + *x_src = x_dest * scale ; + *y_src = y_dest * scale ; return 1; } int inv_vertical( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - // params: double coefficients[4] + // params: double coefficients[4] - register double rs, rd, f, scale; - int iter = 0; + register double rs, rd, f, scale; + int iter = 0; - rd = abs( y_dest ) / ((double*)params)[4]; // Normalized + rd = abs( y_dest ) / ((double*)params)[4]; // Normalized - rs = rd; - f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + - ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; + rs = rd; + f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + + ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; - while( abs(f - rd) > R_EPS && iter++ < MAXITER ) - { - rs = rs - (f - rd) / ((( 4 * ((double*)params)[3] * rs + 3 * ((double*)params)[2]) * rs + - 2 * ((double*)params)[1]) * rs + ((double*)params)[0]); + while( abs(f - rd) > R_EPS && iter++ < MAXITER ) + { + rs = rs - (f - rd) / ((( 4 * ((double*)params)[3] * rs + 3 * ((double*)params)[2]) * rs + + 2 * ((double*)params)[1]) * rs + ((double*)params)[0]); - f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + - ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; - } + f = (((((double*)params)[3] * rs + ((double*)params)[2]) * rs + + ((double*)params)[1]) * rs + ((double*)params)[0]) * rs; + } - scale = rs / rd; -// printf("scale = %lg iter = %d\n", scale,iter); - - *x_src = x_dest ; - *y_src = y_dest * scale ; + scale = rs / rd; +// printf("scale = %lg iter = %d\n", scale,iter); + + *x_src = x_dest ; + *y_src = y_dest * scale ; return 1; } @@ -363,17 +363,189 @@ int resize( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { - // params: double scale_horizontal, double scale_vertical; + // params: double scale_horizontal, double scale_vertical; - *x_src = x_dest * var0; - *y_src = y_dest * var1; + *x_src = x_dest * var0; + *y_src = y_dest * var1; return 1; } +int tiltInverse( double x_dest, double y_dest, double* x_src, double* y_src, void* params) +{ + + // + // This is really the inverse transformation + + // printf( "Entered invtilt function \n"); + + + double theta = mp->tilt[0]; // use the tilt angle specified by the 'L' parameter + double sigma = mp->tilt[1]; // use the tilt angle specified by the 'L' parameter + double phi = mp->tilt[2]; + double scale = mp->tilt[3]; + double v[3]; // 3D projective coordinate vector + double m_tilt[3][3]; // tilt matrix + double m_rotate[3][3]; // tilt matrix + double xmax = mp->im->width/2; // maximum y value is image width divided by 2 + double z0, z1; + double FOV = DEG_TO_RAD(mp->im->hfov/scale); + double m_slant[3][3]; // slant matrix + + // printf("Tilt Inverse %5.2f %5.2f %5.2f, %5.2f\n", x_dest, y_dest, theta, sigma); + + // These operations are based on the typical projection of a point to a camera. + // But, we want the projection to happen without translation, so we need to subtract + // the coordinates of 0,0 projected... that is why the [1][2], [2][2] components + // of the matrix are 0 or 1 in the tilt-x and tilt-y + + + // Tilt (around X) INVERSE. The matrix does not require the [1][2], [2][2] + // because it is tilted in its center + 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; // sin(theta); + m_tilt[2][0] = 0; m_tilt[2][1] = -sin(theta); m_tilt[2][2] = 1; //cos(theta); + + // Tilt (around Y) INVERSE. + // [0][2] and [2][2] are changed to tilt on center of image. See above + m_slant[0][0] = cos(sigma); m_slant[0][1] = 0; m_slant[0][2] = 0; //-sin(sigma); + m_slant[1][0] = 0; m_slant[1][1] = 1; m_slant[1][2] = 0; + m_slant[2][0] = sin(sigma); m_slant[2][1] = 0; m_slant[2][2] = 1; //cos(sigma); + + // Slant (around z) + + // Tilt (around z) INVERSE + m_rotate[0][0] = cos(phi); m_rotate[0][1] = sin(phi); m_rotate[0][2] = 0; + m_rotate[1][0] = -sin(phi); m_rotate[1][1] = cos(phi); m_rotate[1][2] = 0; + m_rotate[2][0] = 0; m_rotate[2][1] = 0; m_rotate[2][2]= 1; + + z0 = xmax/tan(FOV/2); // FOV is full angle FOV in radians + // printf("Values Forward %5.2f %5.2f %5.2f, %5.2f\n", x_dest, y_dest, distanceparam, z0); + + // z0 is distance to image from center of projection + + //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_rotate,v); + matrix_mult(m_slant,v); + matrix_mult(m_tilt,v); + + + // Now project into xy plane + *x_src = v[0]* z0 /v[2]; + *y_src = v[1]* z0 /v[2]; + +// THIS IS THE OPTIMIZED VERSION with no matrices multiplications. .. +#ifdef OPTIMIZED + double x = x_dest; + double y = y_dest; + double above = (x * cos(phi) + y * sin(phi)) * cos (sigma); + double below1 = (x * cos(phi) + y * sin(phi)) * sin(sigma); + double below2 = - sin(theta) * (y * cos(phi) - x * sin(phi)); + double x4 = z0* above / (below1 + below2 + z0); + + above = (-x * sin (phi) + y * cos(phi)) * cos(theta); + below1 = (x * cos(phi) + y * sin(phi)) * sin (sigma); + below2 = (-x * sin(phi) + y * cos(phi)) * sin(theta); + + double y4 = z0 * above / (below1 - below2 + z0); +#endif + +// printf("x4 %6.2f x_c %6.2f\n", x4, *x_src); +// printf("x4 %6.2f x_c %6.2f\n", y4, *y_src); + + + return 1; +} + +// Dev: inverse tilt function. Substitute correct matrix for "un-tilting" +int tiltForward( double x_dest, double y_dest, double* x_src, double* y_src, void* params) +{ + // INVERSE is a misnomer --panotools ##$&^ + // This is really the forward transformation + + // printf( "Entered invtilt function \n"); + + double phi = mp->tilt[0]; // use the tilt angle specified by the 'L' parameter (already in radians) + double phi2 = mp->tilt[1]; // use the tilt angle specified by the 'L' parameter (already in radians) + double phi3 = mp->tilt[2]; + double scale = mp->tilt[3]; + + double v[3]; // 3D projective coordinate vector + double m_tilt[3][3]; // tilt matrix + double xmax = mp->im->width/2; // maximum y value is image width divided by 2 + double z0, z1, s; + double FOV = DEG_TO_RAD(mp->im->hfov/scale); + double m_slant[3][3]; // slant matrix + +// printf("Tilt Forward %5.2f %5.2f angles %5.2f, %5.2f, %5.2f\n", x_dest, y_dest, phi, phi2, phi3); + + // TILT TO STRAIGHT matrix (tilt2() in MATLAB). Really and UN-TILTING matrix + // FORWARD + 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/cos(phi); m_tilt[1][2] = 0; + m_tilt[2][0] = 0; m_tilt[2][1] = tan(phi); m_tilt[2][2] = 1; + + + m_slant[0][0] = 1/cos(phi2); m_slant[0][1] = 0; m_slant[0][2] = 0; + m_slant[1][0] = 0; m_slant[1][1] = 1; m_slant[1][2] = 0; + m_slant[2][0] = -sin(phi2)/cos(phi2); m_slant[2][1] = 0; m_slant[2][2] = 1; + + double m_rotate[3][3]; // tilt matrix + + // FORWARD + m_rotate[0][0] = cos(phi3); m_rotate[0][1] = -sin(phi3); m_rotate[0][2] = 0; + m_rotate[1][0] = sin(phi3); m_rotate[1][1] = cos(phi3); m_rotate[1][2] = 0; + m_rotate[2][0] = 0; m_rotate[2][1] = 0; m_rotate[2][2]= 1; + + + + z0 = xmax/tan(FOV/2); // FOV is full angle FOV in radians + // z0 is distance to image from center of projection + // First step, undo the projection of the point + z1 = (z0 * z0) /(x_dest * (-sin(phi2)/cos(phi2)) + y_dest * tan(phi) + z0); + + s = z1 / z0; + s = z0 /(x_dest * (-sin(phi2)/cos(phi2)) + y_dest * sin(phi)/cos(phi) + z0); + z1 = (z0* z0) /(x_dest * (-sin(phi2)/cos(phi2)) + y_dest * sin(phi)/cos(phi) + z0); + + //(y_dest * tan(phi) + x_dest * tan(phi2) + z0); + + //s = z0 / (y_dest * tan(phi) + z0); // s is a scaling factor ... + + //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] = s* x_dest; + v[1] = s* y_dest; + v[2] = z1; + + // matrix_mult(m_tilt,v); + matrix_mult(m_tilt,v); + matrix_mult(m_slant,v); + matrix_mult(m_rotate,v); + + *x_src = v[0] ; // convert back to cartesian coordinates + *y_src = v[1]; + +// printf( "Entered tiltforward function tilt z0,z1,v[21] (%f,%f, %f)\n", z0, z1, v[2]); + + // printf( "Entered invtiltb function in (%6.2f %6.2f) out (%6.2f %6.2f)\n", x_dest, y_dest, *x_src, *y_src); + + // Uncommenting code below causes tilt function to do nothing: + // *x_src = x_dest; + // *y_src = y_dest; + return 1; +} + 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"); + *x_src = x_dest + var0 * y_dest; *y_src = y_dest + var1 * x_dest; return 1; @@ -382,7 +554,9 @@ int shearInv( double x_dest, double y_dest, double* x_src, double* y_src, void* params) { // params: double shear_horizontal, double shear_vertical; + // printf( "Entered shear inv function \n"); + *y_src = (y_dest - var1 * x_dest) / (1 - var1 * var0); *x_src = (x_dest - var0 * *y_src); return 1; @@ -683,7 +857,7 @@ -/** convert from erect to mercator */ +/** convert from erect to mercator FORWARD */ int mercator_erect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam @@ -692,7 +866,7 @@ return 1; } -/** convert from mercator to erect */ +/** convert from mercator to erect INVERSE */ int erect_mercator( double x_dest,double y_dest, double* x_src, double* y_src, void* params) { // params: distanceparam Modified: trunk/libpano/panorama.h =================================================================== --- trunk/libpano/panorama.h 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/panorama.h 2009-09-10 06:41:20 UTC (rev 1044) @@ -196,6 +196,13 @@ int shear; // shear correction requested? double shear_x; // horizontal shear values double shear_y; // vertical shear values + + int tilt; // tilt correction requested? + double tilt_x; // tilt on x values + double tilt_y; // tilt on y values + double tilt_z; // tilt on z values + double tilt_scale; // scale for tilting + int resize; // scaling requested ? pt_int32 width; // new width pt_int32 height; // new height Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/parser.c 2009-09-10 06:41:20 UTC (rev 1044) @@ -326,6 +326,51 @@ } im->cP.shear = TRUE; break; + case 'T': + li++; + switch (*li) { + case 'x': + if( *(li+1) == '=' ){ + li++; + READ_VAR( "%d", &(opt->tiltX)); + opt->tiltX += 2; + }else{ + READ_VAR("%lf", &(im->cP.tilt_x)); + } + im->cP.tilt = TRUE; + break; + case 'y': + if( *(li+1) == '=' ){ + li++; + READ_VAR( "%d", &(opt->tiltY)); + opt->tiltY += 2; + }else{ + READ_VAR("%lf", &(im->cP.tilt_y)); + } + im->cP.tilt = TRUE; + break; + case 'z': + if( *(li+1) == '=' ){ + li++; + READ_VAR( "%d", &(opt->tiltZ)); + opt->tiltZ += 2; + }else{ + READ_VAR("%lf", &(im->cP.tilt_z)); + } + im->cP.tilt = TRUE; + break; + case 's': + if( *(li+1) == '=' ){ + li++; + READ_VAR( "%d", &(opt->tiltScale)); + opt->tiltScale += 2; + }else{ + READ_VAR("%lf", &(im->cP.tilt_scale)); + } + im->cP.tilt = TRUE; + break; + } + break; case 'n': // Set filename nextWord( buf, &li ); sprintf( im->name, "%s", buf ); @@ -425,43 +470,62 @@ { switch(*li) { - case 'y': READ_OPT_VAR(yaw); - break; - case 'p': READ_OPT_VAR(pitch); - break; - case 'r': READ_OPT_VAR(roll); - break; - case 'v': READ_OPT_VAR(hfov); - break; - case 'a': READ_OPT_VAR(a); - break; - case 'b': READ_OPT_VAR(b); - break; - case 'c': READ_OPT_VAR(c); - break; - case 'd': READ_OPT_VAR(d); - break; - case 'e': READ_OPT_VAR(e); - break; - case 'g': READ_OPT_VAR(shear_x); - break; - case 't': READ_OPT_VAR(shear_y); - break; - case 'X': READ_VAR( "%d", &k ); - if( k>=0 && k<gl->numIm ) - gl->cim[k].set[0] = FALSE; - break; - case 'Y': READ_VAR( "%d", &k ); - if( k>=0 && k<gl->numIm ) - gl->cim[k].set[1] = FALSE; - break; - case 'Z': READ_VAR( "%d", &k ); - if( k>=0 && k<gl->numIm ) - gl->cim[k].set[2] = FALSE; - break; - default: - li++; + case 'y': READ_OPT_VAR(yaw); + break; + case 'p': READ_OPT_VAR(pitch); + break; + case 'r': READ_OPT_VAR(roll); + break; + case 'v': READ_OPT_VAR(hfov); + break; + case 'a': READ_OPT_VAR(a); + break; + case 'b': READ_OPT_VAR(b); + break; + case 'c': READ_OPT_VAR(c); + break; + case 'd': READ_OPT_VAR(d); + break; + case 'e': READ_OPT_VAR(e); + break; + case 'g': READ_OPT_VAR(shear_x); + break; + case 't': READ_OPT_VAR(shear_y); + break; + case 'T': + li++; + switch (*li) { + case 'x': + READ_OPT_VAR(tiltX); break; + case 'y': + READ_OPT_VAR(tiltY); + break; + case 'z': + READ_OPT_VAR(tiltZ); + break; + case 's': + READ_OPT_VAR(tiltScale); + break; + } + break; + case 'S': READ_OPT_VAR(tiltY); + break; + case 'X': READ_VAR( "%d", &k ); + if( k>=0 && k<gl->numIm ) + gl->cim[k].set[0] = FALSE; + break; + case 'Y': READ_VAR( "%d", &k ); + if( k>=0 && k<gl->numIm ) + gl->cim[k].set[1] = FALSE; + break; + case 'Z': READ_VAR( "%d", &k ); + if( k>=0 && k<gl->numIm ) + gl->cim[k].set[2] = FALSE; + break; + default: + li++; + break; } } @@ -635,6 +699,12 @@ k = gl->opt[i].shear_y - 2; if( k >= 0 ) gl->im[i].cP.shear_y = gl->im[ k ].cP.shear_y; + k = gl->opt[i].tiltX - 2; + if( k >= 0 ) gl->im[i].cP.tilt_x = gl->im[ k ].cP.tilt_x; + + k = gl->opt[i].tiltY - 2; + if( k >= 0 ) gl->im[i].cP.tilt_y = gl->im[ k ].cP.tilt_y; + gl->im[i].cP.radial_params[0][0] = 1.0 - ( gl->im[i].cP.radial_params[0][3] + gl->im[i].cP.radial_params[0][2] + gl->im[i].cP.radial_params[0][1] ) ; @@ -750,16 +820,27 @@ optc = 0; line += sprintf( line, "# Image No %d:\n", i ); - line += sprintf( line, "# Yaw: %g deg (%c) Pitch: %g deg (%c) \n# Roll: %g deg (%c) HFov: %g deg (%c)\n# Polynomial Coefficients: a %f (%c); b %f (%c); c %f (%c)\n# Horizontal Shift: %f (%c) Vertical Shift: %f (%c)\n", - g->im[i].yaw, ( g->opt[i].yaw ? '*' : 'p' ), - g->im[i].pitch, ( g->opt[i].pitch ? '*' : 'p' ), - g->im[i].roll, ( g->opt[i].roll ? '*' : 'p' ), - g->im[i].hfov, ( optHfov ? '*' : 'p' ), - g->im[i].cP.radial_params[0][3], (opta ? '*':'p'), - g->im[i].cP.radial_params[0][2], (optb ? '*':'p'), - g->im[i].cP.radial_params[0][1], (optc ? '*':'p'), - g->im[i].cP.horizontal_params[0], (g->opt[i].d ? '*':'p'), - g->im[i].cP.vertical_params[0], (g->opt[i].e ? '*':'p') + line += sprintf( line, "# Yaw: %g deg (%c) Pitch: %g deg (%c) \n" +"# Roll: %g deg (%c) HFov: %g deg (%c)\n" +"# Polynomial Coefficients: a %f (%c); b %f (%c); c %f (%c)\n" +"# Horizontal Shift: %f (%c) Vertical Shift: %f (%c)\n" +"# TiltX: %f (%c) TiltY: %f (%c)\n" +"# TiltZ: %f (%c) TiltScale: %f (%c)\n", + g->im[i].yaw, ( g->opt[i].yaw ? '*' : 'p' ), + g->im[i].pitch, ( g->opt[i].pitch ? '*' : 'p' ), + g->im[i].roll, ( g->opt[i].roll ? '*' : 'p' ), + g->im[i].hfov, ( optHfov ? '*' : 'p' ), + g->im[i].cP.radial_params[0][3], (opta ? '*':'p'), + g->im[i].cP.radial_params[0][2], (optb ? '*':'p'), + g->im[i].cP.radial_params[0][1], (optc ? '*':'p'), + g->im[i].cP.horizontal_params[0], (g->opt[i].d ? '*':'p'), + g->im[i].cP.vertical_params[0], (g->opt[i].e ? '*':'p'), + // Tilt + g->im[i].cP.tilt_x, (g->opt[i].tiltX ? '*':'p'), + g->im[i].cP.tilt_y, (g->opt[i].tiltY ? '*':'p'), + g->im[i].cP.tilt_z, (g->opt[i].tiltZ ? '*':'p'), + g->im[i].cP.tilt_scale, (g->opt[i].tiltScale ? '*':'p') + ); if( opta || optb || optc ) { @@ -777,6 +858,10 @@ { line += sprintf( line, "g%f t%f ", g->im[i].cP.shear_x, g->im[i].cP.shear_y); } + if( g->im[i].cP.tilt ) + { + line += sprintf( line, "Tx%f Ty%f Tz%f Ts%f ", g->im[i].cP.tilt_x, g->im[i].cP.tilt_y, g->im[i].cP.tilt_z, g->im[i].cP.tilt_scale); + } if( g->im[i].cP.cutFrame && !( g->im[i].selection.bottom != 0 || g->im[i].selection.right != 0 )) // g->im[i].format != _fisheye_circ && g->im[i].cP.cutFrame ) { @@ -1443,6 +1528,23 @@ case 't': READ_VAR("%lf", &(im.cP.shear_y)); im.cP.shear = TRUE; break; + case 'T': + ch++; + switch (*ch) { + case 'x': READ_VAR("%lf", &(im.cP.tilt_x)); + im.cP.tilt = TRUE; + break; + case 'y': READ_VAR("%lf", &(im.cP.tilt_y)); + im.cP.tilt = TRUE; + break; + case 'z': READ_VAR("%lf", &(im.cP.tilt_z)); + im.cP.tilt = TRUE; + break; + case 's': READ_VAR("%lf", &(im.cP.tilt_scale)); + im.cP.tilt = TRUE; + break; + } + break; case '+': nextWord( buf, &ch ); PrintError("Obsolete + parameter is ignored in image description"); sprintf( sBuf.srcName, "%s", buf); Modified: trunk/libpano/pt_stdint.h =================================================================== --- trunk/libpano/pt_stdint.h 2009-09-07 20:28:26 UTC (rev 1043) +++ trunk/libpano/pt_stdint.h 2009-09-10 06:41:20 UTC (rev 1044) @@ -27,7 +27,9 @@ # else # include <stdint.h> +#ifndef INLINE #define INLINE inline +#endif # endif #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-14 18:23:28
|
Revision: 1045 http://panotools.svn.sourceforge.net/panotools/?rev=1045&view=rev Author: dmg Date: 2009-09-14 18:23:15 +0000 (Mon, 14 Sep 2009) Log Message: ----------- 2009-09-14 <dm...@uv...> * configure.ac: Added support for kfreebsd. Patch created by Debian upstream maintainer Cyril Brulebois Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/configure.ac Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-10 06:41:20 UTC (rev 1044) +++ trunk/libpano/ChangeLog 2009-09-14 18:23:15 UTC (rev 1045) @@ -1,3 +1,8 @@ +2009-09-14 <dm...@uv...> + + * configure.ac: Added support for kfreebsd. Patch created by + Debian's upstream maintainer Cyril Brulebois + 2009-09-09 <dm...@uv...> * PTcommon.c, panorama.h, pt_stdint.h, math.c, adjust.c Modified: trunk/libpano/configure.ac =================================================================== --- trunk/libpano/configure.ac 2009-09-10 06:41:20 UTC (rev 1044) +++ trunk/libpano/configure.ac 2009-09-14 18:23:15 UTC (rev 1045) @@ -27,7 +27,7 @@ HSYS=unknown HCPU="${host_cpu}" ;; - linux*) + linux*|k*bsd*) PANO_WIN32_RESOURCE= HSYS=linux dnl This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-16 19:50:14
|
Revision: 1050 http://panotools.svn.sourceforge.net/panotools/?rev=1050&view=rev Author: dmg Date: 2009-09-16 19:50:06 +0000 (Wed, 16 Sep 2009) Log Message: ----------- 2009-09-16 <dm...@uv...> * correct.c (correct): Removed debugging code that I introduced early. I suspect correct is no longer needed. Thanks to Jim (again) for catching this. * parser.c (ReadCoordinates): Removed bogus case switch (thanks to Jim Watters for catching this!) * PTcommon.c: Changed use of NDEBUG to a new preprocessor define called PANO_TEST_INVERSE Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c trunk/libpano/correct.c trunk/libpano/parser.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-16 18:14:47 UTC (rev 1049) +++ trunk/libpano/ChangeLog 2009-09-16 19:50:06 UTC (rev 1050) @@ -1,3 +1,15 @@ +2009-09-16 <dm...@uv...> + + * correct.c (correct): Removed debugging code that I introduced + early. I suspect correct is no longer needed. Thanks to Jim + (again) for catching this. + + * parser.c (ReadCoordinates): Removed bogus case switch (thanks to + Jim Watters for catching this!) + + * PTcommon.c: Changed use of NDEBUG to a new preprocessor define + called PANO_TEST_INVERSE + 2009-09-14 20:59 brunopostle * tests/panoAutomateTest.pl, @@ -12,8 +24,8 @@ 2009-09-14 18:23 dmg - * ChangeLog, configure.ac: 2009-09-14 <dm...@uv...> - + * ChangeLog, configure.ac: + * configure.ac: Added support for kfreebsd. Patch created by Debian upstream maintainer Cyril Brulebois @@ -21,7 +33,7 @@ * ChangeLog, PTcommon.c, adjust.c, correct.c, filter.h, math.c, panorama.h, parser.c, pt_stdint.h: 2009-09-09 <dm...@uv...> - + * PTcommon.c, panorama.h, pt_stdint.h, math.c, adjust.c PTcommon.c, filter.h, parser.c, correct.c: Integrated Dev"s implementation of tilt, extended to support rotation of the Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-09-16 18:14:47 UTC (rev 1049) +++ trunk/libpano/PTcommon.c 2009-09-16 19:50:06 UTC (rev 1050) @@ -27,9 +27,6 @@ * */ -#define NDEBUG - - #include "filter.h" #include "PTcommon.h" #include "ColourBrightness.h" @@ -58,6 +55,10 @@ #endif +// Uncomment following line to enable testing of inverses in getROI +// #define PANO_TEST_INVERSE + + int panoFlattenTIFF(fullPath * fullPathImages, int counterImageFiles, fullPath * outputFileName, int removeOriginals); @@ -468,7 +469,7 @@ { struct MakeParams mpinv; fDesc invstack[15], finvD; -#ifndef NDEBUG +#ifdef PANO_TEST_INVERSE struct MakeParams mp; fDesc stack[15], fD; #endif @@ -490,7 +491,7 @@ ROIRect->top = TrPtr->dest->height - 1; ROIRect->bottom = 0; -#ifndef NDEBUG +#ifdef PANO_TEST_INVERSE //The "forward" transform allows us to map pixel //coordinates in the output image to their location in the source image. // We use it to test the inverse functions of libpano @@ -527,7 +528,7 @@ //Map the source image cartesian coordinate to the destination image cartesian coordinate finvD.func( x_d, y_d, &Dx, &Dy, finvD.param); -#ifndef NDEBUG +#ifdef PANO_TEST_INVERSE fD.func( Dx, Dy, &Dx2, &Dy2, fD.param); { int newX, newY; Modified: trunk/libpano/correct.c =================================================================== --- trunk/libpano/correct.c 2009-09-16 18:14:47 UTC (rev 1049) +++ trunk/libpano/correct.c 2009-09-16 19:50:06 UTC (rev 1050) @@ -68,11 +68,6 @@ src = TrPtr->src; dest = TrPtr->dest; - printf("inside Correct\n"); - - exit(1); - assert(0); // try to see when it is called - // Apply filters, if required Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-09-16 18:14:47 UTC (rev 1049) +++ trunk/libpano/parser.c 2009-09-16 19:50:06 UTC (rev 1050) @@ -509,8 +509,6 @@ break; } break; - case 'S': READ_OPT_VAR(tiltY); - break; case 'X': READ_VAR( "%d", &k ); if( k>=0 && k<gl->numIm ) gl->cim[k].set[0] = FALSE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-17 16:40:36
|
Revision: 1051 http://panotools.svn.sourceforge.net/panotools/?rev=1051&view=rev Author: dmg Date: 2009-09-17 16:40:27 +0000 (Thu, 17 Sep 2009) Log Message: ----------- 2009-09-17 <dm...@uv...> * parser.c: Fail if Ts parameter is set to zero Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/parser.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-16 19:50:06 UTC (rev 1050) +++ trunk/libpano/ChangeLog 2009-09-17 16:40:27 UTC (rev 1051) @@ -1,3 +1,7 @@ +2009-09-17 <dm...@uv...> + + * parser.c: Fail if Ts parameter is set to zero + 2009-09-16 <dm...@uv...> * correct.c (correct): Removed debugging code that I introduced Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-09-16 19:50:06 UTC (rev 1050) +++ trunk/libpano/parser.c 2009-09-17 16:40:27 UTC (rev 1051) @@ -366,6 +366,10 @@ opt->tiltScale += 2; }else{ READ_VAR("%lf", &(im->cP.tilt_scale)); + if (im->cP.tilt_scale == 0) { + PrintError("Ts parameter can't be zero. Error in script: Line %d", lineNum); + return -1; + } } im->cP.tilt = TRUE; break; @@ -1540,6 +1544,10 @@ break; case 's': READ_VAR("%lf", &(im.cP.tilt_scale)); im.cP.tilt = TRUE; + if (im.cP.tilt_scale == 0) { + PrintError("Ts parameter can't be zero. Error in script"); + return -1; + } break; } break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2009-09-18 03:25:47
|
Revision: 1056 http://panotools.svn.sourceforge.net/panotools/?rev=1056&view=rev Author: jim0watters Date: 2009-09-18 03:25:37 +0000 (Fri, 18 Sep 2009) Log Message: ----------- Fix crash if script p line has n"TIFF_m" without any other options for tiff Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-17 21:27:20 UTC (rev 1055) +++ trunk/libpano/ChangeLog 2009-09-18 03:25:37 UTC (rev 1056) @@ -1,10 +1,13 @@ 2009-09-17 Jim Watters + * PTcommon.c Fix crash if script p line has n"TIFF_m" without any other + options for tiff + * adjust.c: Add tiltZ and tiltScale to list being set to default values * math.c Move variable initialization to the beginning of code block for MSSC compiler. - + 2009-09-17 <dm...@uv...> * parser.c: Fail if Ts parameter is set to zero Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-09-17 21:27:20 UTC (rev 1055) +++ trunk/libpano/PTcommon.c 2009-09-18 03:25:37 UTC (rev 1056) @@ -824,20 +824,25 @@ if (strcmp(output_file_format, "TIFF_m") == 0 ) { // CHeck if we are suppose to do cropped or uncropped croppedTIFFIntermediate = 1; - nextWord(output_file_format, &tempString); - if (strcmp(output_file_format, "") == 0 || - strcmp(output_file_format, "r:CROP") == 0 - ) { - // DO uncropped by default unless we are fisheye - if (prefs->im.format == _fisheye_circ) { - PrintError("Cropped output is unsupported for circular fisheye lenses. Ignored"); - croppedTIFFIntermediate = 0; - } - } else if (strcmp(output_file_format, "r:UNCROP") == 0) { + if(strcmp(tempString, "") != 0) { + nextWord(output_file_format, &tempString); + if (strcmp(output_file_format, "") == 0 || + strcmp(output_file_format, "r:CROP") == 0 + ) { + // DO uncropped by default unless we are fisheye + if (prefs->im.format == _fisheye_circ) { + PrintError("Cropped output is unsupported for circular fisheye lenses. Ignored"); + } + } else if (strcmp(output_file_format, "r:UNCROP") == 0) { + croppedTIFFIntermediate = 0; + } else { + PrintError("Unsupported option in TIFF_m output (%s). Ignored", output_file_format); + } + } + // DO uncropped by default unless we are fisheye + if (prefs->im.format == _fisheye_circ) { croppedTIFFIntermediate = 0; - } else { - PrintError("Unsupported option in TIFF_m output (%s). Ignored", output_file_format); - } + } } else { PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-18 20:14:01
|
Revision: 1057 http://panotools.svn.sourceforge.net/panotools/?rev=1057&view=rev Author: dmg Date: 2009-09-18 20:13:51 +0000 (Fri, 18 Sep 2009) Log Message: ----------- 009-09-18 <dm...@uv...> Patch submitted by Kornel Benko * ptpicker.c: Casted some values in printf to avoid compiler warnings. * CMakeLists.txt: As allways one has to call cmake -DCPACK_BINARY_DEB:BOOL=ON to create a package (debian/ubuntu in this example) make package creates then the package libpano13-2.9.15-Linux.deb. (Values automatically taken from configure.ac) The package will install the header-files and the (shared) libpano13 library. Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/ChangeLog trunk/libpano/ptpicker.c Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-18 03:25:37 UTC (rev 1056) +++ trunk/libpano/CMakeLists.txt 2009-09-18 20:13:51 UTC (rev 1057) @@ -27,7 +27,7 @@ ## Locate the hugin source root and its parent directory IF ( HUGIN_BASE_DIR ) - GET_FILENAME_COMPONENT( SOURCE_BASE_DIR ${HUGIN_SOURCE_DIR} PATH CACHE ) + GET_FILENAME_COMPONENT( SOURCE_BASE_DIR ${HUGIN_BASE_DIR} PATH CACHE ) set(CMAKE_MODULE_PATH ${HUGIN_BASE_DIR}/CMakeModules ) ELSE ( HUGIN_BASE_DIR ) GET_FILENAME_COMPONENT( SOURCE_BASE_DIR ${CMAKE_SOURCE_DIR} PATH CACHE ) @@ -125,19 +125,27 @@ set( java_c ptpicker.c pteditor.c ) endif ( HAVE_JAVA ) +set(pano13_install_hdr + panorama.h + filter.h + version.h + panotypes.h + PTcommon.h + pt_stdint.h + file.h + queryfeature.h + pteditor.h + ptutils.h) + set( pano13_hdr ${java_h} + ${pano13_install_hdr} ColourBrightness.h f2c.h fftn.h - filter.h - panorama.h - pt_stdint.h - PTcommon.h rgbe.h sys_ansi.h sys_win.h - version.h ZComb.h ) @@ -145,7 +153,7 @@ pano13.rc pano13vc.def ) - + set( pano13_src ${java_c} ${win_c} @@ -186,5 +194,63 @@ Triangulate.c ZComb.c ) - -add_library ( libpano13 ${pano13_hdr} ${pano13_res} ${pano13_src} ) \ No newline at end of file + +add_library ( pano13 SHARED ${pano13_hdr} ${pano13_res} ${pano13_src} ) + +install(TARGETS pano13 DESTINATION lib) +install(FILES ${pano13_install_hdr} DESTINATION "include/pano13") + +macro(setstripped _varname _value) + string(STRIP ${_value} _v) + if(USE_POSIX_PACKAGING) + string(TOLOWER ${_v} ${_varname}) + else() + set(${_varname} ${_v}) + endif() +endmacro(setstripped) + +set(TOP_SRC_DIR ${CMAKE_SOURCE_DIR}) +file(STRINGS "${TOP_SRC_DIR}/configure.ac" _config_lines) +foreach(_c_l ${_config_lines} ) + if(_c_l MATCHES "^AC_INIT\\(\\[\([^,]+\)\\], *\\[\([^,]+\)\\], *\([^,]+\)") + setstripped(PACKAGE_BASE ${CMAKE_MATCH_1}) + setstripped(PACKAGE_VERSION ${CMAKE_MATCH_2}) + setstripped(PACKAGE_BUGREPORT ${CMAKE_MATCH_3}) + if(PACKAGE_VERSION MATCHES "^\([0-9]+\)\\.\([0-9]+\)\\.\([0-9]+\).*$") + message(STATUS "found version = ${PACKAGE_VERSION}") + set(PANO_MAJOR_VERSION ${CMAKE_MATCH_1}) + set(PANO_MINOR_VERSION ${CMAKE_MATCH_2}) + set(PANO_PATCH_VERSION ${CMAKE_MATCH_3}) + endif() + endif() +endforeach(_c_l) + +set(CPACK_PACKAGE_VERSION_MAJOR "${PANO_MAJOR_VERSION}") +set(CPACK_PACKAGE_VERSION_MINOR "${PANO_MINOR_VERSION}") +set(CPACK_PACKAGE_VERSION_PATCH "${PANO_PATCH_VERSION}") + +# needed by rpm +set(CPACK_SET_DESTDIR "ON") + +# the next ones are needed by deb +set(CPACK_PACKAGE_CONTACT "${PACKAGE_BUGREPORT}") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "libpano13") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${TOP_SRC_DIR}/README") +set(CPACK_RESOURCE_FILE_LICENSE "${TOP_SRC_DIR}/gpl.txt") + +# Find the revision number and use it as the release in rpm-package-build. +# This way we may omit the otherwise needed "--force" parameter when +# installing from that rpm package. +# ... Disabled for the moment, because configure.ac supplies a value +find_program(_svnversion svnversion) +message(STATUS "svnversion = ${_svnversion}") +if(NOT ${_svnversion} MATCHES "-NOTFOUND") + execute_process(COMMAND ${_svnversion} WORKING_DIRECTORY "${TOP_SRC_DIR}" OUTPUT_VARIABLE CPACK_RPM_PACKAGE_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE) + # We use this value also to set the package-patch-value + if(CPACK_RPM_PACKAGE_RELEASE MATCHES "^\([0-9]+\)") + #set(CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_1}) + endif() +endif() + +include(CPack) + Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-18 03:25:37 UTC (rev 1056) +++ trunk/libpano/ChangeLog 2009-09-18 20:13:51 UTC (rev 1057) @@ -1,13 +1,28 @@ +2009-09-18 <dm...@uv...> + + Patch submitted by Kornel Benko + + * ptpicker.c: Casted some values in printf to avoid compiler + warnings. + + * CMakeLists.txt: As allways one has to call cmake + -DCPACK_BINARY_DEB:BOOL=ON to create a package (debian/ubuntu in + this example) + + make package creates then the package libpano13-2.9.15-Linux.deb. + (Values automatically taken from configure.ac) The package will + install the header-files and the (shared) libpano13 library. + 2009-09-17 Jim Watters - * PTcommon.c Fix crash if script p line has n"TIFF_m" without any other - options for tiff + * PTcommon.c Fix crash if script p line has n"TIFF_m" without any + other options for tiff * adjust.c: Add tiltZ and tiltScale to list being set to default values - + * math.c Move variable initialization to the beginning of code block for MSSC compiler. - + 2009-09-17 <dm...@uv...> * parser.c: Fail if Ts parameter is set to zero Modified: trunk/libpano/ptpicker.c =================================================================== --- trunk/libpano/ptpicker.c 2009-09-18 03:25:37 UTC (rev 1056) +++ trunk/libpano/ptpicker.c 2009-09-18 20:13:51 UTC (rev 1057) @@ -731,7 +731,7 @@ - sprintf(line, "p f%d w%ld h%ld v%lg u%d %s n\"%s\" %s\n\n", pf, g->pano.width, g->pano.height, g->pano.hfov, g->st.feather, cv, g->pano.name, ch ); + sprintf(line, "p f%d w%ld h%ld v%lg u%d %s n\"%s\" %s\n\n", pf, (long int) g->pano.width, (long int) g->pano.height, g->pano.hfov, g->st.feather, cv, g->pano.name, ch ); count = strlen( line ); mywrite( fnum, count, line ); for(i=0; i<g->numIm; i++) @@ -743,7 +743,7 @@ else sprintf(ch, "v%lg", g->im[i].hfov); - sprintf(line, "i f%ld w%ld h%ld y%lg p%lg r%lg %s %s n\"%s\" ", im->format, im->width, im->height, + sprintf(line, "i f%ld w%ld h%ld y%lg p%lg r%lg %s %s n\"%s\" ", (long int) im->format, (long int) im->width, (long int) im->height, im->yaw, im->pitch, im->roll, (im->cP.correction_mode & correction_mode_morph ? "o" : "" ), ch, im->name ); @@ -784,8 +784,8 @@ } if( g->im[i].selection.bottom != 0 || g->im[i].selection.right != 0 ){ - sprintf( ch, " S%ld,%ld,%ld,%ld ",g->im[i].selection.left, g->im[i].selection.right, - g->im[i].selection.top, g->im[i].selection.bottom ); + sprintf( ch, " S%ld,%ld,%ld,%ld ",(long int) g->im[i].selection.left, (long int) g->im[i].selection.right, + (long int) g->im[i].selection.top, (long int) g->im[i].selection.bottom ); strcat(line, ch); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-18 21:59:15
|
Revision: 1062 http://panotools.svn.sourceforge.net/panotools/?rev=1062&view=rev Author: kornelbenko Date: 2009-09-18 21:59:07 +0000 (Fri, 18 Sep 2009) Log Message: ----------- Added installation of manuals Modified Paths: -------------- trunk/libpano/CMakeLists.txt Added Paths: ----------- trunk/libpano/man/CMakeLists.txt Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-18 21:39:58 UTC (rev 1061) +++ trunk/libpano/CMakeLists.txt 2009-09-18 21:59:07 UTC (rev 1062) @@ -34,8 +34,10 @@ set(CMAKE_MODULE_PATH ${SOURCE_BASE_DIR}/hugin/CMakeModules ) ENDIF ( HUGIN_BASE_DIR ) -## load the Hugin cmake modules -include(HuginMacros) +if(WIN32) + ## load the Hugin cmake modules + include(HuginMacros) +endif() include(CheckIncludeFiles) ## global setup @@ -200,6 +202,11 @@ install(TARGETS pano13 DESTINATION lib) install(FILES ${pano13_install_hdr} DESTINATION "include/pano13") +set(TOP_SRC_DIR ${CMAKE_SOURCE_DIR}) + +add_subdirectory(man) +add_dependencies(pano13 man) + macro(setstripped _varname _value) string(STRIP ${_value} _v) if(USE_POSIX_PACKAGING) @@ -209,7 +216,6 @@ endif() endmacro(setstripped) -set(TOP_SRC_DIR ${CMAKE_SOURCE_DIR}) file(STRINGS "${TOP_SRC_DIR}/configure.ac" _config_lines) foreach(_c_l ${_config_lines} ) if(_c_l MATCHES "^AC_INIT\\(\\[\([^,]+\)\\], *\\[\([^,]+\)\\], *\([^,]+\)") Added: trunk/libpano/man/CMakeLists.txt =================================================================== --- trunk/libpano/man/CMakeLists.txt (rev 0) +++ trunk/libpano/man/CMakeLists.txt 2009-09-18 21:59:07 UTC (rev 1062) @@ -0,0 +1,28 @@ +# This file is part of libpano13, the hugin build environment. +# Licence details can be found in the file gpl.txt. +# +# Copyright (c) 2008, 2009 Kornel Benko, <Kor...@be...> +# + +project(man) + +file(GLOB_RECURSE manuals RELATIVE "${TOP_SRC_DIR}/man" "${TOP_SRC_DIR}/man/*.1") + +macro(add_manual _mansrc) + get_filename_component(_mandest ${_mansrc} NAME_WE) + SET(_created_manual "${CMAKE_CURRENT_BINARY_DIR}/${_mandest}.1") + configure_file("${TOP_SRC_DIR}/man/${_mansrc}" ${_created_manual} @ONLY) + SET_SOURCE_FILES_PROPERTIES(${_created_manual} GENERATED) + LIST(APPEND _manuals ${_created_manual}) +endmacro(add_manual) + +set(_manuals) +foreach(_m ${manuals}) + # this is not needed now, but maybe we will later + # adapt data like version or date into the manuals + add_manual(${_m}) +endforeach(_m) + +add_custom_target(man ALL DEPENDS ${_manuals}) + +install(FILES ${_manuals} DESTINATION "share/man/man1") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-19 05:41:27
|
Revision: 1067 http://panotools.svn.sourceforge.net/panotools/?rev=1067&view=rev Author: kornelbenko Date: 2009-09-19 05:41:17 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Added tools directory Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/ChangeLog Added Paths: ----------- trunk/libpano/tools/CMakeLists.txt Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-19 02:47:01 UTC (rev 1066) +++ trunk/libpano/CMakeLists.txt 2009-09-19 05:41:17 UTC (rev 1067) @@ -204,10 +204,14 @@ install(FILES ${pano13_install_hdr} DESTINATION "include/pano13") +# + set(TOP_SRC_DIR ${CMAKE_SOURCE_DIR}) add_subdirectory(man) add_dependencies(pano13 man) +add_subdirectory(tools) +add_dependencies(tools pano13) macro(setstripped _varname _value) string(STRIP ${_value} _v) Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-19 02:47:01 UTC (rev 1066) +++ trunk/libpano/ChangeLog 2009-09-19 05:41:17 UTC (rev 1067) @@ -1,3 +1,9 @@ +2009-09-19 <Kor...@be...> + + * tools/CMakeLists.txt: created, but don't know, how to produce panoinfo on unix yet + + * CMakeLists.txt: added tools directory + tools dependencies + 2009-09-18 <dmg@phosphorus> * CMakeLists.txt: Moved wx-widgets into Windows-only part Added: trunk/libpano/tools/CMakeLists.txt =================================================================== --- trunk/libpano/tools/CMakeLists.txt (rev 0) +++ trunk/libpano/tools/CMakeLists.txt 2009-09-19 05:41:17 UTC (rev 1067) @@ -0,0 +1,25 @@ +# This file is part of libpano13, the hugin build environment. +# Licence details can be found in the file gpl.txt. +# +# Copyright (c) 2008, 2009 Kornel Benko, <Kor...@be...> +# + +project(tools) + +set(commands PTtiff2psd PTtiffdump PTcrop PTAInterpolate PTblender + PTroller PTuncrop PToptimizer PTmender PTinfo PTmasker) +# panoinfo needs windows.h + +if(WIN32) + list(APPEND commands panoinfo) +endif() + +include_directories(${TOP_SRC_DIR}) + +foreach(_cmd ${commands}) + add_executable(${_cmd} ${_cmd}.c) + target_link_libraries(${_cmd} pano13 ${TIFF_LIBRARY} ${PNG_LIBRARY}) + install(TARGETS ${_cmd} DESTINATION bin CONFIGURATIONS Release RelWithDebInfo MinSizeRel) +endforeach(_cmd) + +add_custom_target(tools DEPENDS ${commands}) \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-19 06:22:01
|
Revision: 1068 http://panotools.svn.sourceforge.net/panotools/?rev=1068&view=rev Author: kornelbenko Date: 2009-09-19 06:21:48 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Add installation of lib/pkgconfig/libpano13.pc Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/ChangeLog Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-19 05:41:17 UTC (rev 1067) +++ trunk/libpano/CMakeLists.txt 2009-09-19 06:21:48 UTC (rev 1068) @@ -204,8 +204,6 @@ install(FILES ${pano13_install_hdr} DESTINATION "include/pano13") -# - set(TOP_SRC_DIR ${CMAKE_SOURCE_DIR}) add_subdirectory(man) @@ -237,6 +235,21 @@ endif() endforeach(_c_l) +# set some variables which are used in libpano13.pc.in +set(prefix ${CMAKE_INSTALL_PREFIX}) +set(exec_prefix ${CMAKE_INSTALL_PREFIX}) +set(libdir ${CMAKE_INSTALL_PREFIX}/lib) +set(includedir ${CMAKE_INSTALL_PREFIX}/include) +set(LIB_JPEG ${JPEG_LIBRARY}) +set(LIB_TIFF ${TIFF_LIBRARY}) +set(LIB_ZLIB ${ZLIB_LIBRARY}) +set(LIB_PNG ${PNG_LIBRARY}) +set(VERSION ${PACKAGE_VERSION}) + +configure_file("${TOP_SRC_DIR}/libpano13.pc.in" "${CMAKE_BINARY_DIR}/libpano13.pc" @ONLY) + +install(FILES "${CMAKE_BINARY_DIR}/libpano13.pc" DESTINATION "lib/pkgconfig") + set(CPACK_PACKAGE_VERSION_MAJOR "${PANO_MAJOR_VERSION}") set(CPACK_PACKAGE_VERSION_MINOR "${PANO_MINOR_VERSION}") set(CPACK_PACKAGE_VERSION_PATCH "${PANO_PATCH_VERSION}") Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-19 05:41:17 UTC (rev 1067) +++ trunk/libpano/ChangeLog 2009-09-19 06:21:48 UTC (rev 1068) @@ -1,5 +1,9 @@ 2009-09-19 <Kor...@be...> + * CMakeLists.txt: Added libpano13.pc + +2009-09-19 <Kor...@be...> + * tools/CMakeLists.txt: created, but don't know, how to produce panoinfo on unix yet * CMakeLists.txt: added tools directory + tools dependencies This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-19 12:59:32
|
Revision: 1069 http://panotools.svn.sourceforge.net/panotools/?rev=1069&view=rev Author: kornelbenko Date: 2009-09-19 12:59:24 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Enable test of our only two simple tests. In build-tree one has first to call "make". After this one may call "make test" to actually execute the tests. Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/ChangeLog Added Paths: ----------- trunk/libpano/tests/CMakeLists.txt trunk/libpano/tests/simpleStitch/CMakeLists.txt trunk/libpano/tests/simpleTiff16/CMakeLists.txt Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-19 06:21:48 UTC (rev 1068) +++ trunk/libpano/CMakeLists.txt 2009-09-19 12:59:24 UTC (rev 1069) @@ -279,3 +279,6 @@ include(CPack) + +enable_testing() +add_subdirectory(tests) Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-19 06:21:48 UTC (rev 1068) +++ trunk/libpano/ChangeLog 2009-09-19 12:59:24 UTC (rev 1069) @@ -1,5 +1,15 @@ 2009-09-19 <Kor...@be...> + * CMakeLists.txt: enable testing + + * tests/CMakeLists.txt: define the macro prepare_test and add the tests + + * tests/simpleStitch/CMakeLists.txt: call "prepare_test" to make test1 + + * tests/simpleTiff16/CMakeLists.txt: call "prepare_test" to make test2 + +2009-09-19 <Kor...@be...> + * CMakeLists.txt: Added libpano13.pc 2009-09-19 <Kor...@be...> Added: trunk/libpano/tests/CMakeLists.txt =================================================================== --- trunk/libpano/tests/CMakeLists.txt (rev 0) +++ trunk/libpano/tests/CMakeLists.txt 2009-09-19 12:59:24 UTC (rev 1069) @@ -0,0 +1,33 @@ +# This file is part of libpano13, the hugin build environment. +# Licence details can be found in the file gpl.txt. +# +# Copyright (c) 2008, 2009 Kornel Benko, <Kor...@be...> +# + +project(test) + +macro(prepare_test _testname _prjname _imagemask) + file(GLOB images RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/${_imagemask}") + file(GLOB references RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/reference/*") + set(_depends) + foreach(_i ${images} ${references}) + if(NOT IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${_i}") + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${_i}" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${_i}" "${CMAKE_CURRENT_BINARY_DIR}/${_i}" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${_i}") + SET_SOURCE_FILES_PROPERTIES("${CMAKE_CURRENT_BINARY_DIR}/${_i}" GENERATED) + list(APPEND _depends "${CMAKE_CURRENT_BINARY_DIR}/${_i}") + endif() + endforeach(_i) + add_custom_target(${_prjname} ALL DEPENDS ${_depends}) + + add_test(${_testname} ${PERL_EXE} "${TOP_SRC_DIR}/tests/panoAutomateTest.pl" "${CMAKE_CURRENT_SOURCE_DIR}/simple.txt") + add_dependencies(${_prjname} tools) +endmacro() + +find_program(PERL_EXE "perl") +if(NOT PERL_EXE MATCHES "-NOTFOUND") + add_subdirectory(simpleStitch) + add_subdirectory(simpleTiff16) +endif() Added: trunk/libpano/tests/simpleStitch/CMakeLists.txt =================================================================== --- trunk/libpano/tests/simpleStitch/CMakeLists.txt (rev 0) +++ trunk/libpano/tests/simpleStitch/CMakeLists.txt 2009-09-19 12:59:24 UTC (rev 1069) @@ -0,0 +1,10 @@ +# This file is part of libpano13, the hugin build environment. +# Licence details can be found in the file gpl.txt. +# +# Copyright (c) 2008, 2009 Kornel Benko, <Kor...@be...> +# + +project(test1) + +prepare_test(simpleStitch test1 "*.jpg") + Added: trunk/libpano/tests/simpleTiff16/CMakeLists.txt =================================================================== --- trunk/libpano/tests/simpleTiff16/CMakeLists.txt (rev 0) +++ trunk/libpano/tests/simpleTiff16/CMakeLists.txt 2009-09-19 12:59:24 UTC (rev 1069) @@ -0,0 +1,10 @@ +# This file is part of libpano13, the hugin build environment. +# Licence details can be found in the file gpl.txt. +# +# Copyright (c) 2008, 2009 Kornel Benko, <Kor...@be...> +# + +project(test2) + +prepare_test(simpleTiff16 test2 "*.TIF") + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jim...@us...> - 2009-09-19 15:06:16
|
Revision: 1070 http://panotools.svn.sourceforge.net/panotools/?rev=1070&view=rev Author: jim0watters Date: 2009-09-19 15:06:10 +0000 (Sat, 19 Sep 2009) Log Message: ----------- fixed getROI to not clip the nadir and zenith shots when outputting as cropped tiffs. Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-19 12:59:24 UTC (rev 1069) +++ trunk/libpano/ChangeLog 2009-09-19 15:06:10 UTC (rev 1070) @@ -1,3 +1,10 @@ +2009-09-19 Jim Watters + + * PTcommon.c fixed getROI to not clip the nadir and zenith shots when + outputting as cropped tiffs + + * doc/stitch.txt, doc/optimize.txt: documented the Tilt parameters + 2009-09-19 <Kor...@be...> * CMakeLists.txt: enable testing Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-09-19 12:59:24 UTC (rev 1069) +++ trunk/libpano/PTcommon.c 2009-09-19 15:06:10 UTC (rev 1070) @@ -469,10 +469,8 @@ { struct MakeParams mpinv; fDesc invstack[15], finvD; -#ifdef PANO_TEST_INVERSE struct MakeParams mp; fDesc stack[15], fD; -#endif int color = 0; int x, y, x_jump; @@ -491,7 +489,6 @@ ROIRect->top = TrPtr->dest->height - 1; ROIRect->bottom = 0; -#ifdef PANO_TEST_INVERSE //The "forward" transform allows us to map pixel //coordinates in the output image to their location in the source image. // We use it to test the inverse functions of libpano @@ -499,7 +496,6 @@ SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); fD.func = execute_stack_new; fD.param = stack; -#endif //The "inverse" transform allows us to map pixel coordinates in each source image //to their location in the output image. @@ -583,7 +579,57 @@ // printf("ROI1: %ld,%ld - %ld, %ld\n", ROIRect->left, ROIRect->top, ROIRect->right, ROIRect->bottom); + // If the destination is wrapped and the ROI is at least 95% of the width + // Then ensure it is of the full width so no missing data is removed from either side. + if ( (TrPtr->mode & _wrapX) && + ( (ROIRect->right-ROIRect->left) > (TrPtr->dest->width * 0.95) ) ) + { + ROIRect->left = 0; + ROIRect->right = TrPtr->dest->width-1; + } + // Test for a zenith shot + if(ROIRect->top != 0) + { + Dx = 0; + Dy = - h2; + fD.func( Dx, Dy, &Dx2, &Dy2, fD.param); + { + if (!isnan(Dx2) && !isnan(Dy2)) { + + x_d = (int)(Dx2 + 0.5 + sw2); + y_d = (int)(Dy2 + 0.5 + sh2); + // if x_d, y_d is inside the image then this is a zenith shot and should extent to the top + if (y_d >= 0 && y_d <= TrPtr->src->height && + x_d >= 0 && x_d <= TrPtr->src->width ) + { + ROIRect->top = 0; + } + } + } + } + + // Test for a nadir shot + if(ROIRect->bottom != TrPtr->dest->height-1) + { + Dx = 0; + Dy = h2; + fD.func( Dx, Dy, &Dx2, &Dy2, fD.param); + { + if (!isnan(Dx2) && !isnan(Dy2)) { + + x_d = (int)(Dx2 + 0.5 + sw2); + y_d = (int)(Dy2 + 0.5 + sh2); + // if x_d, y_d is inside the image then this is a zenith shot and should extent to the top + if (y_d >= 0 && y_d <= TrPtr->src->height && + x_d >= 0 && x_d <= TrPtr->src->width ) + { + ROIRect->bottom = TrPtr->dest->height-1; + } + } + } + } + //Reduce ROI if it extends beyond boundaries of final panorama region if (ROIRect->left < 0) ROIRect->left =0; if (ROIRect->top < 0) ROIRect->top =0; @@ -724,7 +770,7 @@ memset(&transform, 0, sizeof(TrformStr)); transform.src = &image1; // Input image transform.dest = &resultPanorama; // Output image - transform.mode = 8; // How to run transformation + transform.mode = _honor_valid; // How to run transformation transform.success = 1; // 1 success 0 failure //Allocate space to hold fully qualified names of input images @@ -853,6 +899,8 @@ transform.interpolator = prefs->interpolator; transform.gamma = prefs->gamma; transform.fastStep = prefs->fastStep; + if( prefs->pano.hfov == 360.0 ) + transform.mode |= _wrapX; if (ptQuietFlag == 0) { sprintf(tmpStr, "Converting Image %d / %d", (loopCounter + 1), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-19 19:06:15
|
Revision: 1072 http://panotools.svn.sourceforge.net/panotools/?rev=1072&view=rev Author: kornelbenko Date: 2009-09-19 19:06:07 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Don't compile PTAInterpolate if no JAVA, it uses writeProject() from ptpicker.c Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/tools/CMakeLists.txt Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-19 17:26:49 UTC (rev 1071) +++ trunk/libpano/ChangeLog 2009-09-19 19:06:07 UTC (rev 1072) @@ -1,3 +1,7 @@ +2009-09-19 <Kor...@be...> + + * CMakeLists.txt: Remove java dependency, PTAInterpolate uses writeProject() from ptpicker.c + 2009-09-19 Jim Watters * PTcommon.c fixed getROI to not clip the nadir and zenith shots when Modified: trunk/libpano/tools/CMakeLists.txt =================================================================== --- trunk/libpano/tools/CMakeLists.txt 2009-09-19 17:26:49 UTC (rev 1071) +++ trunk/libpano/tools/CMakeLists.txt 2009-09-19 19:06:07 UTC (rev 1072) @@ -6,8 +6,13 @@ project(tools) -set(commands PTtiff2psd PTtiffdump PTcrop PTAInterpolate PTblender +set(commands PTtiff2psd PTtiffdump PTcrop PTblender PTroller PTuncrop PToptimizer PTmender PTinfo PTmasker) +if (HAVE_JAVA) + # this one depends on java (uses writeProject() from ptpicker) + list(APPEND commands PTAInterpolate) +endif() + # panoinfo needs windows.h if(WIN32) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-20 12:41:00
|
Revision: 1074 http://panotools.svn.sourceforge.net/panotools/?rev=1074&view=rev Author: kornelbenko Date: 2009-09-20 12:40:55 +0000 (Sun, 20 Sep 2009) Log Message: ----------- creation of static pano13 library too Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/ChangeLog Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-20 06:52:49 UTC (rev 1073) +++ trunk/libpano/CMakeLists.txt 2009-09-20 12:40:55 UTC (rev 1074) @@ -199,10 +199,14 @@ ZComb.c ) -add_library (pano13 SHARED ${pano13_hdr} ${pano13_res} ${pano13_src}) +add_library(pano13 SHARED ${pano13_hdr} ${pano13_res} ${pano13_src}) +add_library(pano13a STATIC ${pano13_hdr} ${pano13_res} ${pano13_src}) set_target_properties(pano13 PROPERTIES VERSION "1.0.0" SOVERSION "1") +set_target_properties(pano13a PROPERTIES OUTPUT_NAME pano13) -install(TARGETS pano13 LIBRARY DESTINATION lib) +install(TARGETS pano13 pano13a + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) install(FILES ${pano13_install_hdr} DESTINATION "include/pano13") Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-20 06:52:49 UTC (rev 1073) +++ trunk/libpano/ChangeLog 2009-09-20 12:40:55 UTC (rev 1074) @@ -1,3 +1,7 @@ +2009-09-20 <Kor...@be...> + + * CMakeLists.txt: white space + creation of static pano13 library too + 2009-09-19 <Kor...@be...> * CMakeLists.txt: Remove java dependency, PTAInterpolate uses writeProject() from ptpicker.c This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-09-20 20:52:55
|
Revision: 1075 http://panotools.svn.sourceforge.net/panotools/?rev=1075&view=rev Author: brunopostle Date: 2009-09-20 20:52:43 +0000 (Sun, 20 Sep 2009) Log Message: ----------- Bump soname to 2:0:0 for real this time Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/Makefile.am Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-20 12:40:55 UTC (rev 1074) +++ trunk/libpano/CMakeLists.txt 2009-09-20 20:52:43 UTC (rev 1075) @@ -201,7 +201,7 @@ add_library(pano13 SHARED ${pano13_hdr} ${pano13_res} ${pano13_src}) add_library(pano13a STATIC ${pano13_hdr} ${pano13_res} ${pano13_src}) -set_target_properties(pano13 PROPERTIES VERSION "1.0.0" SOVERSION "1") +set_target_properties(pano13 PROPERTIES VERSION "2.0.0" SOVERSION "2") set_target_properties(pano13a PROPERTIES OUTPUT_NAME pano13) install(TARGETS pano13 pano13a Modified: trunk/libpano/Makefile.am =================================================================== --- trunk/libpano/Makefile.am 2009-09-20 12:40:55 UTC (rev 1074) +++ trunk/libpano/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) @@ -64,7 +64,7 @@ if HAVE_LINUX LIN_SRC = sys_ansi.c ppm.c LIN_DEFS = -D__Ansi__=1 -LIN_LDFS = -version-info 1:0:0 +LIN_LDFS = -version-info 2:0:0 install-exec-hook: @true @@ -74,7 +74,7 @@ if HAVE_DARWIN DAR_SRC = sys_ansi.c ppm.c DAR_DEFS = -D__Ansi__=1 -DAR_LDFS = -version-info 1:0:0 +DAR_LDFS = -version-info 2:0:0 install-exec-hook: @true This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-09-20 21:08:21
|
Revision: 1076 http://panotools.svn.sourceforge.net/panotools/?rev=1076&view=rev Author: brunopostle Date: 2009-09-20 21:08:13 +0000 (Sun, 20 Sep 2009) Log Message: ----------- The cmake stuff should be available in the automake tarball Modified Paths: -------------- trunk/libpano/Makefile.am trunk/libpano/man/Makefile.am trunk/libpano/tests/Makefile.am trunk/libpano/tests/simpleStitch/Makefile.am trunk/libpano/tests/simpleTiff16/Makefile.am trunk/libpano/tools/Makefile.am Modified: trunk/libpano/Makefile.am =================================================================== --- trunk/libpano/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -109,6 +109,7 @@ EXTRA_DIST = gpl.txt README.linux README.windows \ makefile.win32 \ + CMakeLists.txt \ bootstrap filter.r libpano13.def pano13.rc \ seamer_.c sys_X11.c sys_win.c bmp.c shell_mac.c \ sys_mac.c ppm.c sys_ansi.c ppm.c ZComb.h adjust.h \ Modified: trunk/libpano/man/Makefile.am =================================================================== --- trunk/libpano/man/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/man/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -4,7 +4,8 @@ EXTRA_DIST = panoinfo.pod PTAInterpolate.pod PTblender.pod PTcrop.pod PTinfo.pod PTmasker.pod \ PTmender.pod PToptimizer.pod PTroller.pod PTtiff2psd.pod PTtiffdump.pod \ - PTuncrop.pod $(man_MANS) + PTuncrop.pod $(man_MANS) \ + CMakeLists.txt %.1: %.pod pod2man --center $(PACKAGE) --release $(PACKAGE_VERSION) $< $@ Modified: trunk/libpano/tests/Makefile.am =================================================================== --- trunk/libpano/tests/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/tests/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -1,4 +1,5 @@ -EXTRA_DIST = panoAutomateTest.pl ChangeLog +EXTRA_DIST = panoAutomateTest.pl ChangeLog \ + CMakeLists.txt SUBDIRS = simpleStitch simpleTiff16 Modified: trunk/libpano/tests/simpleStitch/Makefile.am =================================================================== --- trunk/libpano/tests/simpleStitch/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/tests/simpleStitch/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -1,4 +1,5 @@ EXTRA_DIST = 051221_6054_750.jpg 051221_6055_750.jpg \ + CMakeLists.txt \ ChangeLog README.txt simple.pto simple.txt MAINTAINERCLEANFILES = \ Modified: trunk/libpano/tests/simpleTiff16/Makefile.am =================================================================== --- trunk/libpano/tests/simpleTiff16/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/tests/simpleTiff16/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -1,4 +1,5 @@ EXTRA_DIST = 060520_3398.TIF \ + CMakeLists.txt \ ChangeLog simple.txt SUBDIRS = reference Modified: trunk/libpano/tools/Makefile.am =================================================================== --- trunk/libpano/tools/Makefile.am 2009-09-20 20:52:43 UTC (rev 1075) +++ trunk/libpano/tools/Makefile.am 2009-09-20 21:08:13 UTC (rev 1076) @@ -80,7 +80,8 @@ panoinfo_SOURCES = $(WIN_SRC) $(LIN_SRC) $(DAR_SRC) panoinfo_LDADD = -l${PANOLIB} -EXTRA_DIST = README.PTmender +EXTRA_DIST = README.PTmender \ + CMakeLists.txt MAINTAINERCLEANFILES = \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kor...@us...> - 2009-09-21 06:30:42
|
Revision: 1078 http://panotools.svn.sourceforge.net/panotools/?rev=1078&view=rev Author: kornelbenko Date: 2009-09-21 06:30:35 +0000 (Mon, 21 Sep 2009) Log Message: ----------- Added needed libraries to create tools Modified Paths: -------------- trunk/libpano/CMakeLists.txt trunk/libpano/tools/CMakeLists.txt Modified: trunk/libpano/CMakeLists.txt =================================================================== --- trunk/libpano/CMakeLists.txt 2009-09-20 21:32:54 UTC (rev 1077) +++ trunk/libpano/CMakeLists.txt 2009-09-21 06:30:35 UTC (rev 1078) @@ -67,7 +67,9 @@ FIND_PACKAGE(PNG REQUIRED) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) - + +set(_common_libs ${TIFF_LIBRARIES} ${ZLIB_LIBRARIES} ${JPEG_LIBRARIES} ${PNG_LIBRARIES}) + # # Check build type and set options accordingly # Modified: trunk/libpano/tools/CMakeLists.txt =================================================================== --- trunk/libpano/tools/CMakeLists.txt 2009-09-20 21:32:54 UTC (rev 1077) +++ trunk/libpano/tools/CMakeLists.txt 2009-09-21 06:30:35 UTC (rev 1078) @@ -23,8 +23,8 @@ foreach(_cmd ${commands}) add_executable(${_cmd} ${_cmd}.c) - target_link_libraries(${_cmd} pano13 ${TIFF_LIBRARY} ${PNG_LIBRARY}) + target_link_libraries(${_cmd} pano13 ${_common_libs}) install(TARGETS ${_cmd} DESTINATION bin CONFIGURATIONS Release RelWithDebInfo MinSizeRel) endforeach(_cmd) -add_custom_target(tools DEPENDS ${commands}) \ No newline at end of file +add_custom_target(tools DEPENDS ${commands}) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2009-09-22 19:46:41
|
Revision: 1079 http://panotools.svn.sourceforge.net/panotools/?rev=1079&view=rev Author: dangelo Date: 2009-09-22 19:46:33 +0000 (Tue, 22 Sep 2009) Log Message: ----------- Mosaic mode based on camera position (not compiled by default). Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/adjust.c trunk/libpano/filter.h trunk/libpano/math.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-21 06:30:35 UTC (rev 1078) +++ trunk/libpano/ChangeLog 2009-09-22 19:46:33 UTC (rev 1079) @@ -1,3 +1,8 @@ +2009-09-20 21:08 dangelo + + * adjust.c, panorama.h, filter.h, math.c: Mosaic mode based on + camera position. + 2009-09-20 21:08 brunopostle * Makefile.am, man/Makefile.am, tests/Makefile.am, Modified: trunk/libpano/adjust.c =================================================================== --- trunk/libpano/adjust.c 2009-09-21 06:30:35 UTC (rev 1078) +++ trunk/libpano/adjust.c 2009-09-22 19:46:33 UTC (rev 1079) @@ -51,6 +51,8 @@ #define ADJUST_LOG_FILENAME "PToolsLog.txt" // file name for logging, if enabled #define ADJUST_LOGGING_ENABLED 0 +// enable mosaic with X,Y,Z camera positions instead of tilt +//#define MOSAIC_XYZ 1 FILE* adjustLogFile = 0; @@ -787,10 +789,17 @@ mp->rot[0] = mp->distance * PI; // 180 in screenpoints mp->rot[1] = -im->yaw * mp->distance * PI / 180.0; // rotation angle in screenpoints +#ifdef MOSAIC_XYZ + mp->tilt[0] = im->cP.tilt_x; + mp->tilt[1] = im->cP.tilt_y; + mp->tilt[2] = im->cP.tilt_z; + mp->tilt[3] = im->cP.tilt_scale; +#else mp->tilt[0] = DEG_TO_RAD(im->cP.tilt_x); mp->tilt[1] = DEG_TO_RAD(im->cP.tilt_y); mp->tilt[2] = DEG_TO_RAD(im->cP.tilt_z); mp->tilt[3] = im->cP.tilt_scale; +#endif /* printf("Image format %d\n", (int)(im->format)); @@ -898,14 +907,14 @@ { SetDesc(stack[i], erect_albersequalareaconic, mp ); i++; // Convert albersequalareaconic to equirect } - else if(pn->format == _biplane) - { - SetDesc(stack[i], erect_biplane, mp ); i++; // Convert biplane to equirect - } - else if(pn->format == _triplane) - { + else if(pn->format == _biplane) + { + SetDesc(stack[i], erect_biplane, mp ); i++; // Convert biplane to equirect + } + else if(pn->format == _triplane) + { SetDesc(stack[i], erect_triplane, mp ); i++; // Convert triplane to equirect - } + } else if(pn->format == _equirectangular) { // no conversion needed @@ -913,6 +922,13 @@ PrintError("Projection type %d not supported, using equirectangular", pn->format); } +#ifdef MOSAIC_XYZ + if (im->cP.tilt) { + SetDesc(stack[i], plane_transfer_to_camera, mp); i++; + } +#endif + // + SetDesc( stack[i], rotate_erect, mp->rot ); i++; // Rotate equirect. image horizontally SetDesc( stack[i], sphere_tp_erect, &(mp->distance) ); i++; // Convert spherical image to equirect. SetDesc( stack[i], persp_sphere, mp->perspect ); i++; // Perspective Control spherical Image @@ -941,9 +957,11 @@ case correction_mode_deregister:SetDesc(stack[i],deregister,mp->rad); i++; break; } } +#ifndef MOSAIC_XYZ if (im->cP.tilt) { SetDesc(stack[i], tiltInverse, mp); i++; } +#endif if (mp->vertical != 0.0) { @@ -1176,11 +1194,17 @@ mp->shear[1] = im->cP.shear_y / im->width; //PrintMakeParams("Inverse 10", mp,im); - +#ifdef MOSAIC_XYZ + mp->tilt[0] = im->cP.tilt_x; + mp->tilt[1] = im->cP.tilt_y; + mp->tilt[2] = im->cP.tilt_z; + mp->tilt[3] = im->cP.tilt_scale; +#else mp->tilt[0] = DEG_TO_RAD(im->cP.tilt_x); mp->tilt[1] = DEG_TO_RAD(im->cP.tilt_y); mp->tilt[2] = DEG_TO_RAD(im->cP.tilt_z); mp->tilt[3] = im->cP.tilt_scale; +#endif // PrintMakeParams("Inverse 20",mp,im); @@ -1225,10 +1249,12 @@ SetDesc(stack[i],vert, &(mp->vertical)); i++; } +#ifndef MOSAIC_XYZ if( im->cP.tilt ) { SetDesc( stack[i],tiltForward, mp ); i++; } +#endif // Perform radial correction @@ -1277,6 +1303,14 @@ SetDesc( stack[i], persp_sphere, mp->perspect ); i++; // Perspective Control spherical Image SetDesc( stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical image to equirect. SetDesc( stack[i], rotate_erect, mp->rot ); i++; // Rotate equirect. image horizontally + +#ifdef MOSAIC_XYZ + if( im->cP.tilt ) + { + SetDesc( stack[i], plane_transfer_from_camera, mp ); i++; + } +#endif + // THESE ARE ALL FORWARD transforms if(pn->format == _rectilinear) // rectilinear panorama { Modified: trunk/libpano/filter.h =================================================================== --- trunk/libpano/filter.h 2009-09-21 06:30:35 UTC (rev 1078) +++ trunk/libpano/filter.h 2009-09-22 19:46:33 UTC (rev 1079) @@ -842,6 +842,8 @@ int sphere_cp_pano ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int rect_erect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int erect_rect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); +int plane_transfer_to_camera( double x_dest, double y_dest, double * x_src, double * y_src, void * params); +int plane_transfer_from_camera( double x_dest, double y_dest, double * x_src, double * y_src, void * params); int erect_sphere_tp ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int mirror_erect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); int mercator_erect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ); Modified: trunk/libpano/math.c =================================================================== --- trunk/libpano/math.c 2009-09-21 06:30:35 UTC (rev 1078) +++ trunk/libpano/math.c 2009-09-22 19:46:33 UTC (rev 1079) @@ -232,6 +232,8 @@ #define shift (*((double*)params)) #define var0 ((double*)params)[0] #define var1 ((double*)params)[1] +#define var2 ((double*)params)[2] +#define var3 ((double*)params)[3] #define mp ((struct MakeParams*)params) // execute a stack of functions stored in stack @@ -757,19 +759,31 @@ *x_src = distanceparam * tan(phi); *y_src = distanceparam / (tan( theta ) * cos(phi)); #endif - // normalize phi to be in the -PI, PI range - while(phi <= -PI) - phi += 2*PI; - while(phi > PI) - phi -= 2*PI; + // normalize phi to be in the -PI, PI range + while(phi <= -PI) + phi += 2*PI; + while(phi > PI) + phi -= 2*PI; - // check if the point is "in front" of the camera - if (phi < -PI/2.0 || phi > PI/2.0) { - // behind, transform considered invalid - return 0; - } else - return 1; + // check if the point is "in front" of the camera + if (phi < -PI/2.0 || phi > PI/2.0) { + // behind, transform considered invalid + return 0; + } else + return 1; + // normalize phi to be in the -PI, PI range + while(phi <= -PI) + phi += 2*PI; + while(phi > PI) + phi -= 2*PI; + // check if the point is "in front" of the camera + if (phi < -PI/2.0 || phi > PI/2.0) { + // behind, transform considered invalid + return 0; + } else + return 1; + } // This is the cylindrical projection int pano_erect( double x_dest,double y_dest, double* x_src, double* y_src, void* params) @@ -1780,6 +1794,134 @@ return 1; } +/** transfer a point from a camera centered at x1,y1,z1 into the camera at x2,y2,z2 */ +int plane_transfer_to_camera( double x_dest, double y_dest, double * x_src, double * y_src, void * params) +{ + // params: distance, x1,y1,z1 + + double phi, theta; + double x_plane, y_plane; + double x_ray,y_ray,z_ray; + + + phi = x_dest / mp->distance; + theta = - y_dest / mp->distance + PI / 2.0; + if(theta < 0) + { + theta = - theta; + phi += PI; + } + if(theta > PI) + { + theta = PI - (theta - PI); + phi += PI; + } + + // if the ray goes behind the camera, abort here + // normalize phi to be in the -PI, PI range + while(phi <= -PI) + phi += 2*PI; + while(phi > PI) + phi -= 2*PI; + + // check if the point is "in front" of the camera + if (phi < -PI/2.0 || phi > PI/2.0) + // behind, transform considered invalid + return 0; + + // compute the position on the intermediate plane + // the ray originates from the pano center (0,0,0) + // and intersects the plane located at z=-1 + // basically rect_erect, but with distance = 1 + x_plane = tan(phi); + y_plane = 1.0 / (tan( theta ) * cos(phi)); + + // compute ray leading to to the camera. + x_ray = x_plane - mp->tilt[0]; + y_ray = y_plane - mp->tilt[1]; + z_ray = mp->tilt[2] + 1.0; + + // transform into erect + // basically erect_rect + *x_src = mp->distance * atan2( x_ray, z_ray ); + *y_src = mp->distance * atan2( y_ray, sqrt( z_ray*z_ray + x_ray*x_ray ) ); + + /* + printf("plane(%.1f,%.1f%.1f): %8.5f %8.5f -> %8.5f %8.5f -> %8.5f %8.5f %8.5f -> %8.5f %8.5f\n", + mp->tilt[0], mp->tilt[1], mp->tilt[2], + x_dest, y_dest, + //RAD_TO_DEG(phi), RAD_TO_DEG(theta), + x_plane, y_plane, + x_ray, y_ray, z_ray, *x_src, *y_src); + */ + + return 1; +} + +/** transfer a point from a camera centered at x1,y1,z1 into the camera at x2,y2,z2 */ +int plane_transfer_from_camera( double x_dest, double y_dest, double * x_src, double * y_src, void * params) +{ + // params: MakeParams + + double phi, theta; + double x_plane, y_plane; + double x_ray,y_ray,z_ray; + + phi = x_dest / mp->distance; + theta = - y_dest / mp->distance + PI / 2.0; + if(theta < 0) + { + theta = - theta; + phi += PI; + } + if(theta > PI) + { + theta = PI - (theta - PI); + phi += PI; + } + + // normalize phi to be in the -PI, PI range + while(phi <= -PI) + phi += 2*PI; + while(phi > PI) + phi -= 2*PI; + + // check if the point is "in front" of the panorama camera + if (phi < -PI/2.0 || phi > PI/2.0) + // behind, transform considered invalid + return 0; + + // compute the position on the intermediate plane + // Intersection of ray from the image center (Tx,Ty,Tz) + // with plane located at z=-1 + x_plane = (mp->tilt[2]+1.0)* tan(phi); + y_plane = (mp->tilt[2]+1.0) / (tan( theta ) * cos(phi)); + + // shift according to camera position + x_plane += mp->tilt[0]; + y_plane += mp->tilt[1]; + + x_ray = x_plane; + y_ray = y_plane; + z_ray = 1.0; + + // transform into erect + // basically erect_rect + *x_src = mp->distance * atan2( x_ray, z_ray ); + *y_src = mp->distance * atan2( y_ray, sqrt( z_ray*z_ray + x_ray*x_ray ) ); + + /* + printf("cam->plane(%.1f,%.1f%.1f): %8.5f %8.5f -> %8.5f %8.5f -> %8.5f %8.5f %8.5f -> %8.5f %8.5f\n", + mp->tilt[0], mp->tilt[1], mp->tilt[2], + x_dest, y_dest, + //RAD_TO_DEG(phi), RAD_TO_DEG(theta), + x_plane, y_plane, + x_ray, y_ray, z_ray, *x_src, *y_src); + */ + +} + + /** convert from erect to biplane */ int biplane_erect ( double x_dest,double y_dest, double* x_src, double* y_src, void* params ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dm...@us...> - 2009-09-26 05:34:46
|
Revision: 1080 http://panotools.svn.sourceforge.net/panotools/?rev=1080&view=rev Author: dmg Date: 2009-09-26 05:34:37 +0000 (Sat, 26 Sep 2009) Log Message: ----------- Now both types of tilt/mosaic modes live happily together, new test parms Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/PTcommon.c trunk/libpano/PTcommon.h trunk/libpano/adjust.c trunk/libpano/adjust.h trunk/libpano/correct.c trunk/libpano/filter.h trunk/libpano/math.c trunk/libpano/panorama.h trunk/libpano/parser.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-22 19:46:33 UTC (rev 1079) +++ trunk/libpano/ChangeLog 2009-09-26 05:34:37 UTC (rev 1080) @@ -1,3 +1,33 @@ +2009-09-25 <dm...@uv...> + + * correct.c (SetCorrectDefaults): Initialized values of new parameters. + + * adjust.h (GetGlobalPtr): added parms to its prototype + + * PTcommon.c (panoPrintImage): Refactored this function from adjust.c + + * panorama.h (correct_Prefs): Added new parameters + + * adjust.c (SetAlignParams): Added new variables and renamed tilt ones. + (panoAdjustPrintMakeParams): Renamed function to make it standard. + Renamed variable g to optInfo + (SetAlignParams): Make sure the tilt parameters never go outside + incorrect values. + + * parser.c (panoParseVariable, ParseScript): Refactored some + code. Sorry but I had to reindent the entire function. + + * parser.c (WriteResults): Added new parameters to the output. + + * parser.c (ParseScript): Renamed Tx, Ty, + and Tz to TiX, TiY, and TiZ. Added translation variables TrX, TxY, + and TrZ and test ones Te0, Te1, Te2, Te3. + + * filter.h: Added translation parameters, (trans[XYZ]), renamed + optimization variables to a more meaningful name (suffix optVar), + added a new set of variables for testing new functions in the + stack. + 2009-09-20 21:08 dangelo * adjust.c, panorama.h, filter.h, math.c: Mosaic mode based on Modified: trunk/libpano/PTcommon.c =================================================================== --- trunk/libpano/PTcommon.c 2009-09-22 19:46:33 UTC (rev 1079) +++ trunk/libpano/PTcommon.c 2009-09-26 05:34:37 UTC (rev 1080) @@ -56,7 +56,7 @@ // Uncomment following line to enable testing of inverses in getROI -// #define PANO_TEST_INVERSE +#define PANO_TEST_INVERSE int panoFlattenTIFF(fullPath * fullPathImages, int counterImageFiles, @@ -718,7 +718,7 @@ int ebx; - int croppedTIFFIntermediate = 1; + int croppedTIFFIntermediate = 0; int croppedWidth = 0, croppedHeight = 0; PTRect ROIRect; unsigned int outputScanlineNumber = 0; @@ -892,7 +892,7 @@ } else { PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); } - // croppedTIFFIntermediate = 0; + //croppedTIFFIntermediate = 0; @@ -1921,3 +1921,37 @@ return 0; } + + + +void panoPrintImage(char *msg, Image *im) +{ + printf("-------------%s\n", msg); + if (im != NULL) { + printf(">>>Image format %d\n", im->format); + printf(">>>Roll %f\n", im->roll); + printf(">>>Pitch %f\n", im->pitch); + printf(">>>Yaw %f\n", im->yaw); + + printf(">>>im->cP.shear %d\n", im->cP.shear); + printf(">>>im->cP.tilt %d\n", im->cP.tilt); + printf(">>>im->cP.tilt_x %f\n", im->cP.tilt_x); + printf(">>>im->cP.tilt_y %f\n", im->cP.tilt_y); + printf(">>>im->cP.tilt_z %f\n", im->cP.tilt_z); + printf(">>>im->cP.tilt_scale %f\n", im->cP.tilt_scale); + + printf(">>>im->cP.translation %d\n", im->cP.trans); + printf(">>>im->cP.trans_x %f\n", im->cP.trans_x); + printf(">>>im->cP.trans_y %f\n", im->cP.trans_y); + printf(">>>im->cP.trans_z %f\n", im->cP.trans_z); + + printf(">>>im->cP.test %d\n", im->cP.test); + printf(">>>im->cP.test parm1 %f\n", im->cP.test_p0); + printf(">>>im->cP.test parm2 %f\n", im->cP.test_p1); + printf(">>>im->cP.test parm3 %f\n", im->cP.test_p2); + printf(">>>im->cP.test parm4 %f\n", im->cP.test_p3); + } + printf("\n\n"); + +} + Modified: trunk/libpano/PTcommon.h =================================================================== --- trunk/libpano/PTcommon.h 2009-09-22 19:46:33 UTC (rev 1079) +++ trunk/libpano/PTcommon.h 2009-09-26 05:34:37 UTC (rev 1080) @@ -80,4 +80,7 @@ int panoCroppingMain(int argc,char *argv[], int operation, char *version,char *usage, char *defaultPrefix); +void panoPrintImage(char *msg, Image *im); + + #endif Modified: trunk/libpano/adjust.c =================================================================== --- trunk/libpano/adjust.c 2009-09-22 19:46:33 UTC (rev 1079) +++ trunk/libpano/adjust.c 2009-09-26 05:34:37 UTC (rev 1080) @@ -1,4 +1,4 @@ -/* Panorama_Tools - Generate, Edit and Convert Panoramic Images +/* Panorama_Tools - Generate, Edit and Convert Panoramic Images Copyright (C) 1998,1999 - Helmut Dersch de...@fh... This program is free software; you can redistribute it and/or modify @@ -36,13 +36,16 @@ panorama size (feature change) 6) Report rms error during optimization (bug fix) */ +#include <math.h> #include "filter.h" #include "f2c.h" #include <float.h> +#include <assert.h> +#include <PTcommon.h> -#define C_FACTOR 100.0 +#define C_FACTOR 100.0 -static AlignInfo *g; // This struct holds all informations for the optimization +static AlignInfo *optInfo; // This struct holds all informations for the optimization static double initialAvgFov; // these three for fov stabilization static double avgfovFromSAP; @@ -51,397 +54,428 @@ #define ADJUST_LOG_FILENAME "PToolsLog.txt" // file name for logging, if enabled #define ADJUST_LOGGING_ENABLED 0 -// enable mosaic with X,Y,Z camera positions instead of tilt -//#define MOSAIC_XYZ 1 - FILE* adjustLogFile = 0; -void ColCorrect( Image *im, double ColCoeff[3][2] ); -void GetColCoeff( Image *src, Image *buf, double ColCoeff[3][2] ); -void getControlPoints( Image *im, struct controlPoint *cp ); -void writeControlPoints( struct controlPoint *cp,char* cdesc ); -int CheckParams( AlignInfo *g ); -static int CheckMakeParams( aPrefs *aP); -//static int GetOverlapRect( PTRect *OvRect, PTRect *r1, PTRect *r2 ); -int AddEdgePoints( AlignInfo *gl ); -int pt_average( UCHAR* pixel, int BytesPerLine, double rgb[3], int bytesPerChannel ); -double distsqLine(int N0, int N1); +void ColCorrect( Image *im, double ColCoeff[3][2] ); +void GetColCoeff( Image *src, Image *buf, double ColCoeff[3][2] ); +void getControlPoints( Image *im, struct controlPoint *cp ); +void writeControlPoints( struct controlPoint *cp,char* cdesc ); +int CheckParams( AlignInfo *g ); +static int CheckMakeParams( aPrefs *aP); +//static int GetOverlapRect( PTRect *OvRect, PTRect *r1, PTRect *r2 ); +int AddEdgePoints( AlignInfo *gl ); +int pt_average( UCHAR* pixel, int BytesPerLine, double rgb[3], int bytesPerChannel ); +double distsqLine(int N0, int N1); + +void panoAdjustPrintMakeParams(char *msg, struct MakeParams *mp, Image *im) +{ + printf("-------------%s\n", msg); + if (mp != NULL) { + printf("distnace %f\n", mp->distance); + printf("shear[0] %f\n", mp->shear[0]); + printf("shear[1] %f\n", mp->shear[1]); + printf("rot[0] %f\n", mp->rot[0]); + printf("rot[1] %f\n", mp->rot[1]); + printf("tilt[0] %f\n", mp->tilt[0]); + printf("tilt[1] %f\n", mp->tilt[1]); + printf("tilt[2] %f\n", mp->tilt[2]); + printf("tilt[3] %f\n", mp->tilt[3]); + + printf("trans[0] %f\n", mp->trans[0]); + printf("trans[1] %f\n", mp->trans[1]); + printf("trans[2] %f\n", mp->trans[2]); + + printf("test[0] %f\n", mp->test[0]); + printf("test[1] %f\n", mp->test[1]); + printf("test[2] %f\n", mp->test[2]); + printf("test[3] %f\n", mp->test[3]); + + + printf("mp->horizontal %f\n", mp->horizontal); + printf("mp->vertical %f\n", mp->vertical); + } + panoPrintImage(msg, im); + printf("\n\n"); + +} + + void adjust(TrformStr *TrPtr, aPrefs *prefs) { - int destwidth, destheight; - aPrefs aP, *aPtr=NULL; + int destwidth, destheight; + aPrefs aP, *aPtr=NULL; #if 0 - int nt = 0; // Morph parameters - PTTriangle *ts=NULL; - PTTriangle *td=NULL; + int nt = 0; // Morph parameters + PTTriangle *ts=NULL; + PTTriangle *td=NULL; #endif - SetAdjustDefaults(&aP); + SetAdjustDefaults(&aP); - switch( prefs->mode & 7 )// Should we use prefs, or read from script? - { - case _insert: - case _extract: - if( prefs->mode & _useScript ){ - aPtr = readAdjustLine( &(prefs->scriptFile) ); - if(aPtr==NULL){ - PrintError("Error processing script file" ); - TrPtr->success = 0; - return; - } - memcpy(&aP, aPtr, sizeof(aPrefs)); - free(aPtr); aPtr = &aP; + switch( prefs->mode & 7 )// Should we use prefs, or read from script? + { + case _insert: + case _extract: + if( prefs->mode & _useScript ){ + aPtr = readAdjustLine( &(prefs->scriptFile) ); + if(aPtr==NULL){ + PrintError("Error processing script file" ); + TrPtr->success = 0; + return; + } + memcpy(&aP, aPtr, sizeof(aPrefs)); + free(aPtr); aPtr = &aP; - if( (TrPtr->mode & 7) == _usedata ){ // Report panorama format and stitching info back to calling app. - memcpy( &prefs->pano, &aP.pano, sizeof( Image ) ); - memcpy( &prefs->sBuf, &aP.sBuf, sizeof( stBuf ) ); - } + if( (TrPtr->mode & 7) == _usedata ){ // Report panorama format and stitching info back to calling app. + memcpy( &prefs->pano, &aP.pano, sizeof( Image ) ); + memcpy( &prefs->sBuf, &aP.sBuf, sizeof( stBuf ) ); + } - TrPtr->interpolator = aP.interpolator; - TrPtr->gamma = aP.gamma; + TrPtr->interpolator = aP.interpolator; + TrPtr->gamma = aP.gamma; TrPtr->fastStep = aP.fastStep; - + #if 0 - int readmode = 1; - aPtr = &aP; - gsPrPtr->interpolator = TrPtr->interpolator; - gsPrPtr->gamma = TrPtr->gamma; - gsPrPtr->fastStep = TrPtr->fastStep; - if( TrPtr->mode & _destSupplied ){ - PTRect* p = &TrPtr->dest->selection; - if( !(p->bottom == 0 && p->right == 0) && - !(p->right == TrPtr->dest->width && - p->bottom == TrPtr->dest->height) ) - readmode = 0; - } - if( readAdjust( aPtr, &(prefs->scriptFile), readmode, gsPrPtr ) != 0 ) - { - PrintError("Error processing script file" ); - TrPtr->success = 0; - return; - } - if( (TrPtr->mode & 7) == _usedata ) // Report panorama format and stitching info back to calling app. - { - memcpy( &prefs->pano, &aP.pano, sizeof( Image ) ); - memcpy( &prefs->sBuf, &aP.sBuf, sizeof( stBuf ) ); - } - // Use modevalues read from script - TrPtr->interpolator = gsPrPtr->interpolator; - TrPtr->gamma = gsPrPtr->gamma; + int readmode = 1; + aPtr = &aP; + gsPrPtr->interpolator = TrPtr->interpolator; + gsPrPtr->gamma = TrPtr->gamma; + gsPrPtr->fastStep = TrPtr->fastStep; + if( TrPtr->mode & _destSupplied ){ + PTRect* p = &TrPtr->dest->selection; + if( !(p->bottom == 0 && p->right == 0) && + !(p->right == TrPtr->dest->width && + p->bottom == TrPtr->dest->height) ) + readmode = 0; + } + if( readAdjust( aPtr, &(prefs->scriptFile), readmode, gsPrPtr ) != 0 ) + { + PrintError("Error processing script file" ); + TrPtr->success = 0; + return; + } + if( (TrPtr->mode & 7) == _usedata ) // Report panorama format and stitching info back to calling app. + { + memcpy( &prefs->pano, &aP.pano, sizeof( Image ) ); + memcpy( &prefs->sBuf, &aP.sBuf, sizeof( stBuf ) ); + } + // Use modevalues read from script + TrPtr->interpolator = gsPrPtr->interpolator; + TrPtr->gamma = gsPrPtr->gamma; TrPtr->fastStep = gsPrPtr->fastStep; - - // Parse script again, now reading triangles if morphing requested - if( aPtr->im.cP.correction_mode & correction_mode_morph ) - { - char* script; - AlignInfo ainf; - int nIm, nPts; // Number of image being processed - Image im[2]; - - script = LoadScript( &(prefs->scriptFile) ); - if( script != NULL ) // We can read the scriptfile - { - nIm = numLines( script, '!' ) - 1; - - if( nIm < 0) - nIm = numLines( script, 'o' ) - 1; - - // Set ainf - ainf.nt = 0; - ainf.t = NULL; - ainf.numIm = 2; - ainf.im = im; - memcpy( &ainf.pano, &aP.pano, sizeof( Image )); - memcpy( &ainf.im[0], &aP.pano, sizeof( Image )); - memcpy( &ainf.im[1], &aP.pano, sizeof( Image )); - - nPts = ReadMorphPoints( script, &ainf, nIm ); - if(nPts > 0) // Found Points - { - AddEdgePoints( &ainf ); - TriangulatePoints( &ainf, 1 ); - nt = ainf.nt; - if(nt > 0) - { - SortControlPoints ( &ainf, 1 ); - SetSourceTriangles ( &ainf, 1, &td ); - SetDestTriangles ( &ainf, 1, &ts ); - } - } - if(ainf.numPts > 0) free(ainf.cpt); - free( script ); - } - } + + // Parse script again, now reading triangles if morphing requested + if( aPtr->im.cP.correction_mode & correction_mode_morph ) + { + char* script; + AlignInfo ainf; + int nIm, nPts; // Number of image being processed + Image im[2]; + + script = LoadScript( &(prefs->scriptFile) ); + if( script != NULL ) // We can read the scriptfile + { + nIm = numLines( script, '!' ) - 1; + + if( nIm < 0) + nIm = numLines( script, 'o' ) - 1; + + // Set ainf + ainf.nt = 0; + ainf.t = NULL; + ainf.numIm = 2; + ainf.im = im; + memcpy( &ainf.pano, &aP.pano, sizeof( Image )); + memcpy( &ainf.im[0], &aP.pano, sizeof( Image )); + memcpy( &ainf.im[1], &aP.pano, sizeof( Image )); + + nPts = ReadMorphPoints( script, &ainf, nIm ); + if(nPts > 0) // Found Points + { + AddEdgePoints( &ainf ); + TriangulatePoints( &ainf, 1 ); + nt = ainf.nt; + if(nt > 0) + { + SortControlPoints ( &ainf, 1 ); + SetSourceTriangles ( &ainf, 1, &td ); + SetDestTriangles ( &ainf, 1, &ts ); + } + } + if(ainf.numPts > 0) free(ainf.cpt); + free( script ); + } + } #endif - }else{ - aPtr = prefs; - } - break; - default: - break; - } - switch( prefs->mode & 7) - { - case _insert: // Create a panoramic image using src; merge with buffer if required - // Find brightest rectangle if this is a circular fisheye image - { - Image ImCrop, *theSrc=NULL; - // Initialise at least the data pointer since cutTheFrame may not do it - ImCrop.data = NULL; - - if( aPtr->im.format ==_fisheye_circ && aPtr->im.cP.cutFrame ) - { - int fwidth = TrPtr->src->width, fheight = TrPtr->src->height; - - if( aPtr->im.cP.frame ) // subtract framewidth from width/height - { - fwidth = TrPtr->src->width - aPtr->im.cP.frame; - if( aPtr->im.cP.frame < fwidth ) fwidth -= aPtr->im.cP.frame; - if( aPtr->im.cP.frame < fheight) fheight-= aPtr->im.cP.frame; - } - else - { - if( aPtr->im.cP.fwidth > 0) - fwidth = aPtr->im.cP.fwidth; - if( aPtr->im.cP.fheight > 0) - fheight = aPtr->im.cP.fheight; - } - - if( cutTheFrame( &ImCrop, TrPtr->src, fwidth, fheight, TrPtr->mode & _show_progress ) != 0 ) - { - PrintError("Error Cropping Image"); - TrPtr->success = 0; - return; - } - theSrc = TrPtr->src; - TrPtr->src = &ImCrop; - - } - // Image params are set as src - aPtr->im.width = TrPtr->src->width; - aPtr->im.height = TrPtr->src->height; - - // Pano is set to buffer, if merging requested; else as prefs - if( *aPtr->sBuf.srcName != 0 ) - { - if (LoadBufImage( &(aPtr->pano), aPtr->sBuf.srcName, 0) != 0 ) - { - PrintError( "Error loading Buffer; trying without" ); - } - } - - if( aPtr->pano.width == 0 && aPtr->im.hfov != 0.0) - { - aPtr->pano.width = (pt_int32)(aPtr->im.width * aPtr->pano.hfov / aPtr->im.hfov); - aPtr->pano.width/=10; aPtr->pano.width*=10; - } - if( aPtr->pano.height == 0 ) - aPtr->pano.height = aPtr->pano.width/2; + }else{ + aPtr = prefs; + } + break; + default: + break; + } + switch( prefs->mode & 7) + { + case _insert: // Create a panoramic image using src; merge with buffer if required + // Find brightest rectangle if this is a circular fisheye image + { + Image ImCrop, *theSrc=NULL; + // Initialise at least the data pointer since cutTheFrame may not do it + ImCrop.data = NULL; + + if( aPtr->im.format ==_fisheye_circ && aPtr->im.cP.cutFrame ) + { + int fwidth = TrPtr->src->width, fheight = TrPtr->src->height; + + if( aPtr->im.cP.frame ) // subtract framewidth from width/height + { + fwidth = TrPtr->src->width - aPtr->im.cP.frame; + if( aPtr->im.cP.frame < fwidth ) fwidth -= aPtr->im.cP.frame; + if( aPtr->im.cP.frame < fheight) fheight-= aPtr->im.cP.frame; + } + else + { + if( aPtr->im.cP.fwidth > 0) + fwidth = aPtr->im.cP.fwidth; + if( aPtr->im.cP.fheight > 0) + fheight = aPtr->im.cP.fheight; + } + + if( cutTheFrame( &ImCrop, TrPtr->src, fwidth, fheight, TrPtr->mode & _show_progress ) != 0 ) + { + PrintError("Error Cropping Image"); + TrPtr->success = 0; + return; + } + theSrc = TrPtr->src; + TrPtr->src = &ImCrop; + + } + // Image params are set as src + aPtr->im.width = TrPtr->src->width; + aPtr->im.height = TrPtr->src->height; + + // Pano is set to buffer, if merging requested; else as prefs + if( *aPtr->sBuf.srcName != 0 ) + { + if (LoadBufImage( &(aPtr->pano), aPtr->sBuf.srcName, 0) != 0 ) + { + PrintError( "Error loading Buffer; trying without" ); + } + } + + if( aPtr->pano.width == 0 && aPtr->im.hfov != 0.0) + { + aPtr->pano.width = (pt_int32)(aPtr->im.width * aPtr->pano.hfov / aPtr->im.hfov); + aPtr->pano.width/=10; aPtr->pano.width*=10; + } + if( aPtr->pano.height == 0 ) + aPtr->pano.height = aPtr->pano.width/2; - destheight = aPtr->pano.height; - destwidth = aPtr->pano.width; - - if( destheight == 0 || destwidth == 0 ) - { - PrintError("Please set Panorama width/height" ); - TrPtr->success = 0; - goto _insert_exit; - } - - - if( SetDestImage( TrPtr, destwidth, destheight) != 0) - { - PrintError("Could not allocate %ld bytes",TrPtr->dest->dataSize ); - TrPtr->success = 0; - goto _insert_exit; - } - TrPtr->mode |= _honor_valid; - CopyPosition( TrPtr->src, &(aPtr->im) ); - CopyPosition( TrPtr->dest, &(aPtr->pano) ); + destheight = aPtr->pano.height; + destwidth = aPtr->pano.width; + + if( destheight == 0 || destwidth == 0 ) + { + PrintError("Please set Panorama width/height" ); + TrPtr->success = 0; + goto _insert_exit; + } + + + if( SetDestImage( TrPtr, destwidth, destheight) != 0) + { + PrintError("Could not allocate %ld bytes",TrPtr->dest->dataSize ); + TrPtr->success = 0; + goto _insert_exit; + } + TrPtr->mode |= _honor_valid; + CopyPosition( TrPtr->src, &(aPtr->im) ); + CopyPosition( TrPtr->dest, &(aPtr->pano) ); // JMW 2008/01/07 Alpha is valid data don't override it with blank data -// addAlpha( TrPtr->src ); // Add alpha channel to indicate valid data - - aPtr->mode = prefs->mode; // For checkparam - MakePano( TrPtr, aPtr ); - - if(aPtr->ts) free(aPtr->ts); - if(aPtr->td) free(aPtr->td); +// addAlpha( TrPtr->src ); // Add alpha channel to indicate valid data + + aPtr->mode = prefs->mode; // For checkparam + MakePano( TrPtr, aPtr ); + + if(aPtr->ts) free(aPtr->ts); + if(aPtr->td) free(aPtr->td); - // Stitch images; Proceed only if panoramic image valid + // Stitch images; Proceed only if panoramic image valid - if( TrPtr->success ) - { - if( *(aPtr->sBuf.srcName) != 0 ){ // We have to merge in one images - // Load the bufferimage - if( LoadBufImage( &aPtr->pano, aPtr->sBuf.srcName, 1 ) != 0 ) - { - PrintError( "Could not load buffer %s; Keeping Source",aPtr->sBuf.srcName ); - goto _insert_exit; - } + if( TrPtr->success ) + { + if( *(aPtr->sBuf.srcName) != 0 ){ // We have to merge in one images + // Load the bufferimage + if( LoadBufImage( &aPtr->pano, aPtr->sBuf.srcName, 1 ) != 0 ) + { + PrintError( "Could not load buffer %s; Keeping Source",aPtr->sBuf.srcName ); + goto _insert_exit; + } - if( HaveEqualSize( &aPtr->pano, TrPtr->dest )) - { - - // At this point we have two valid, equally sized images - // Do Colour Correction on one or both images - DoColorCorrection( TrPtr->dest, &aPtr->pano, aPtr->sBuf.colcorrect & 3); - - if( merge( TrPtr->dest , &aPtr->pano, aPtr->sBuf.feather, TrPtr->mode & _show_progress, aPtr->sBuf.seam ) != 0 ) - { - PrintError( "Error merging images. Keeping Source" ); - } - } - myfree( (void**)aPtr->pano.data ); - } // src != 0 - - if( *(aPtr->sBuf.destName) != 0 ) // save buffer image - { - if( SaveBufImage( TrPtr->dest, aPtr->sBuf.destName ) != 0 ) - PrintError( "Could not save to Buffer. Most likely your disk is full"); - } - } // Tr.success - + if( HaveEqualSize( &aPtr->pano, TrPtr->dest )) + { + + // At this point we have two valid, equally sized images + // Do Colour Correction on one or both images + DoColorCorrection( TrPtr->dest, &aPtr->pano, aPtr->sBuf.colcorrect & 3); + + if( merge( TrPtr->dest , &aPtr->pano, aPtr->sBuf.feather, TrPtr->mode & _show_progress, aPtr->sBuf.seam ) != 0 ) + { + PrintError( "Error merging images. Keeping Source" ); + } + } + myfree( (void**)aPtr->pano.data ); + } // src != 0 + + if( *(aPtr->sBuf.destName) != 0 ) // save buffer image + { + if( SaveBufImage( TrPtr->dest, aPtr->sBuf.destName ) != 0 ) + PrintError( "Could not save to Buffer. Most likely your disk is full"); + } + } // Tr.success + - if( TrPtr->success == 0 && ! (TrPtr->mode & _destSupplied) ) - myfree( (void**)TrPtr->dest->data ); - - _insert_exit: - if( aPtr->im.format ==_fisheye_circ && aPtr->im.cP.cutFrame ) // There is a cropped source image; - { - if( ImCrop.data != NULL ) - myfree( (void**) ImCrop.data ); - TrPtr->src = theSrc; - } - - } - break; - - case _extract: - - if( aPtr->im.width == 0 ) - { - aPtr->im.width = 500 ; - } - if( aPtr->im.height == 0 ) - { - aPtr->im.height = aPtr->im.width * 4 / 5; - } - - // Set pano-params to src-image irrespective of prefs - aPtr->pano.width = TrPtr->src->width; // width of panorama - aPtr->pano.height = TrPtr->src->height; // height of panorama - - CopyPosition( TrPtr->src, &(aPtr->pano) ); -// addAlpha( TrPtr->src ); - - if( *(aPtr->sBuf.destName) != 0 ) // save buffer image - { - if( SaveBufImage( TrPtr->src, aPtr->sBuf.destName ) != 0 ) - PrintError( "Could not save Buffer Image. Most likely your disk is full"); - } - - // Set up Image Structure in TrPtr struct + if( TrPtr->success == 0 && ! (TrPtr->mode & _destSupplied) ) + myfree( (void**)TrPtr->dest->data ); + + _insert_exit: + if( aPtr->im.format ==_fisheye_circ && aPtr->im.cP.cutFrame ) // There is a cropped source image; + { + if( ImCrop.data != NULL ) + myfree( (void**) ImCrop.data ); + TrPtr->src = theSrc; + } + + } + break; + + case _extract: + + if( aPtr->im.width == 0 ) + { + aPtr->im.width = 500 ; + } + if( aPtr->im.height == 0 ) + { + aPtr->im.height = aPtr->im.width * 4 / 5; + } + + // Set pano-params to src-image irrespective of prefs + aPtr->pano.width = TrPtr->src->width; // width of panorama + aPtr->pano.height = TrPtr->src->height; // height of panorama + + CopyPosition( TrPtr->src, &(aPtr->pano) ); +// addAlpha( TrPtr->src ); + + if( *(aPtr->sBuf.destName) != 0 ) // save buffer image + { + if( SaveBufImage( TrPtr->src, aPtr->sBuf.destName ) != 0 ) + PrintError( "Could not save Buffer Image. Most likely your disk is full"); + } + + // Set up Image Structure in TrPtr struct - destheight = aPtr->im.height; - destwidth = aPtr->im.width; + destheight = aPtr->im.height; + destwidth = aPtr->im.width; - if( SetDestImage( TrPtr, destwidth, destheight) != 0) - { - PrintError("Could not allocate %ld bytes",TrPtr->dest->dataSize ); - TrPtr->success = 0; - return; - } + if( SetDestImage( TrPtr, destwidth, destheight) != 0) + { + PrintError("Could not allocate %ld bytes",TrPtr->dest->dataSize ); + TrPtr->success = 0; + return; + } - CopyPosition( TrPtr->dest, &(aPtr->im) ); + CopyPosition( TrPtr->dest, &(aPtr->im) ); - TrPtr->mode |= _honor_valid; - if( aPtr->pano.hfov == 360.0 ) - TrPtr->mode |= _wrapX; - - aPtr->mode = prefs->mode; // For checkparam - ExtractStill( TrPtr, aPtr ); - - - if( TrPtr->success == 0 && ! (TrPtr->mode & _destSupplied)) - myfree( (void**)TrPtr->dest->data ); - break; - - case _readControlPoints: - { - char *script, *newscript, cdesc[1000]; - controlPoint cp[NUMPTS]; // List of Control points + TrPtr->mode |= _honor_valid; + if( aPtr->pano.hfov == 360.0 ) + TrPtr->mode |= _wrapX; + + aPtr->mode = prefs->mode; // For checkparam + ExtractStill( TrPtr, aPtr ); + + + if( TrPtr->success == 0 && ! (TrPtr->mode & _destSupplied)) + myfree( (void**)TrPtr->dest->data ); + break; + + case _readControlPoints: + { + char *script, *newscript, cdesc[1000]; + controlPoint cp[NUMPTS]; // List of Control points - script = LoadScript( &(prefs->scriptFile) ); - if( script != NULL ) // We can read the scriptfile - { - newscript = (char*) malloc( strlen(script) + NUMPTS * 60 ); // One line per pair of points - if( newscript != NULL ) - { - readControlPoints( script, cp ); // If this is the second image: get coordinates in first - getControlPoints( TrPtr->src, cp ); // Scan image and find control points - writeControlPoints( cp, cdesc ); // format control point coordinates - - sprintf( newscript, "%s\n%s", script, cdesc ); - - if( WriteScript( newscript,&( prefs->scriptFile), 0 ) != 0 ) - PrintError( "Could not write Scriptfile" ); - free( newscript ); - } - free( script ); - } + script = LoadScript( &(prefs->scriptFile) ); + if( script != NULL ) // We can read the scriptfile + { + newscript = (char*) malloc( strlen(script) + NUMPTS * 60 ); // One line per pair of points + if( newscript != NULL ) + { + readControlPoints( script, cp ); // If this is the second image: get coordinates in first + getControlPoints( TrPtr->src, cp ); // Scan image and find control points + writeControlPoints( cp, cdesc ); // format control point coordinates + + sprintf( newscript, "%s\n%s", script, cdesc ); + + if( WriteScript( newscript,&( prefs->scriptFile), 0 ) != 0 ) + PrintError( "Could not write Scriptfile" ); + free( newscript ); + } + free( script ); + } - } - TrPtr->success = 0; // Don't destroy image! - break; + } + TrPtr->success = 0; // Don't destroy image! + break; - case _runOptimizer: - // Run Optimizer; Dummy image needed but not changed - { - char* script; - OptInfo opt; - AlignInfo ainf; + case _runOptimizer: + // Run Optimizer; Dummy image needed but not changed + { + char* script; + OptInfo opt; + AlignInfo ainf; - script = LoadScript( &(prefs->scriptFile) ); - if( script != NULL ) // We can read the scriptfile - { - if (ParseScript( script, &ainf ) == 0) - { - if( CheckParams( &ainf ) == 0 ) // and it seems to make sense - { - ainf.fcn = fcnPano; - - SetGlobalPtr( &ainf ); - - opt.numVars = g->numParam; - opt.numData = g->numPts; - opt.SetVarsToX = SetLMParams; - opt.SetXToVars = SetAlignParams; - opt.fcn = g->fcn; - *opt.message = 0; + script = LoadScript( &(prefs->scriptFile) ); + if( script != NULL ) // We can read the scriptfile + { + if (ParseScript( script, &ainf ) == 0) + { + if( CheckParams( &ainf ) == 0 ) // and it seems to make sense + { + ainf.fcn = fcnPano; + + // optInfo is a static variable that is used in all optimizations + SetGlobalPtr( &ainf ); // equivalent to optInfo = &ainf; + + opt.numVars = optInfo->numParam; + opt.numData = optInfo->numPts; + opt.SetVarsToX = SetLMParams; + opt.SetXToVars = SetAlignParams; + opt.fcn = optInfo->fcn; + *opt.message = 0; + RunLMOptimizer( &opt ); + optInfo->data = opt.message; + WriteResults( script, &(prefs->scriptFile), optInfo, distSquared , + ( TrPtr->mode & 7 ) != _usedata ); + } + DisposeAlignInfo( &ainf ); // These were allocated by 'ParseScript()' + } + free( script ); + } + } + + TrPtr->success = 0; // Don't destroy Dummy image! + break; + default: + TrPtr->success = 0; + break; - RunLMOptimizer( &opt ); - g->data = opt.message; - WriteResults( script, &(prefs->scriptFile), g, distSquared , - ( TrPtr->mode & 7 ) != _usedata ); - } - DisposeAlignInfo( &ainf ); // These were allocated by 'ParseScript()' - } - free( script ); - } - } - - TrPtr->success = 0; // Don't destroy Dummy image! - break; - default: - TrPtr->success = 0; - break; - - } + } } @@ -450,7 +484,7 @@ void MakePano( TrformStr *TrPtr, aPrefs *aP ) { - MyMakePano( TrPtr, aP, 1 ); + MyMakePano( TrPtr, aP, 1 ); } @@ -459,63 +493,63 @@ of the image that has to be converted.*/ void MyMakePano( TrformStr *TrPtr, aPrefs *aP, int imageNum ) { - struct MakeParams mp,mpinv; - fDesc stack[15], fD; // Parameters for execute - fDesc invstack[15], finvD; // Invers Parameters for execute - void *morph[3]; + struct MakeParams mp,mpinv; + fDesc stack[15], fD; // Parameters for execute + fDesc invstack[15], finvD; // Invers Parameters for execute + void *morph[3]; - int i,k, kstart, kend, color; + int i,k, kstart, kend, color; - TrPtr->success = 1; - - if( CheckMakeParams( aP) != 0) - { - TrPtr->success = 0; - return; - } + TrPtr->success = 1; + + if( CheckMakeParams( aP) != 0) + { + TrPtr->success = 0; + return; + } - if( isColorSpecific( &(aP->im.cP) ) ) // Color dependent - { - kstart = 1; kend = 4; - } - else // Color independent - { - kstart = 0; kend = 1; - } - - for( k = kstart; k < kend; k++ ) - { - color = k-1; if( color < 0 ) color = 0; - SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); - SetInvMakeParamsCorrect( invstack, &mpinv, &(aP->im) , &(aP->pano), color ); - - if( aP->nt > 0 ) // Morphing requested - { - morph[0] = (void*)aP->td; - morph[1] = (void*)aP->ts; - morph[2] = (void*)&aP->nt; + if( isColorSpecific( &(aP->im.cP) ) ) // Color dependent + { + kstart = 1; kend = 4; + } + else // Color independent + { + kstart = 0; kend = 1; + } + + for( k = kstart; k < kend; k++ ) + { + color = k-1; if( color < 0 ) color = 0; + SetMakeParams( stack, &mp, &(aP->im) , &(aP->pano), color ); + SetInvMakeParamsCorrect( invstack, &mpinv, &(aP->im) , &(aP->pano), color ); + + if( aP->nt > 0 ) // Morphing requested + { + morph[0] = (void*)aP->td; + morph[1] = (void*)aP->ts; + morph[2] = (void*)&aP->nt; - i=0; while( stack[i].func != NULL && i<14 ) i++; - if( i!=14 ) - { - for(i=14; i>0; i--) - { - memcpy( &stack[i], &stack[i-1], sizeof( fDesc )); - } - stack[0].func = tmorph; - stack[0].param = (void*)morph; - } - } + i=0; while( stack[i].func != NULL && i<14 ) i++; + if( i!=14 ) + { + for(i=14; i>0; i--) + { + memcpy( &stack[i], &stack[i-1], sizeof( fDesc )); + } + stack[0].func = tmorph; + stack[0].param = (void*)morph; + } + } - if( TrPtr->success != 0) - { - fD.func = execute_stack_new; fD.param = stack; - finvD.func = execute_stack_new; finvD.param = invstack; + if( TrPtr->success != 0) + { + fD.func = execute_stack_new; fD.param = stack; + finvD.func = execute_stack_new; finvD.param = invstack; - transFormEx( TrPtr, &fD , &finvD , k, imageNum ); - } - } + transFormEx( TrPtr, &fD , &finvD , k, imageNum ); + } + } } // Extract image from pano in TrPtr->src @@ -524,43 +558,43 @@ void ExtractStill( TrformStr *TrPtr , aPrefs *aP ) { - struct MakeParams mp,mpinv; - fDesc stack[15], fD; // Parameters for execute - fDesc stackinv[15], fDinv; // Invers Parameters for execute + struct MakeParams mp,mpinv; + fDesc stack[15], fD; // Parameters for execute + fDesc stackinv[15], fDinv; // Invers Parameters for execute - int k, kstart, kend, color; + int k, kstart, kend, color; - TrPtr->success = 1; + TrPtr->success = 1; - if( CheckMakeParams( aP) != 0) - { - TrPtr->success = 0; - return; - } - + if( CheckMakeParams( aP) != 0) + { + TrPtr->success = 0; + return; + } + - if( isColorSpecific( &(aP->im.cP) ) ) // Color dependent - { - kstart = 1; kend = 4; - } - else // Color independent - { - kstart = 0; kend = 1; - } - - for( k = kstart; k < kend; k++ ) - { - color = k-1; if( color < 0 ) color = 0; - SetInvMakeParamsCorrect( stack, &mp, &(aP->im), &(aP->pano), color ); - SetMakeParams( stackinv, &mpinv, &(aP->im), &(aP->pano), color ); - - if( TrPtr->success != 0) - { - fD.func = execute_stack_new; fD.param = stack; - fDinv.func = execute_stack_new; fDinv.param = stackinv; - transFormEx( TrPtr, &fD, &fDinv, k, 1 ); - } - } + if( isColorSpecific( &(aP->im.cP) ) ) // Color dependent + { + kstart = 1; kend = 4; + } + else // Color independent + { + kstart = 0; kend = 1; + } + + for( k = kstart; k < kend; k++ ) + { + color = k-1; if( color < 0 ) color = 0; + SetInvMakeParamsCorrect( stack, &mp, &(aP->im), &(aP->pano), color ); + SetMakeParams( stackinv, &mpinv, &(aP->im), &(aP->pano), color ); + + if( TrPtr->success != 0) + { + fD.func = execute_stack_new; fD.param = stack; + fDinv.func = execute_stack_new; fDinv.param = stackinv; + transFormEx( TrPtr, &fD, &fDinv, k, 1 ); + } + } } @@ -734,12 +768,12 @@ case _orthographic: mp->distance = (double) pn->width / (2.0 * sin(b/2.0)); break; - case _biplane: - biplane_distance(pn->width,b,mp); - break; - case _triplane: - triplane_distance(pn->width,b,mp); - break; + case _biplane: + biplane_distance(pn->width,b,mp); + break; + case _triplane: + triplane_distance(pn->width,b,mp); + break; default: // unknown PrintError ("SetMakeParams: Unsupported panorama projection"); @@ -789,425 +823,385 @@ mp->rot[0] = mp->distance * PI; // 180 in screenpoints mp->rot[1] = -im->yaw * mp->distance * PI / 180.0; // rotation angle in screenpoints -#ifdef MOSAIC_XYZ - mp->tilt[0] = im->cP.tilt_x; - mp->tilt[1] = im->cP.tilt_y; - mp->tilt[2] = im->cP.tilt_z; - mp->tilt[3] = im->cP.tilt_scale; -#else mp->tilt[0] = DEG_TO_RAD(im->cP.tilt_x); mp->tilt[1] = DEG_TO_RAD(im->cP.tilt_y); mp->tilt[2] = DEG_TO_RAD(im->cP.tilt_z); mp->tilt[3] = im->cP.tilt_scale; -#endif - /* - printf("Image format %d\n", (int)(im->format)); - printf("distnace %f\n", mp->distance); - printf("shear[0] %f\n", mp->shear[0]); - printf("shear[1] %f\n", mp->shear[1]); - printf("rot[0] %f\n", mp->rot[0]); - printf("rot[1] %f\n", mp->rot[1]); - printf("tilt[0] %f\n", mp->tilt[0]); - printf("tilt[1] %f\n", mp->tilt[1]); - printf("tilt[2] %f\n", mp->tilt[2]); - printf("tilt[3] %f\n", mp->tilt[3]); + mp->trans[0] = im->cP.trans_x; + mp->trans[1] = im->cP.trans_y; + mp->trans[2] = im->cP.trans_z; - printf("mp->horizontal %f\n", mp->horizontal); - printf("mp->vertical %f\n", mp->vertical); - printf(">>>im->cP.shear %d\n", im->cP.shear); - printf(">>>im->cP.tilt %d\n", im->cP.tilt); - */ + + mp->test[0] = im->cP.test_p0; + mp->test[1] = im->cP.test_p1; + mp->test[2] = im->cP.test_p2; + mp->test[3] = im->cP.test_p3; + + // panoAdjustPrintMakeParams("SetmakeParms", mp, im); + mp->perspect[0] = (void*)(mp->mt); mp->perspect[1] = (void*)&(mp->distance); for(i=0; i<4; i++) - mp->rad[i] = im->cP.radial_params[color][i]; + mp->rad[i] = im->cP.radial_params[color][i]; mp->rad[5] = im->cP.radial_params[color][4]; if( (im->cP.correction_mode & 3) == correction_mode_radial ) - mp->rad[4] = ( (double)( image_selection_width < image_selection_height ? image_selection_width : image_selection_height) ) / 2.0; + mp->rad[4] = ( (double)( image_selection_width < image_selection_height ? image_selection_width : image_selection_height) ) / 2.0; else - mp->rad[4] = ((double) image_selection_height) / 2.0; + mp->rad[4] = ((double) image_selection_height) / 2.0; -// Joost: removed, see above -// mp->horizontal = im->cP.horizontal_params[color]; -// mp->vertical = im->cP.vertical_params[color]; + // Joost: removed, see above + // mp->horizontal = im->cP.horizontal_params[color]; + // mp->vertical = im->cP.vertical_params[color]; i = 0; if(pn->format == _rectilinear) // rectilinear panorama - { - SetDesc(stack[i], erect_rect, &(mp->distance) ); i++; // Convert rectilinear to equirect - } + { + SetDesc(stack[i], erect_rect, &(mp->distance) ); i++; // Convert rectilinear to equirect + } else if(pn->format == _panorama) - { - SetDesc(stack[i], erect_pano, &(mp->distance) ); i++; // Convert panoramic to equirect - } + { + SetDesc(stack[i], erect_pano, &(mp->distance) ); i++; // Convert panoramic to equirect + } else if(pn->format == _fisheye_circ || pn->format == _fisheye_ff) - { - SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert fisheye to equirect - } + { + SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert fisheye to equirect + } else if(pn->format == _equisolid) - { - SetDesc(stack[i], sphere_tp_equisolid, &(mp->distance) ); i++; // Convert fisheye equisolid to spherical - SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical to equirect - } + { + SetDesc(stack[i], sphere_tp_equisolid, &(mp->distance) ); i++; // Convert fisheye equisolid to spherical + SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical to equirect + } else if(pn->format == _mirror) - { - SetDesc(stack[i], sphere_cp_mirror, &(mp->distance) ); i++; // Convert mirror to spherical - SetDesc(stack[i], erect_sphere_cp, &(mp->distance) ); i++; // Convert spherical to equirect - } + { + SetDesc(stack[i], sphere_cp_mirror, &(mp->distance) ); i++; // Convert mirror to spherical + SetDesc(stack[i], erect_sphere_cp, &(mp->distance) ); i++; // Convert spherical to equirect + } else if(pn->format == _orthographic) - { - SetDesc(stack[i], sphere_tp_orthographic, &(mp->distance) ); i++; // Convert fisheye orthographic to spherical - SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical to equirect - } + { + SetDesc(stack[i], sphere_tp_orthographic, &(mp->distance) ); i++; // Convert fisheye orthographic to spherical + SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert spherical to equirect + } else if(pn->format == _mercator) - { - SetDesc(stack[i], erect_mercator, &(mp->distance) ); i++; // Convert mercator to equirect - } + { + SetDesc(stack[i], erect_mercator, &(mp->distance) ); i++; // Convert mercator to equirect + } else if(pn->format == _millercylindrical) - { - SetDesc(stack[i], erect_millercylindrical, &(mp->distance) ); i++; // Convert miller to equirect - } + { + SetDesc(stack[i], erect_millercylindrical, &(mp->distance) ); i++; // Convert miller to equirect + } else if(pn->format == _panini) - { - SetDesc(stack[i], erect_panini, &(mp->distance) ); i++; // Convert panini to sphere - } + { + SetDesc(stack[i], erect_panini, &(mp->distance) ); i++; // Convert panini to sphere + } else if(pn->format == _equipanini) - { - SetDesc(stack[i], erect_equipanini, &(mp->distance) ); i++; // Convert equipanini to sphere - } + { + SetDesc(stack[i], erect_equipanini, &(mp->distance) ); i++; // Convert equipanini to sphere + } else if(pn->format == _architectural) - { - SetDesc(stack[i], erect_arch, &(mp->distance) ); i++; // Convert arch to sphere - } + { + SetDesc(stack[i], erect_arch, &(mp->distance) ); i++; // Convert arch to sphere + } else if(pn->format == _lambert) - { - SetDesc(stack[i], erect_lambert, &(mp->distance) ); i++; // Convert lambert to equirect - } + { + SetDesc(stack[i], erect_lambert, &(mp->distance) ); i++; // Convert lambert to equirect + } else if(pn->format == _lambertazimuthal) - { - SetDesc(stack[i], erect_lambertazimuthal, &(mp->distance) ); i++; // Convert lambert to equirect - } + { + SetDesc(stack[i], erect_lambertazimuthal, &(mp->distance) ); i++; // Convert lambert to equirect + } else if(pn->format == _trans_mercator) - { - SetDesc(stack[i], erect_transmercator, &(mp->distance) ); i++; // Convert transverse mercator to equirect - } + { + SetDesc(stack[i], erect_transmercator, &(mp->distance) ); i++; // Convert transverse mercator to equirect + } else if(pn->format == _stereographic) - { - SetDesc(stack[i], erect_stereographic, &(mp->distance) ); i++; // Convert stereographic to equirect - } + { + SetDesc(stack[i], erect_stereographic, &(mp->distance) ); i++; // Convert stereographic to equirect + } else if(pn->format == _sinusoidal) - { - SetDesc(stack[i], erect_sinusoidal, &(mp->distance) ); i++; // Convert sinusoidal to equirect - } + { + SetDesc(stack[i], erect_sinusoidal, &(mp->distance) ); i++; // Convert sinusoidal to equirect + } else if(pn->format == _albersequalareaconic) - { - SetDesc(stack[i], erect_albersequalareaconic, mp ); i++; // Convert albersequalareaconic to equirect - } + { + SetDesc(stack[i], erect_albersequalareaconic, mp ); i++; // Convert albersequalareaconic to equirect + } else if(pn->format == _biplane) - { - SetDesc(stack[i], erect_biplane, mp ); i++; // Convert biplane to equirect - } + { + SetDesc(stack[i], erect_biplane, mp ); i++; // Convert biplane to equirect + } else if(pn->format == _triplane) - { - SetDesc(stack[i], erect_triplane, mp ); i++; // Convert triplane to equirect - } + { + SetDesc(stack[i], erect_triplane, mp ); i++; // Convert triplane to equirect + } else if(pn->format == _equirectangular) - { - // no conversion needed - } else { - PrintError("Projection type %d not supported, using equirectangular", pn->format); + { + // no conversion needed + } else { + PrintError("Projection type %d not supported, using equirectangular", pn->format); } -#ifdef MOSAIC_XYZ - if (im->cP.tilt) { - SetDesc(stack[i], plane_transfer_to_camera, mp); i++; + if (im->cP.trans) { + SetDesc(stack[i], plane_transfer_to_camera, mp); i++; } -#endif - // SetDesc( stack[i], rotate_erect, mp->rot ); i++; // Rotate equirect. image horizontally SetDesc( stack[i], sphere_tp_erect, &(mp->distance) ); i++; // Convert spherical image to equirect. SetDesc( stack[i], persp_sphere, mp->perspect ); i++; // Perspective Control spherical Image if(im->format == _rectilinear) // rectilinear image - { - SetDesc(stack[i], rect_sphere_tp, &(mp->distance) ); i++; // Convert rectilinear to spherical - } + { + SetDesc(stack[i], rect_sphere_tp, &(mp->distance) ); i++; // Convert rectilinear to spherical + } else if(im->format == _panorama) // pamoramic image - { - SetDesc(stack[i], pano_sphere_tp, &(mp->distance) ); i++; // Convert panoramic to spherical - } + { + SetDesc(stack[i], pano_sphere_tp, &(mp->distance) ); i++; // Convert panoramic to spherical + } else if(im->format == _equirectangular) // equirectangular image - { - SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert equirectangular to spherical - } + { + SetDesc(stack[i], erect_sphere_tp, &(mp->distance) ); i++; // Convert equirectangular to spherical + } SetDesc( stack[i], resize, mp->scale ); i++; // Scale image if( im->cP.radial ) - { - switch( im->cP.correction_mode & 3 ) - { - case correction_mode_radial: SetDesc(stack[i],radial,mp->rad); i++; break; - case correction_mode_vertical: SetDesc(stack[i],vertical,mp->rad); i++; break; - case correction_mode_deregister:SetDesc(stack[i],deregister,mp->rad); i++; break; - } - } -#ifndef MOSAIC_XYZ + { + switch( im->cP.correction_mode & 3 ) + { + case correction_mode_radial: SetDesc(stack[i],radial,mp->rad); i++; break; + case correction_mode_vertical: SetDesc(stack[i],vertical,mp->rad); i++; break; + case correction_mode_deregister:SetDesc(stack[i],deregister,mp->rad); i++; break; + } + } if (im->cP.tilt) { - SetDesc(stack[i], tiltInverse, mp); i++; + SetDesc(stack[i], tiltInverse, ... [truncated message content] |
From: <dm...@us...> - 2009-09-26 05:57:14
|
Revision: 1081 http://panotools.svn.sourceforge.net/panotools/?rev=1081&view=rev Author: dmg Date: 2009-09-26 05:57:07 +0000 (Sat, 26 Sep 2009) Log Message: ----------- commented debugging Modified Paths: -------------- trunk/libpano/ChangeLog trunk/libpano/parser.c Modified: trunk/libpano/ChangeLog =================================================================== --- trunk/libpano/ChangeLog 2009-09-26 05:34:37 UTC (rev 1080) +++ trunk/libpano/ChangeLog 2009-09-26 05:57:07 UTC (rev 1081) @@ -1,4 +1,8 @@ 2009-09-25 <dm...@uv...> + + * parser.c (ReadImageDescription): Removed a debugging printf I forgot + +2009-09-25 <dm...@uv...> * correct.c (SetCorrectDefaults): Initialized values of new parameters. Modified: trunk/libpano/parser.c =================================================================== --- trunk/libpano/parser.c 2009-09-26 05:34:37 UTC (rev 1080) +++ trunk/libpano/parser.c 2009-09-26 05:57:07 UTC (rev 1081) @@ -1894,7 +1894,7 @@ memcpy( imPtr, &im, sizeof(Image) ); memcpy( sPtr, &sBuf, sizeof(stBuf ) ); - panoPrintImage("After read image", imPtr); + // panoPrintImage("After read image", imPtr); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-09-26 20:41:24
|
Revision: 1083 http://panotools.svn.sourceforge.net/panotools/?rev=1083&view=rev Author: brunopostle Date: 2009-09-26 20:41:15 +0000 (Sat, 26 Sep 2009) Log Message: ----------- auto-generated ChangeLog.svn file Modified Paths: -------------- trunk/libpano/Makefile.am Added Paths: ----------- trunk/libpano/ChangeLog.svn Added: trunk/libpano/ChangeLog.svn =================================================================== --- trunk/libpano/ChangeLog.svn (rev 0) +++ trunk/libpano/ChangeLog.svn 2009-09-26 20:41:15 UTC (rev 1083) @@ -0,0 +1,3166 @@ +2009-09-26 dmg + + * [r1082] parser.c: commented debugging + * [r1081] ChangeLog, parser.c: commented debugging + * [r1080] ChangeLog, PTcommon.c, PTcommon.h, adjust.c, adjust.h, + correct.c, filter.h, math.c, panorama.h, parser.c: Now both types of + tilt/mosaic modes live happily together, new test parms + +2009-09-22 dangelo + + * [r1079] ChangeLog, adjust.c, filter.h, math.c: Mosaic mode based on + camera position (not compiled by default). + +2009-09-21 kornelbenko + + * [r1078] CMakeLists.txt, tools/CMakeLists.txt: Added needed libraries + to create tools + +2009-09-20 brunopostle + + * [r1077] ChangeLog: update ChangeLog + * [r1076] Makefile.am, man/Makefile.am, tests/Makefile.am, + tests/simpleStitch/Makefile.am, tests/simpleTiff16/Makefile.am, + tools/Makefile.am: The cmake stuff should be available in the + automake tarball + * [r1075] CMakeLists.txt, Makefile.am: Bump soname to 2:0:0 for real + this time + +2009-09-20 kornelbenko + + * [r1074] CMakeLists.txt, ChangeLog: creation of static pano13 library + too + * [r1073] CMakeLists.txt: white space + +2009-09-19 kornelbenko + + * [r1072] ChangeLog, tools/CMakeLists.txt: Don't compile + PTAInterpolate if no JAVA, it uses writeProject() from + ptpicker.c + * [r1071] CMakeLists.txt: use javastub.c if noa java available + +2009-09-19 jim0watters + + * [r1070] ChangeLog, PTcommon.c: fixed getROI to not clip the nadir + and zenith shots when outputting as cropped tiffs. + +2009-09-19 kornelbenko + + * [r1069] CMakeLists.txt, ChangeLog, tests/CMakeLists.txt, + tests/simpleStitch/CMakeLists.txt, + tests/simpleTiff16/CMakeLists.txt: Enable test of our only two + simple tests. + + In build-tree one has first to call "make". + After this one may call "make test" to actually execute the tests. + * [r1068] CMakeLists.txt, ChangeLog: Add installation of + lib/pkgconfig/libpano13.pc + * [r1067] CMakeLists.txt, ChangeLog, tools/CMakeLists.txt: Added tools + directory + +2009-09-19 dmg + + * [r1066] CMakeLists.txt, ChangeLog: 2009-09-18 <dmg@phosphorus> + + * CMakeLists.txt: Moved wx-widgets into Windows-only part + +2009-09-19 tksharpless + + * [r1065] CMakeLists.txt: CMakeLists.txt now requires version 2.6 + +2009-09-18 kornelbenko + + * [r1064] CMakeLists.txt: Create symbolic links to libpano13.so + +2009-09-18 jim0watters + + * [r1063] doc/Optimize.txt, doc/stitch.txt: Update the optimize and + stitch scripts to document Tilt. + +2009-09-18 kornelbenko + + * [r1062] CMakeLists.txt, man/CMakeLists.txt: Added installation of + manuals + +2009-09-18 dmg + + * [r1060] doc/developmentPolicy.txt: added sentence on mailing list to + policy draft + * [r1059] ChangeLog: 2009-09-18 <dm...@uv...> + + * doc/developmentPolicy.txt: Added file with a draft of a policy + for development of libpano + * [r1058] doc/developmentPolicy.txt: 2009-09-18 <dm...@uv...> + + * doc/developmentPolicy.txt: Added file with a draft of a policy + for development of libpano + * [r1057] CMakeLists.txt, ChangeLog, ptpicker.c: 009-09-18 + <dm...@uv...> + + Patch submitted by Kornel Benko + + * ptpicker.c: Casted some values in printf to avoid compiler + warnings. + + * CMakeLists.txt: As allways one has to call cmake + -DCPACK_BINARY_DEB:BOOL=ON to create a package (debian/ubuntu in + this example) + + make package creates then the package libpano13-2.9.15-Linux.deb. + (Values automatically taken from configure.ac) The package will + install the header-files and the (shared) libpano13 library. + +2009-09-18 jim0watters + + * [r1056] ChangeLog, PTcommon.c: Fix crash if script p line has + n"TIFF_m" without any other options for tiff + +2009-09-17 jim0watters + + * [r1055] adjust.c: correct the default value for tiltScale optVars to + 0, like all optVars. + * [r1054] ChangeLog: adjust.c: Add tiltZ and tiltScale to list being + set to default values + math.c Move variable initialization to the beginning of code block + for MSSC compiler. + +2009-09-17 jim0Watters + + * [r1053] adjust.c: Add tiltZ and tiltScale to list being set to + default values. + +2009-09-17 jim0watters + + * [r1052] math.c: Move variable initialization to the beginning of + code block for MSSC compiler. + +2009-09-17 dmg + + * [r1051] ChangeLog, parser.c: 2009-09-17 <dm...@uv...> + + * parser.c: Fail if Ts parameter is set to zero + +2009-09-16 dmg + + * [r1050] ChangeLog, PTcommon.c, correct.c, parser.c: 2009-09-16 + <dm...@uv...> + + * correct.c (correct): Removed debugging code that I introduced + early. I suspect correct is no longer needed. Thanks to Jim + (again) for catching this. + + * parser.c (ReadCoordinates): Removed bogus case switch (thanks to + Jim Watters for catching this!) + + * PTcommon.c: Changed use of NDEBUG to a new preprocessor define + called PANO_TEST_INVERSE + +2009-09-16 brunopostle + + * [r1048] ChangeLog: Update ChangeLog for likely beta2 + +2009-09-14 brunopostle + + * [r1047] tests/panoAutomateTest.pl, + tests/simpleStitch/reference/Makefile.am, + tests/simpleTiff16/reference/Makefile.am: Put missing test case + files in tarball (Andreas Metzler) + * [r1046] Makefile.am: switch soname back to 1:0:0 as ABI hasn't + really changed + +2009-09-14 dmg + + * [r1045] ChangeLog, configure.ac: 2009-09-14 <dm...@uv...> + + * configure.ac: Added support for kfreebsd. Patch created by + Debian upstream maintainer Cyril Brulebois + +2009-09-10 dmg + + * [r1044] ChangeLog, PTcommon.c, adjust.c, correct.c, filter.h, + math.c, panorama.h, parser.c, pt_stdint.h: 2009-09-09 <dm...@uv...> + + * PTcommon.c, panorama.h, pt_stdint.h, math.c, adjust.c + PTcommon.c, filter.h, parser.c, correct.c: Integrated Dev"s + implementation of tilt, extended to support rotation of the camera + before independent of roll,pitch,yaw. The new parameters are: + Tx,Ty,Tz,Ts (tilt on x axis, y axis, z axis, and scaling of field + of view in the transformation). Supported by PTmender and + PToptimizer + +2009-09-03 brunopostle + + * [r1042] ChangeLog: Update ChangeLog with svn2cl + * [r1041] Makefile.am, configure.ac, version.h: Bump version and + soname + * [r1040] adjust.h, parser.c: Fixes for implicit declarations + (Stanislav Brabec) + * [r1039] Makefile.am, configure.ac, libpano13.pc.in: Add a pkgconfig + support with a libpano13.pc file (Andreas Metzler) + +2009-08-18 dmg + + * [r1037] ChangeLog: Forgot to update changelog + * [r1036] parser.c: Tried to fix the setlocale thing + +2009-08-14 dmg + + * [r1033] ChangeLog, PTcommon.c, adjust.c, filter.h, math.c, + tests/simpleStitch/reference/tiff_m0000.tif, + tests/simpleStitch/reference/tiff_m_cropped0000.tif, + tests/simpleStitch/reference/tiff_m_cropped0001.tif, + tests/simpleTiff16/reference/tiff_m0000.tif, + tests/simpleTiff16/reference/tiff_m_cropped0000.tif: 2009-08-14 + <dm...@uv...> + + * Updated tests cases to reflect the slight change in the + boundaries of the ROI. + + * adjust.c, math.c, filter.h: The inverse of shear was broken. I + have added a shearInv function that takes care of this bug. + + * PTcommon.c (getROI): Improved its computation of its edges to + make it err on the outside rather than on the inside of the actual + area. I have also added code to test the inverse computations for + any particular function. + * [r1031] ChangeLog, PTcommon.c, tests/panoAutomateTest.pl, + tests/simpleStitch/reference/tiff_m_uncropped0000.tif, + tests/simpleStitch/reference/tiff_m_uncropped0001.tif, + tests/simpleTiff16/reference/tiff_m0000.tif, + tests/simpleTiff16/reference/tiff_m_uncropped0000.tif, + tests/simpleTiff16/temp.txt: 2009-08-13 <dm...@uv...> + + * PTcommon.c (panoCreatePanorama): Added support for uncropped + TIFF_m, but only when it is not circular fisheye + + * tests/panoAutomateTest.pl (Compare_Images): Added support for + uncropped and cropped images. + + * Updated tests + * [r1030] tests/simpleStitch/reference/tiff_m0000.tif, + tests/simpleStitch/reference/tiff_m0001.tif: i need actual files, + not symlinks + * [r1029] tests/simpleStitch/reference/tiff_m0000.tif, + tests/simpleStitch/reference/tiff_m0001.tif: finished renaming files + * [r1028] tests/simpleStitch/reference/tiff_m0000.tif, + tests/simpleStitch/reference/tiff_m0001.tif, + tests/simpleStitch/reference/tiff_m_uncropped0000.tif, + tests/simpleStitch/reference/tiff_m_uncropped0001.tif: renaming some + files part 2, has to be done in different commits + * [r1027] tests/simpleStitch/reference/tiff_m_cropped0000.tif, + tests/simpleStitch/reference/tiff_m_cropped0001.tif: renaming some + files, has to be done in different commits + +2009-08-04 tksharpless + + * [r1021] CMakeLists.txt: Add Bruno's patch for Linux to + CMakeLists.txt + * [r1020] CMakeLists.txt: Improved version of previous mod to + CMakeLists.txt + * [r1019] CMakeLists.txt: Can define HUGIN_BASE_DIR on the CMake + commandline to locate the Hugin source root (by default it must be + next to the libpano source root and be called hugin). + * [r1018] CMakeLists.txt: Added CMakeLists.txt to build libpano13 + (only) in the Hugin build environment. Works with MSVC 2008 Exp. & + Hugin SDK on WinVista. Please test elsewhere. Also untested is the + option of including support for the Java utilities (left out by + default). + +2009-08-01 dmg + + * [r1017] ChangeLog, parser.c: 2009-08-01 <dm...@uv...> + + * parser.c: on discussion with Tom Modes I made sure that parser + saves and restores the locale. + +2009-06-11 brunopostle + + * [r992] adjust.c: Fix "Unsupported panorama projection" warning when + opening a project with a recent projection (Yuval Levy). + https://sourceforge.net/tracker/?func=detail&atid=550441&aid=2803939&group_id=77506 + +2009-05-01 brunopostle + + * [r966] ChangeLog: Update ChangeLog for 2.9.14_rc1 + * [r965] man/Makefile.am, man/PTAInterpolate.pod, man/PToptimizer.1, + man/PToptimizer.pod: man page for PTAInterpolate + * [r964] Makefile.am: ABI has changed since 2.9.12, bump soname + (Andreas Metzler) + +2009-04-30 brunopostle + + * [r963] math.c: Fix albers equal area conic division by zero error + (Guido Kohlmeyer) + +2009-04-25 brunopostle + + * [r960] man/PTblender.1, man/PTcrop.1, man/PTinfo.1, man/PTmasker.1, + man/PTmender.1, man/PToptimizer.1, man/PTroller.1, man/PTtiff2psd.1, + man/PTtiffdump.1, man/PTuncrop.1, man/panoinfo.1: Update VERSION in + man pages (Andreas Metzler) + +2009-03-03 brunopostle + + * [r955] ChangeLog: update + +2009-02-23 brunopostle + + * [r953] adjust.c, remap.c: Apply MAX_FISHEYE_FOV only if both hfov + and vfov match + * [r952] README.linux, README.windows, filter.h: reset MAX_FISHEYE_FOV + to 179 degrees (was 720) + +2009-02-12 brunopostle + + * [r949] man/Makefile.am: Don't do pointless chmod a+r after + installing man pages + +2009-02-10 jim0watters + + * [r948] parser.c: add missing case statements + +2009-02-08 brunopostle + + * [r945] filter.c: Don't include unistd.h on Windows, bug #2577715 + +2009-02-05 brunopostle + + * [r944] ChangeLog: update ChangeLog + * [r943] configure.ac, version.h: bump version to 2.9.14, sources + conflicted as to whether previous version was 2.9.12 or 2.9.13 + * [r942] m4/ax_check_graphics.m4: close bugs #1236502 & #1599376 -lm + required for libpng + * [r941] Makefile.am, README.linux, makefile.linux: Remove + unmaintained makefile.linux + * [r940] ColourBrightness.c, filter.c, pttiff.h: patch fixes implicit + declaration warnings, which may lead to + crashes. patch #2163691 (Stanislav Brabec) + +2009-02-04 brunopostle + + * [r939] filter.c, filter.h: Fix of invalid write() calls, which don't + appear to be used anyway. patch #2163669 (Stanislav Brabec) + * [r938] parser.c: four variables have been added to "C" lines: + * c - control point number; + * D, Dx, Dy - a control point error (value and orthogonal + components). + It is useful for the analysis of results of PToptimizer operation + and the + subsequent removal of "bad" control points. Patch #2118807 (Iouri + Ivliev) + * [r937] parser.c: Existing implementation of WriteResults function + uses two intermediate buffers + for sprintf(3) and a considerable quantity of strcat(3) calls for + copying data + in the target buffer. This patch removes all strcat(3) calls and + fulfils + sprintf(3) in the target buffer directly. Patch #2118807 (Iouri + Ivliev) + +2009-02-02 dangelo + + * [r936] adjust.c, filter.h, panorama.h, parser.c, queryfeature.c: + forgot to add some more files touched by the bi/triplane projection + * [r935] ChangeLog: correct Changelog entry + * [r934] ChangeLog, math.c: equirect -> rectilinear transform: reject + points behind the camera + applied patch with biplane and triplane projections. + +2009-02-02 brunopostle + + * [r933] ChangeLog, man/.cvsignore, + tests/simpleStitch/reference/.cvsignore, + tests/simpleTiff16/.cvsignore, + tests/simpleTiff16/reference/.cvsignore, tools/.cvsignore: + housekeeping + +2009-02-01 brunopostle + + * [r932] tools/PTmasker.c: fix for invalid format specification, bug + #2163676 (Stanislav Brabec) + * [r931] configure.ac, m4/ax_check_java.m4: autotools cross-compile + support, bug #2491104 (Diego E. Petteno) + * [r930] f2c.h, jpegicc.c, jpegicc.h, rgbe.c, rgbe.h: Fix vague + licensing, bug #1877526 (Cyril Brulebois) + * [r929] Makefile.am, configure.ac, man, man/Makefile.am, + man/PTblender.1, man/PTblender.pod, man/PTcrop.1, man/PTcrop.pod, + man/PTinfo.1, man/PTinfo.pod, man/PTmasker.1, man/PTmasker.pod, + man/PTmender.1, man/PTmender.pod, man/PToptimizer.1, + man/PToptimizer.pod, man/PTroller.1, man/PTroller.pod, + man/PTtiff2psd.1, man/PTtiff2psd.pod, man/PTtiffdump.1, + man/PTtiffdump.pod, man/PTuncrop.1, man/PTuncrop.pod, + man/panoinfo.1, man/panoinfo.pod: add missing manpages bug #1877534 + (Cyril Brulebois) + * [r928] configure.ac, tests/simpleStitch/Makefile.am, + tests/simpleStitch/reference/Makefile.am, + tests/simpleTiff16/Makefile.am, + tests/simpleTiff16/reference/Makefile.am: Don't ship .svn dirs in + tarball bug #1861174 (Cyril Brulebois) + * [r927] Makefile.am, PixMap.c, PixMap.h, README.mac, makefile.mac, + pict.c: Remove GPL incompatible files (bug #1861841), this removes + mac classic support + and hopefully doesn't break anything in OS X. + * [r926] bootstrap: support libtool-2.0 bug #2011492 + +2009-01-17 brunopostle + + * [r924] ChangeLog, math.c: fix reverse calculation for pannini + (Thomas Modes) + +2009-01-08 brunopostle + + * [r923] queryfeature.c: maximum field of view for pannini should be + equivalent to related projections + +2009-01-03 dmg + + * [r921] ChangeLog, adjust.c, filter.h, math.c, panorama.h, parser.c, + queryfeature.c: 2009-01-02 dmg <dmg@phosphorus> + + * * adjust.c, filter.h, math.c, panorama.h, parser.c & + queryfeateature.c: + + Fixed the panini (or should we call it pannini) and renamed + previous projection as equirectangular panini. It might have to + change its name + +2008-12-31 jim0watters + + * [r919] queryfeature.c: Add missing projections for + panoProjectionFeaturesQuery c/o Yuv + * [r918] ., ChangeLog, adjust.c, doc/Optimize.txt, doc/stitch.txt, + filter.h, math.c, panorama.h, parser.c, queryfeature.c: adjust.c, + filter.h, math.c, panorama.h, parser.c & queryfeateature.c + added mirror, equisolid, orthographic, and stereographic as input + image formats + added equisolid, orthographic, stereographic as output panorama + formats + add some more defines to panorama.h to help image and pano formats + * [r917] PTcommon.c, correct.c, filter.c, morpher.c, pt_stdint.h, + pteditor.c, ptpicker.c: Initialize TrformStr structure before use + +2008-12-29 dmg + + * [r914] ChangeLog, adjust.c, filter.h, math.c, panorama.h, parser.c, + queryfeature.c: 2008-12-29 dmg <dmg@phosphorus> + + * panorama.h, math.c, adjust.c, queryfeature.c, filter.h: Finally + added the architectural. + * [r913] ChangeLog, queryfeature.c: 2008-12-29 dmg <dmg@phosphorus> + + * queryfeature.c (panoProjectionFeaturesQuery): Added querying + features for panini; this will allow Hugin to use it + * [r912] ChangeLog, adjust.c, filter.h, math.c, panorama.h, parser.c, + queryfeature.c: 2008-12-29 dmg <dm...@uv...> + + * panorama.h, math.c, adjust.c, queryfeature.c, filter.h, + parser.c: Added panini projection. the credit goes to Thomas + Sharpless who rediscovered it, and to Bruno Postle, who did the + original math. + +2008-08-11 dmg + + * [r867] bootstrap: Oops, minor error in previous commit + * [r866] ChangeLog, bootstrap: 2008-08-11 dmg <dm...@uv...> + + * bootstrap (have_libtool): Added support for 2.2.* version of + libtool. Patch submitted by Neil Shephard. + +2008-03-19 dangelo + + * [r833] file.c: applied patch [ 1917103 ] panoImageRead doesn't read + tiff files + +2008-01-28 dangelo + + * [r803] filter.h, sys_common.c: revert const change that broke source + compatability with other apps. + +2008-01-26 jim0watters + + * [r802] ChangeLog, filter.h, ptpicker.c, resample.c, sys_common.c, + tools/PTAInterpolate.c: Fix some warning messages + sys_common.c and filter.h Updated printError functions to use Const + char (submitted by Simon Oosthoek) + +2008-01-16 jim0watters + + * [r799] PTDialogs.c, TODO, adjust.c, correct.c, filter.c, perspect.c, + remap.c, sys_win.c, version.h: Update Photoshop plugins to have new + dialog with options for + * [r798] PTDialogs.c, bmp.c, file.c, libpano.sln, libpano.vcproj, + ptpicker.c, tools/PTAInterpolate.vcproj, tools/PTOptimizer.vcproj, + tools/PTblender.c, tools/PTblender.vcproj, tools/PTcrop.vcproj, + tools/PTinfo.c, tools/PTinfo.vcproj, tools/PTmasker.vcproj, + tools/PTmender.vcproj, tools/PTroller.vcproj, + tools/PTtiff2psd.vcproj, tools/PTtiffdump.vcproj, + tools/PTuncrop.vcproj: Update solution and project files to build + MSWin binaries for either Windows or command prompt. Allows same + source code to be used for command line tools and Photoshop + plug-ins. + * [r797] panorama.h: Update solution and project files to build MSWin + binaries for either Windows or command prompt. Allows same source + code to be used for command line tools and Photoshop plug-ins. + +2008-01-05 jim0watters + + * [r778] libpano.vcproj: Removed duplicate .def files. Updated project + * [r777] ChangeLog, Makefile.am, PTcommon.c, TODO, adjust.c, + correct.c, doc/Optimize.txt, doc/stitch.txt, filter.c, filter.h, + libpano13.def, makefile.linux, makefile.mac, makefile.win32, + morpher.c, pano13.def, pano13.rc, panorama.h, parser.c, pteditor.c, + ptpicker.c, resample.c, sys_X11.h, sys_ansi.h, sys_mac.h, sys_win.c, + sys_win.h, tools/Makefile.am, tools/PToptimizer.c: - Added + FastTransform to the data structures removed as global variable + - Added FastTransform to the dialog. + - Updated the dialogs with some of the newer interpolator. TOTO: + update correct.c, morpher.c, perspective.c, and remap to use + transFormEx instead of the new transform (required to use new + interpolators) Requires adding inverse stacks. + - Fixed PTCorrect bug that had wrong order of operations on the + image stack, Radial, then H & V shift. + - updated the default interpolator to _spline36 + - On Windows changed the default location to store parameters file + from app folder to folder and file name + %APPDATA%\Panotools\APPNAME.prf. This should make the plugins Vista + friendly. Changed the default temp file location to %TEMP% + * [r776] pano13vcd.def: Removed duplicate .def file + +2008-01-03 jim0watters + + * [r772] filter.h: revert update of FoV + +2008-01-03 dangelo + + * [r771] ChangeLog, tools/Makefile.am: PTAinterpolate depends on java + +2007-12-31 jim0watters + + * [r765] ChangeLog, Makefile.am, PTDialogs.c, README.linux, + README.mac, README.windows, TODO, filter.h, libpano.vcproj, + libpano12.def, libpano13.def, makefile.linux, makefile.mac, + makefile.win32, pano12.def, pano12.rc, pano12vc.def, pano12vcd.def, + pano13.def, pano13.rc, pano13vc.def, pano13vcd.def, queryfeature.h, + sys_X11.c, sys_ansi.c, sys_mac.c, sys_win.c, sys_win.h, + tools/Makefile.am, tools/PTainterpolate.rc, tools/PTblender.rc, + tools/PTcrop.rc, tools/PTinfo.rc, tools/PTmasker.rc, + tools/PTmender.rc, tools/PToptimizer.c, tools/PToptimizer.rc, + tools/PTroller.rc, tools/PTtiff2psd.rc, tools/PTtiffdump.rc, + tools/PTuncrop.rc, tools/panoinfo.c, tools/panoinfo_unix.c, + version.h: Update trunk to be pano13. Create a name separation from + pano12. Swepted many files. Updated version info. + * [r763] tools/PTAInterpolate.vcproj, tools/PTOptimizer.vcproj, + tools/PTainterpolate.rc, tools/PTblender.rc, tools/PTblender.vcproj, + tools/PTcrop.rc, tools/PTcrop.vcproj, tools/PTinfo.rc, + tools/PTinfo.vcproj, tools/PTmasker.rc, tools/PTmasker.vcproj, + tools/PTmender.rc, tools/PTmender.vcproj, tools/PToptimizer.rc, + tools/PTroller.rc, tools/PTroller.vcproj, tools/PTtiff2psd.rc, + tools/PTtiff2psd.vcproj, tools/PTtiffdump.rc, + tools/PTtiffdump.vcproj, tools/PTuncrop.rc, tools/PTuncrop.vcproj: + Add resource file to provide version info for each of the helper + tools. Updated project file to include resource. Did not try to + update make file. TODO: Update make file to include resource files + +2007-12-30 jim0watters + + * [r762] tools/PTpano12.dsp, tools/PTpano12.vcproj, + tools/PTpano12_readme.txt, tools/ptpano12.cpp, tools/ptpano12.def, + tools/ptpano12.h: Remove PTPano12 from the trunk (pano13 branch). + Its purpose is to report on functions used by calling applications + to pano12.dll to help recreate them. It is not part of the pano13 + package. The project can still be found in the panotools12 branch as + PTTrace. + +2007-12-29 jim0watters + + * [r761] ChangeLog, file.c, libpano.sln, resample.c, tiff.c, + tools/Makefile.am, tools/PTAInterpolate.c, + tools/PTAInterpolate.vcproj, tools/PTblender.vcproj, + tools/PTmasker.vcproj, tools/makefile.panoinfo.win32, + tools/makefile.ptoptimizer.win32: Added Max Lyons bug fixes to + libpano + Added Max Lyons PTAinterpolate project to replace PTInterpolate + Make file updated but not tested. + Removed duplicate make files for panoinfo and ptoptimizer + * [r760] tools/PTStitcher.cpp, tools/PTStitcher.vcproj: Remove + incomplete old test project I started to replace PTStitcher that was + later done with PTMender + * [r759] resample.c: reverted some of previous fix. + * [r758] resample.c: fix more warnings + +2007-12-28 jim0watters + + * [r757] ChangeLog, ColourBrightness.c, PTcommon.c, ZComb.c, adjust.c, + correct.c, file.c, file.h, filter.c, filter.h, fourier.c, hdrfile.c, + libpano.vcproj, metadata.c, pano12vcd.def, parser.c, png.c, + pteditor.c, ptfeather.c, ptpicker.c, ptstitch.c, pttiff.h, remap.c, + resample.c, rgbe.c, tiff.c, tools/PTOptimizer.vcproj, + tools/PTblender.vcproj, tools/PTcrop.vcproj, tools/PTinfo.c, + tools/PTinfo.vcproj, tools/PTmasker.c, tools/PTmasker.vcproj, + tools/PTmender.c, tools/PTmender.vcproj, tools/PTroller.vcproj, + tools/PTtiff2psd.vcproj, tools/PTtiffdump.vcproj, + tools/PTuncrop.vcproj: removed warning suppression from MSVC project + builds + swept many files to remove compiler warnings. + +2007-11-25 dangelo + + * [r749] ChangeLog, libpano.vcproj: MSVC: produce libs named + pano13.lib + +2007-10-21 dangelo + + * [r742] ChangeLog, parser.c: reset m parameter to 0 if not set in m + line + +2007-07-16 jim0watters + + * [r716] sys_win.c: Use correct name to reflect version of pref file. + +2007-05-10 dangelo + + * [r706] bootstrap: work with newer version of autoconf + +2007-04-24 jim0watters + + * [r698] filter.c, sys_X11.c, sys_ansi.c, sys_mac.c, sys_win.c, + version.h: Separated version number of plugin data structure from + main dll, + +2007-04-23 jim0watters + + * [r695] ChangeLog, adjust.c: Update scale[0] to use selected width + and height. Fix issue using crop and fisheye images. + +2007-02-05 dangelo + + * [r664] ChangeLog, queryfeature.c: fixed projection limits and names + +2007-01-25 dangelo + + * [r661] ChangeLog, queryfeature.c: limit cylindrical VFOV to 179 + * [r660] ChangeLog, filter.c: bugfix: initialize precalculated + parameters in Image struct + +2007-01-24 dangelo + + * [r659] ChangeLog, queryfeature.c: populate projection query + +2007-01-23 dangelo + + * [r658] ChangeLog, panorama.h: added internal format id to query + projection function + * [r657] file.c: + * [r656] ChangeLog, PTcommon.c: check if PTmender output file exist, + delete it to make sure + that overwriting works on all platforms + +2007-01-23 dmg + + * [r655] ChangeLog, adjust.c, file.c, filter.h, math.c, panorama.h, + parser.c, queryfeature.c, tiff.c: 2007-01-22 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.13 + + * queryfeature.c (panoProjectionFeaturesQuery): Mercator is 179 + vfov max. + + * file.c (CREATED_BY_PSD): This constant needs to be ODD in length + + * queryfeature.c, panorama.h, math.c, adjust.c, filter.h, + parser.c: Added Miller Cylindrical. + +2007-01-11 dmg + + * [r653] ChangeLog, panorama.h, queryfeature.c: 2007-01-11 dmg + <dm...@uv...> + + * queryfeature.c, panorama.h (panoProjectionFormatCount): Added + function. + * [r652] ChangeLog, configure.ac, panorama.h, parser.c, + queryfeature.c, tools/panoinfo.c, tools/panoinfo_unix.c, version.h: + 2007-01-11 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.12 + + * tools/panoinfo_unix.c: Output features of panos. + + * panorama.h, queryfeature.c: Added functions to query features of + each pano + format as needed by hugin. + * [r651] parser.c: Removed debugging printf + * [r650] ChangeLog, configure.ac, parser.c, version.h: 2007-01-10 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.11 + + * parser.c (ParseScript): V-type variables from Hugin .pto files + need to be ignored also. + * [r649] parser.c: I removed weird-sized tabs from parser.c + * [r648] ChangeLog, parser.c: 2007-01-10 dmg <dm...@uv...> + + * parser.c (readAdjust): Images with i were all done with the + first spec. This change fixes that problem (the parser should be + rewritten) + * [r647] ChangeLog, TODO, configure.ac, doc/stitch.txt, parser.c, + version.h: 2007-01-10 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.10 + + * doc/stitch.txt: Updated the file to match latest version. + + * parser.c (readAdjust): Updated parser to accept adjustLine in + the i-line. + (nextWord): Make sure that it eats the closing quotes + (ReadPanoramaDescription): Forked this function from + ReadImageDescription. In the past both images (o and i lines) + and output format (p-line) were read with the same function. + + * TODO (PTmender): Updated the file. + * [r646] ChangeLog, PTcommon.c, adjust.c, configure.ac, file.c, + filter.c, filter.h, math.c, panorama.h, parser.c, queryfeature.c, + version.h: 2007-01-10 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.9 + + * queryfeature.c: Updated labels for Lamberts to their full name. + + * parser.c: implemented option P (parameters to projection) as a + multivalue parameted + + * panorama.h: Modified the Image struct to support parameters to + the projection and to support precomputation of values for the + projection (to speed up computation) + + * math.c, parser.c, panorama.h, adjust.c, filter.c, + queryfeature.c: Implemented Albers Conical Equal Area projection. + + Most of these changes submitted by Michael Gross, reviewed and + slightly adapted by me. + +2007-01-01 dmg + + * [r645] AUTHORS, ChangeLog, ColourBrightness.c, TODO, ZComb.c, + configure.ac, parser.c, sys_ansi.c, tools/PTmasker.c, + tools/PTmender.c, version.h: 2007-01-01 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.8 + + * parser.c (ParseScript): Added some comments to "z" option + + * sys_ansi.c (PrintErrorIntern): Add an end-of-line if none is + provided (to increase readbility of PrintError, but only when + stdout is used) + + * AUTHORS: Updated my own URL. Order them in lexicographical order + by lastname + + * TODO: Updated file. + + * ZComb.c (ZCOMBLOGFILENAME): Changed name of log file for Zcomb + to something more appropriate. + + * ColourBrightness.c (CorrectImageColourBrigthness): Fixed some + compilation warnings + + * tools/PTmasker.c (main): Added support for focus enhancing (z + option in the old PTstitch script) + +2007-01-01 dangelo + + * [r644] AUTHORS: added dmg and myself + +2006-12-31 dangelo + + * [r643] ChangeLog, libpano.sln, libpano.vcproj, tools/PTmasker.c, + tools/PTroller.c: fixed default output in PTmasker, compile PTroller + when using MSVC + * [r642] tools/PTmasker.vcproj: MSVC build accidentally overwrote + PTblender with PTmasker + * [r641] ChangeLog, ColourBrightness.c, PTcommon.c, file.c, + ptstitch.c, queryfeature.c, tiff.c, tools/PTmender.c: fix signed vs + unsigned warnings + +2006-12-30 dangelo + + * [r640] ChangeLog: forgot to commit my message + +2006-12-27 dmg + + * [r639] ChangeLog, ColourBrightness.c, PTcommon.c, TODO, + configure.ac, filter.c, math.c, metadata.c, metadata.h, ptfeather.c, + ptstitch.c, ptstitch.h, pttiff.h, sys_ansi.c, tiff.c, + tools/PTblender.c, tools/PTmasker.c, tools/PTmender.c, version.h: + 2006-12-26 dmg <dm...@uv...> + + * tiff.c (panoTiffDisplayInfo): Fixed compilation warning + + * version.h (VERSION), configure.ac Upgraded to version 2.9.7. + + * math.c: Cleaned up some of the Lambert related code. + + * tools/PTblender.c: Improved error message + it. + + * ptfeather.c: Improved the feathering algorithm, made sure 16 + bits works too. + + * ptstitch.c, ptstitch.h (panoStitchPixelChannelSet): Added + function, + cleanedup panoStitchPixelChannelGet. + + * metadata.c (panoImageBytesPerSample): Added function. + + * tools/PTmasker.c (main): If one file is specified feather it, + otherwise do nothing. + + * tiff.c, pttiff.h: (panoImageDispose): Disposes properly any + memory used by the Image data structure. + + * ColourBrightness.c, PTcommon.c, ptstitch.c, PTcommon.c: replaced + myfree(image.data) with panoImageDispose. + + * filter.c (panoMetadataFree): Set pointers to null once they have + been released. + + 2006-12-18 dmg <dm...@uv...> + + * sys_ansi.c (PrintErrorIntern): The function had a limit of 256 + bytes to print, and anything longer created a run time error. I + have changed it to deal with any lenght. + +2006-12-21 brunopostle + + * [r636] Makefile.am: Fix 'dist' target + +2006-12-18 dangelo + + * [r635] adjust.c, adjust.h, doc/Optimize.txt, parser.c: added huber + m-estimator + +2006-12-17 dangelo + + * [r634] ChangeLog, Makefile.am, PTDialogs.c, libpano.vcproj: use + sys_ansi on windows + * [r633] ChangeLog, math.c: fixed compilation problems with MSVC + +2006-12-16 dmg + + * [r631] ChangeLog, PTcommon.c: 2006-12-15 dmg <dm...@uv...> + + * PTcommon.c (panoCreatePanorama): A pointer was freed more than + once + * [r630] ChangeLog, PTcommon.c, configure.ac, file.c, metadata.c, + tiff.c, tools/PTtiff2psd.c, version.h: 2006-12-15 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.6. + + * tools/PTtiff2psd.c (PT_TIFF2PSD_USAGE): Updated help message + + * PTcommon.c (panoPSDCreate): Added support for 1 input file only in + the creation of PSDs. + + * tools/PTtiff2psd.c (main): Added support for 1 input file only. + + * tiff.c (readTIFF): Reenable readTIFF and writeTIFF. pteditor + uses them. + + 2006-12-14 dmg <dm...@uv...> + + * file.c: Fixed major problems with PSD logic and PICT tags + + * metadata.c (panoImageFullHeight): Darn. It was returning width + instead of height! + +2006-12-15 dangelo + + * [r629] ChangeLog, queryfeature.c: added lambert azimuthal to + queryfeature + +2006-12-14 dmg + + * [r628] ChangeLog, ColourBrightness.c: 2006-12-13 dmg <dm...@uv...> + + * ColourBrightness.c (CorrectFileColourBrightness): Another bug I + introduced when I replaced readTIFF with panoTiffRead. I need + regression testing :( + +2006-12-13 dangelo + + * [r627] ChangeLog, Makefile.am: install file.h + +2006-12-13 dmg + + * [r626] ChangeLog, adjust.c, math.c: 2006-12-12 dmg <dm...@uv...> + + * math.c (transmercator_erect): Make sure it returns 0 when the + width is infinite. + + * adjust.c: Updated comments + + * math.c (erect_transmercator): Make sure it only translates + points within the sphere (avoids duplication of the image). + +2006-12-12 dmg + + * [r625] ChangeLog, adjust.c, configure.ac, filter.h, math.c, + panorama.h, parser.c, version.h: 2006-12-12 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.5. + + * queryfeature.c: Added lambert Azimuthal projection + + * math.c (erect_lambert, lambert_erect): Added lambert Azimuthal + projection + + * filter.h: Added Lambert Azimuthal projection + + * panorama.h (enum): Added Lambert Azimuthal projection + + * adjust.c (SetMakeParams, SetInvMakeParams): Added Lambert + Azimuthal projection + + * parser.c (readAdjust,ParseScript): Added Lambert Azimuthal + projection. + +2006-12-12 dangelo + + * [r624] ChangeLog: update changelog + * [r623] ., ColourBrightness.c, PTcommon.c, libpano.sln, + libpano.vcproj, tools, tools/PTOptimizer.vcproj, tools/PTblender.c, + tools/PTblender.vcproj, tools/PTcrop.c, tools/PTcrop.vcproj, + tools/PTinfo.c, tools/PTinfo.vcproj, tools/PTmasker.c, + tools/PTmasker.vcproj, tools/PTmender.c, tools/PTmender.vcproj, + tools/PTroller.vcproj, tools/PTtiff2psd.c, tools/PTtiff2psd.vcproj, + tools/PTtiffdump.c, tools/PTtiffdump.vcproj, tools/PTuncrop.c, + tools/PTuncrop.vcproj, tools/compat_win32, + tools/compat_win32/dirent.h, tools/compat_win32/getopt.c, + tools/compat_win32/getopt.h: make trunk buildable with MSVC 2003. + Instructions at: + http://wiki.panotools.org/Build_pano12_from_sourcecode_MSVC + +2006-12-12 dmg + + * [r622] ChangeLog, adjust.c, configure.ac, filter.h, math.c, + panorama.h, parser.c, queryfeature.c, tools/PTmender.c, version.h: + 2006-12-11 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.4. + + * tools/PTmender.c: Fixed a bug in the processing of the input + files. + + * queryfeature.c: Added lambert projection + + * math.c (erect_lambert, lambert_erect): Added lambert projection + + * filter.h: Added Lambert projection + + * panorama.h (enum): Added Lambert projection + + * adjust.c (SetMakeParams, SetInvMakeParams): Added Lambert + projection + + * parser.c (readAdjust,ParseScript): Added Lambert projection. + + * adjust.c (SetInvMakeParams): Corrected error message. + +2006-12-04 dmg + + * [r621] ChangeLog, PTcommon.c: Uncommented getCropInformation + * [r620] ptfeather.c, tools/PTinfo.c: added missing files + * [r619] ChangeLog, PTcommon.c, PTcommon.h, configure.ac, file.c, + file.h, filter.h, metadata.c, parser.c, ptfeather.h, tiff.c, + tools/Makefile.am, tools/PTblender.c, tools/PTcrop.c, + tools/PTmasker.c, tools/PTroller.c, tools/PTuncrop.c, version.h: + 06-12-03 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.3. + + * tiff.c (panoTiffDisplayInfo): Added function. + + * parser.c (panoParserFindOLine): Added function. + + 2006-12-02 dmg <dm...@uv...> + + * PTinfo.c, Makefile.am (bin_PROGRAMS): Created new program + + * metadata.c (panoMetadataCropSizeUpdate), + tiff.c (panoImageBoundingRectangleCompute): Fixed a bug in the + creation of cropped files. The full size tag was not being + created. + + * file.h, file.c (panoFileDeleteMultiple): Created function. Used + with -x option. + + * PTcommon.h, PTcommon.c: Refactored main function from PTcrop + and PTuncrop. + + * tools/PTcrop.c: allow the multiple files in the command line + + * tools/PTmasker.c, tools/PTroller.c, tools/PTblender.c, + tools/PTcrop.c: Add -x switch + + 2006-11-30 dmg <dm...@uv...> + + * parser.c (READ_OPT_VAR): Bug fix: changed a format spec from %k + to %d + + 2006-11-28 dmg <dm...@uv...> + + * tools/PTmender.c (PT_MENDER_USAGE): Updated usage message + +2006-11-29 dmg + + * [r618] ChangeLog, tools/PTmender.c: updated usage of PTmender + * [r617] ChangeLog, TODO, configure.ac, tools/PTmender.c, version.h: + 2006-11-28 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.2. + + * TODO: Updated it. + + * tools/PTmender.c: Mimic processing of input filenames to match + PTstitcher: + -- First use command line options + -- If no images, then use filename in "i" lines + -- If still no images, then use filename in "o" lines + * [r616] tools/panoinfo_unix.c: Fixed a minor bug in panoinfo + * [r615] ChangeLog, TODO, queryfeature.c, tools/panoinfo.c, + tools/panoinfo_unix.c, version.h: Updated panoinfo_unix and + ChangeLog + * [r614] ChangeLog, ColourBrightness.c, PTcommon.c, TODO, adjust.c, + configure.ac, file.c, file.h, parser.c, tiff.c, tools/PTcrop.c, + tools/PTmasker.c, tools/PTmender.c, tools/PTroller.c, version.h: + 2006-11-28 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.0 + + * tiff.c (panoImageBoundingRectangleCompute): Remove a debug + statement. + + * file.h: removed a wrong comment + + * tools/PTcrop.c (main): Renamed option -o to -f (to be consistent) + + * tiff.c (panoTiffCrop): Do processing in a temporal file, instead + of directly in the output file + + * PTcommon.c: Removed some dead code + + * PTcommon.c (panoCreatePanorama): The calculation of the ROI is + not done correctly for circular fisheye images (CFIs). For the + time being we will do uncrop processing for CFIs, and cropped + processing for everything else. For fisheyes we will create crops + in post-processing (it is a hack, but it means everything is + consistent). + + * tools/PTroller.c (main): Fixed a warning + + * adjust.c (SetMakeParams): Added some debugging code (and + commented it out) + + * parser.c (ReadImageDescription): Croping options were not + working properly when 2 cropping specs were specified in the same + command line. For instance, when M=0 was specified any cropping on + the image was considered a type C crop. The new behaviour is the + following: + + if M is specified with parameter == 0, then it is ignored + + For project wFor project wFor project wFor project wFor project wFor + projec prFor project wFor project wFor project wFor project wFor + proje27 dmg <dm...@uv...> + + * ColourBrightness.c (CorrectFileColourBrightness): Replaced + readTIFF and writeTIFF with panoTiffRead and panoTiffWrite. Added + some error checking + + * PTcommon.c (panoPSDCreate): Replaced readTIFF with panoTiffRead + + 2006-11-26 dmg <dm...@uv...> + + * file.c (panoImageRead): Fixed bug in return value of panoReadImage + +2006-11-26 dmg + + * [r613] ChangeLog, Makefile.am, TODO, configure.ac, metadata.c, + metadata.h, ptstitch.c, tests/ChangeLog, tests/panoAutomateTest.pl, + tiff.c, tools/PTmasker.c, version.h: 2006-11-25 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.9.0 + + * TODO: Updated this file + + * Makefile.am: Minor fix + + * tiff.c (readTIFF, writeTIFF): Finally stopped using these + functions. + + * ptstitch.c: Fixed a bug in the computation of masks for 16 bit + images, and replaced calls to readTIFF and writeTIFF + + * tools/PTmasker.c (main): Added some testing code + + * ptfeather.c (panoFeatherImage): Implemented feathering of + cropped files and 16 bit images + + * metadata.h, metadata.c: added a bunch of simple functions to + access the metatada of the image. Ideally we should not access the + pointer + directly any more. + +2006-11-25 dmg + + * [r612] ChangeLog, makefile.osx: 2006-11-25 dmg <dm...@uv...> + + * Removed makefile.osx which is badly out of date. + * [r611] ChangeLog, Makefile.am, PTcommon.c, README, TODO, + configure.ac, doc/PTmender.readme, ptstitch.c, tiff.c, + tools/PTmasker.c, version.h: 2006-11-25 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac Upgraded to version 2.8.5pre17 + + * tiff.c (panoTiffWrite): Fixed a bug in the allocation of the + buffer for writing to the output file. + + * ptstitch.c, tools/PTmasker.c: Enabled feathering code + + * PTcommon.c: removed feathering skeletons from here. + + * ptfeather.c, ptfeather.h: Implemented feathering. + + * Makefile.am: Added ptfeather.c, ptfeather.h + + 2006-11-23 dmg <dm...@uv...> + + * TODO: updated tasks. + + * PTcommon.c (panoCreatePanorama): Change slightly error message + to make it clearer. + +2006-11-18 dmg + + * [r603] ChangeLog: Small fix in ChangeLog + * [r602] ChangeLog, doc/PTmender.readme: Added comment to PTmender + readme + * [r601] ChangeLog, PTcommon.c, configure.ac, doc/PTmender.readme, + doc/PTremap.readme, tools/Makefile.am, tools/PTmender.c, + tools/PTremap.c, version.h: 2006-11-18 dmg <dm...@uv...> + + * PTcommon.c (Clear_Area_Outside_Selected_Region): Implemented + circular fisheye + + * PTcommon.c (getROI): Reverted _isnan to isnan + + * tools/PTmender.c: I changed my mind. We should keep the PTmender + in the new version of the tools too. + + * tools/PTremap.c: Deleted. + + * tools/Makefile.am: Removed PTremap + + * version.h (VERSION), configure.ac Upgraded to version 2.8.5pre16 + * [r600] ChangeLog, filter.c, filter.h, panorama.h: 2006-11-17 dmg + <dm...@uv...> + + * panorama.h: Created Boolean data type (unsigned char) + + * filter.c, filter.h (panoWrite*, panoRead*): Simplified the + functions, got rid of mywrite, replaced BOOL with Boolean + +2006-11-15 jim0watters + + * [r599] ChangeLog, filter.c, filter.h, jpeg.c: created file i/o + functions with error checking to replace macro. + +2006-11-13 jim0watters + + * [r598] ChangeLog, PTcommon.c, configure.ac, file.c, filter.h, + libpano.vcproj, pano12vc.def, ptstitch.c, rgbe.c, rgbe.h, tiff.c, + version.h: Updated to build with MSVC project file. Fixed build + errors and warnings. increased version to 2.8.5pre15 + +2006-11-02 dmg + + * [r597] ChangeLog, TODO: updated the TODO with a list of bugs + +2006-10-28 dmg + + * [r596] tools/PTmasker.c: I forgot to PTmasker.c + * [r595] ChangeLog, README: Updated README + * [r594] ChangeLog, PTcommon.c, TODO, configure.ac, file.c, file.h, + pttiff.h, tiff.c, tools/Makefile.am, tools/PTblender.c, + tools/PTcrop.c, tools/PTmender.c, tools/PTroller.c, + tools/PTtiff2psd.c, tools/PTuncrop.c, version.h: 2006-10-28 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre14 + + * tools/PTtiff2psd.c: Add -f force processing option. Cleaned up. + + * file.h: Added a field to specify if forced processing in + panoTiffUncrop + + * tools/PTmasker.c: Moved functionalty to create stitching masks + into this program (from PTroller and PTblender). + + * tools/PTroller.c (main): Cleaned up options, added the option + for force processsing. + + * tools/PTmender.c (main): Removed all functionality from it. + + * tools/PTblender.c (main): Cleaned up options. Added the option -f + for force procesing + + * file.h, file.c (panoFileExists): Added function. + + * PTfile.c, tools/PTblender: Refactored function + panoFileOutputNamesCreate + + * tools/PTcrop.c: Reindented. Cleanup options. Replaced -o with -f + to be consistent + + * tools/PTcrop.c: Cleanup options. Replaced -o with -f + * [r593] ChangeLog, TODO, tools/PTcrop.c: 2006-10-28 dmg <dm...@uv...> + + * tools/PTcrop.c: Reindented. + * [r592] ChangeLog, TODO, configure.ac, file.h, metadata.c, + metadata.h, ptstitch.c, ptstitch.h, pttiff.h, tiff.c, + tools/Makefile.am, tools/PTcrop.c, tools/PTuncrop.c, version.h: + 2006-10-28 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre13 + + * ptstitch.c, ptstitch.h (panoStitchPixelChannelGet): Upgraded + this function to non-static, since it is useful in tiff.c too. + + * pttiff.h, metadata.c, metadata.h, tiff.c: implemented cropping + of tiffs to boudning rectangle + + * tools/Makefile.am, tools/PTcrop.c: Created program to crop panos + to bounding rectangle + + * tools/PTuncrop.c (main): Fixed bug: return zero when success, and + non-zero + in error. + +2006-10-27 dmg + + * [r591] ChangeLog, PTcommon.c, PTcommon.h, TODO, configure.ac, + file.c, file.h, filter.h, panorama.h, tests/simpleStitch/ChangeLog, + tests/simpleStitch/reference/tiff_m_cropped0000.tif, + tests/simpleStitch/reference/tiff_m_cropped0001.tif, + tests/simpleTiff16/ChangeLog, + tests/simpleTiff16/reference/tiff_m_cropped0000.tif, tiff.c, + tools/PTroller.c, tools/PTtiff2psd.c, version.h: 2006-10-27 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre12 + + * tools/PTroller.c: Removed unused variables + + * TODO: Updated it + + * PTcommon.c. Set the ImageDescription field of the tiff to the + contents of the script. + + * PTcommon.c, tiff.c: Set imagenumber, and imagesTotalNumber in + PAGENUMBER field of tiff. + + * panorama.h (struct): Added imageNumber, and imagesTotalNumber + and script to the metadata struct. + + * PTcommon.c (panoPSDCreate): Implemented the ability to specify a + blending mode in the output of the image. + + * tools/PTtiff2psd.c, file.c, file.h: panoCreatePSD renamed to + panoPSDCreate, replaced last parameter to be a + struct (panoFlatteningParms) so we can pass as many parameters as + necessary. Added support for blending mode in PSD + + * [r590] tools/Makefile.am: It is PToptimizer.c, not PToptimize.c + * [r589] tools/PToptimize.c, tools/PToptimizer.c: It is PToptimizer.c, + not PToptimize.c + * [r588] ChangeLog, PTcommon.c, TODO, pttiff.h, tiff.c, + tools/PTtiffdump.c, tools/PTuncrop.c: 2006-10-26 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre11 + + * Support for cropped images that do not contain full size. We + assume the full size = croppped size + offset + + * tools/PTtiffdump.c: Cleaned up compilation errors. + + * tiff.c, PTcommon.c (panoTiffUnCrop): Moved function from + PTcommon.c, renamed it. + + * TODO: Updates to reflect current status. + * [r587] ChangeLog, PTcommon.c, TODO, configure.ac, + doc/PTblender.readme, doc/PTmender.readme, doc/PTremap.readme, + tests/panoAutomateTest.pl, tools/Makefile.am, tools/PTblender.c, + tools/PTestimate.c, tools/PTmender.c, tools/PToptimize.c, + tools/PTremap.c, tools/PTroller.c, version.h: 2006-10-26 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre10 + + * TODO: Added file + + * tools/README.PTmender: Removed it (created equivalent in ./docs) + + * doc/PTmender.readme: Added file + + * doc/PTblender.readme: Added file + + * doc/PTremap.readme: Added file + + * tests/panoAutomateTest.pl: Updated it to use PTremap and not + PTmender. + + * tools/PTblender.c (main): Removed flattening + functionality. Improved command line handling + + * tools/Makefile.am, tools/PTroller.c: Added PTroller, and + renaming back of PToptimize. + + * tools/PToptimize.c: Renamed PTestimate back to PToptimize. + + * tools/PTremap.c: Copied logic from PTmender to PTremap. Cleaned up + logic + and simplified handling of command line parameters. + + * PTcommon.c: Made some minor cosmetic fixes to progress report. + * [r586] ChangeLog, configure.ac, tests/simpleTiff16/temp.txt, tiff.c, + version.h: 2006-10-26 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre9 + + * tiff.c (panoTiffGetImageProperties): Do not choke if LZW + compressed TIFFs do not have a predictor field + +2006-10-26 dmg + + * [r585] ChangeLog: 2006-10-26 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre8 + + * PTcommon.c (panoCreatePanorama): Remove post-processing during + remapping of images: in other words, ignore output format in script + file. + * [r584] ChangeLog, PTcommon.c, configure.ac, tests/ChangeLog, + tests/panoAutomateTest.pl, version.h: 2006-10-26 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre8 + + * PTcommon.c (panoCreatePanorama): Remove post-processing during + remapping of images: in other words, ignore output format in script + file. + +2006-10-25 dmg + + * [r583] ChangeLog, ColourBrightness.c, configure.ac, version.h: + 2006-10-25 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre7 + + * ColourBrightness.c (ReadHistograms): Compute histograms only + when mask == 255. Ignore otherwise. + * [r582] ChangeLog, configure.ac, tools/Makefile.am, + tools/PTOptimizer.c, tools/PTestimate.c, version.h: 2006-10-25 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre6 + + + * tools/Makefile.am: Renamed PToptimizer to PTestimate + * [r581] ChangeLog, ColourBrightness.c, tools/ChangeLog, + tools/PTblender.c: 2006-10-24 dmg <dm...@uv...> + + * ColourBrightness.c: Map and Curve files for photoshop (colour + correction) were not properly created in Intel machines. + + Submitted by Michal at lightcomp. + + * tools/PTblender.c: Updated command line processing: assume image + 0 as reference if options -m or -c are specified. + +2006-10-24 dmg + + * [r579] ChangeLog, ColourBrightness.c, configure.ac, tests/ChangeLog, + tests/panoAutomateTest.pl, tools/PTblender.c, version.h: 2006-10-24 + dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre5 + + * ColourBrightness.c, tools/PTblender.c: The following bugs in + PTblender + are fixed: + + 1) When -c or -m is specified no image output is done and therefore + it + should not be possible to specify -f too. + 2) When -c is specified wrong index to array curveExtension is used. + 3) Program tries to free already freed memory at the end. + + Submitted by Michal at lightcomp. + + We need a test suite for PTblender. + +2006-10-23 dmg + + * [r578] ChangeLog, PTcommon.c, PTcommon.h, configure.ac, file.c, + filter.h, tests/simpleStitch/ChangeLog, + tests/simpleStitch/reference/psd_no_mask.psd, tiff.c, + tools/ChangeLog, tools/PTtiff2psd.c, version.h: 2006-10-22 dmg + <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre4 + + * tiff.c: Removed redundant #defines + + * PTcommon.c, PTcommon.h, filter.h, file.c: Added support for + stacking images in PSD files, that is, each iamge contributes + equaly to a final image. + +2006-09-25 dmg + + * [r577] tools/ChangeLog, tools/PTtiffdump.c: added PTtiffdump.c + +2006-09-22 dmg + + * [r574] ChangeLog, PTcommon.c, ptstitch.c, + tests/simpleStitch/ChangeLog, tests/simpleStitch/reference/jpeg.jpg, + tests/simpleStitch/reference/psd.psd, + tests/simpleStitch/reference/psd_mask.psd, + tests/simpleStitch/reference/psd_no_mask.psd, + tests/simpleTiff16/ChangeLog, tests/simpleTiff16/README.TXT, + tests/simpleTiff16/reference/psd.psd, + tests/simpleTiff16/reference/psd_mask.psd, + tests/simpleTiff16/reference/psd_no_mask.psd, tools/ChangeLog, + tools/PTblender.c: With this change stitching masks should be + properly computed for all _mask and flat formats + +2006-09-21 dmg + + * [r573] ChangeLog, ColourBrightness.c, ColourBrightness.h, + PTcommon.c, configure.ac, version.h: 2006-09-21 dmg <dm...@uv...> + + * version.h (VERSION), configure.ac: Upgraded to version 2.8.5pre3 + + * ColourBrightness.c, PTcommon.c: added support for + saturation-only and brightness-only correction. I also fixed some + small rounding problems in the old code. + * [r572] tools/ChangeLog, tools/Makefile.am, tools/PTblender.c: + 2006-09-20 dmg <dm...@uv...> + + * PTblender.c: Added option to select type of colour + correction. Fixed a bug (when colour correction and flat output + was requested, the output file did not use the colour corrected + files) + * [r571] ChangeLog, PTcommon.c, bootstrap: 2006-09-21 dmg + <dm...@uv...> + + * bootstrap (have_autoconf): Added support for autoconf 2.6 + + * PTcommon.c (getROI): Replace calls to _nan() with nan() + + by Florian Merz + +2006-09-16 maxlyons + + * [r570] tools/PTmender.c: Adding import of file.h to fix this: + "ptmender.c:310: warning: implicit declaration of function + `panoFileMakeTemp'" + +2006-09-06 maxlyons + + * [r566] PTcommon.c: Fixing panoReplaceExt which was broken for + filenames like c:\dir\another.dir\file, because of the period as + part of the directory name + * [r565] PTcommon.c: Adding check for isNan in getROI. Sometimes the + remapping function returns NaN. This is probably a bug in the + remapping function, but in the meantime adding a check for isNan in + getROI. + * [r564] filter.h: Adding define for bzero. Won't compile on windows + without this. + +2006-09-02 dmg + + * [r562] ChangeLog, file.c: PSDs include some metadata including ICC + Profile + +2006-08-30 dmg + + * [r561] tests/ChangeLog, tests/simpleStitch/reference/psd.psd, + tests/simpleStitch/reference/psd_mask.psd, + tests/simpleStitch/reference/psd_no_mask.psd, + tests/simpleTiff16/reference/psd.psd, + tests/simpleTiff16/reference/psd_mask.psd, + tests/simpleTiff16/reference/psd_no_mask.psd: PSDs include some + metadata including ICC Profile + +2006-08-13 dmg + + * [r560] ChangeLog, ptstitch.c, ptstitch.h: I forgot to add ptstich.c + and ptstitch.h. Unfortunately I noticed once I had refactored the + code for panoStitchComputeMaskMap and unified 16 bit and 8 bit + processing into one function. In the process I found a bug that was + probably affecting spherical panoramas + * [r559] ChangeLog, Makefile.am, PTcommon.c, PTcommon.h, + tools/ChangeLog, tools/PTtiff2psd.c: Created ptstitch.c and + ptstich.h. They will contain any functions that deal with alpha + channels and the stitching process + * [r558] tests/simpleTiff16/ChangeLog, + tests/simpleTiff16/reference/tiff_lzw.tif: added tiff_lzw.tif + reference file + +2006-08-12 dangelo + + * [r557] filter.h, panorama.h, sys_mac.h: fixes for compilation on OSX + 10.4 when used together with Carbon applications. + (patch by Ippei UKAI) + +2006-08-05 dmg + + * [r556] ChangeLog, configure.ac, version.h: Updated version to + 2.8.5pre2 + * [r555] ChangeLog, Makefile.am, jpeg.c, jpegicc.c, jpegicc.h, + tests/simpleStitch/ChangeLog, tests/simpleStitch/reference/jpeg.jpg, + tests/simpleTiff16/ChangeLog, tests/simpleTiff16/reference/jpeg.jpg: + Added ICC profile support for JPEG files + +2006-07-30 dmg + + * [r554] file.h, metadata.c, metadata.h: I forgot to commit these + files + * [r553] ChangeLog, Makefile.am, PTcommon.c, PTcommon.h, bmp.c, + file.c, hdrfile.c, jpeg.c, morpher.c, pict.c, png.c, ppm.c, + pteditor.c, ptpicker.c, pttiff.h, tiff.c, tools/ChangeLog, + tools/PTblender.c, tools/PTmender.c, tools/PTtiff2psd.c: Completed + support for metadata in less-used formats, unified readImage and + maketemppath, see ChangeLogs + * [r552] tests/simpleTiff16/tests: removed test version of output, it + should be generated by the user + * [r551] ChangeLog, ppm.c, tests/simpleTiff16/tests/tiff_deflate.tif, + tests/simpleTiff16/tests/tiff_m0000.tif, + tests/simpleTiff16/tests/tiff_m_cropped0000.tif, + tests/simpleTiff16/tests/tiff_mask0000.tif, + tests/simpleTiff16/tests/tiff_none.tif: I forgot to enable PPM input + files + +2006-07-29 dmg + + * [r550] ChangeLog, Makefile.am, PTcommon.c, configure.ac, tiff.c, + tools/ChangeLog, tools/Makefile.am, version.h: Bumped version to + 2.8.5pre1, started renaming the library to pano13 and removed a bug + that created a segfault under linux + * [r549] tests/simpleTiff16/ChangeLog, tests/simpleTiff16/Makefile.am: + updated makefile of simpleTiff16 + * [r548] tests/ChangeLog, tests/panoAutomateTest.pl: Make sure that + the software tag is not compared, as it will change with every new + version of the binaries + * [r547] ChangeLog, bmp.c, filter.h, pict.c, ppm.c: Forgot to update a + constant, hopefully it will work now + * [r546] ChangeLog, bmp.c, pict.c, ppm.c: Increased the number of + temporary files from 1k to 1g + * [r545] ChangeLog, PTcommon.c, filter.c, jpeg.c, ppm.c, tiff.c: + Updated PPM processing to match JPEG and TIFF, removed debugging + comments, updated indentation + +2006-07-11 brunopostle + + * [r533] configure.ac: added tests/simpleTiff16 to build system + +2006-07-11 dmg + + * [r532] ChangeLog, ColourBrightness.c, PTcommon.c, filter.c, + filter.h, jpeg.c, panorama.h, ppm.c, pttiff.h, tiff.c: Finished + implementation of metadata preservation in TIFF files + * [r531] tests/simpleStitch/ChangeLog: Updated changelog for previous + commit + * [r530] tests/ChangeLog, tests/Makefile.am, + tests/simpleStitch/reference/tiff_deflate.tif, + tests/simpleStitch/reference/tiff_m0000.tif, + tests/simpleStitch/reference/tiff_m0001.tif, + tests/simpleStitch/reference/tiff_m_cropped0000.tif, + tests/simpleStitch/reference/tiff_m_cropped0001.tif, + tests/simpleStitch/reference/tiff_mask0000.tif, + tests/simpleStitch/reference/tiff_mask0001.tif, + tests/simpleStitch/reference/tiff_none.tif, tests/simpleTiff16, + tests/simpleTiff16/060520_3398.TIF, tests/simpleTiff16/ChangeLog, + tests/simpleTiff16/Makefile.am, tests/simpleTiff16/reference, + tests/simpleTiff16/reference/jpeg.jpg, + tests/simpleTiff16/reference/psd.psd, + tests/simpleTiff16/reference/psd_mask.psd, + tests/simpleTiff16/reference/psd_no_mask.psd, + tests/simpleTiff16/reference/tiff_deflate.tif, + tests/simpleTiff16/reference/tiff_m0000.tif, + tests/simpleTiff16/reference/tiff_m_cropped0000.tif, + tests/simpleTiff16/reference/tiff_mask0000.tif, + tests/simpleTiff16/reference/tiff_none.tif, + tests/simpleTiff16/simple.txt, tests/simpleTiff16/temp.txt, + tests/simpleTiff16/tests, tests/simpleTiff16/tests/jpeg.jpg, + tests/simpleTiff16/tests/psd.psd, + tests/simpleTiff16/tests/psd_mask.psd, + tests/simpleTiff16/tests/psd_no_mask.psd, + tests/simpleTiff16/tests/tiff_deflate.tif, + tests/simpleTiff16/tests/tiff_m0000.tif, + tests/simpleTiff16/tests/tiff_m_cropped0000.tif, + tests/simpleTiff16/tests/tiff_mask0000.tif, + tests/simpleTiff16/tests/tiff_none.tif: Added a simple test for 16 + bit TIFF images and updated other tests to match TIFF metadata + preservation + +2006-07-10 dmg + + * [r529] ChangeLog, PTcommon.c, jpeg.c, panorama.h, ppm.c, tiff.c: + Reindented several files to match Apache coding standards --from now + on our standards + +2006-07-08 dmg + + * [r528] ChangeLog, ColourBrightn... [truncated message content] |