From: <st...@us...> - 2009-08-03 14:21:13
|
Revision: 4155 http://hugin.svn.sourceforge.net/hugin/?rev=4155&view=rev Author: stativ Date: 2009-08-03 14:21:03 +0000 (Mon, 03 Aug 2009) Log Message: ----------- Fixed crash in hugin_hdrmerge Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-03 11:04:03 UTC (rev 4154) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-03 14:21:03 UTC (rev 4155) @@ -148,7 +148,6 @@ for(unsigned i = 0; i < inputFiles.size(); i++) { ImageImportInfo inputInfo(inputFiles[i].c_str()); - Rect2D bounds(Point2D(inputInfo.getPosition()), inputInfo.size()); FRGBImage img(inputInfo.size()); BImage tmpMask(inputInfo.size()); @@ -160,11 +159,11 @@ srcImage(*(weights.at(i))), destImage(img), Arg1() * Arg2()); //combine with output img - combineTwoImages(srcImageRange(*output, bounds), srcImage(img), - destImage(*output, bounds.upperLeft()), + combineTwoImages(srcImageRange(*output), srcImage(img), + destImage(*output), Arg1() + Arg2()); //combine masks - combineTwoImages(srcImageRange(*mask, bounds), srcImage(tmpMask), + combineTwoImages(srcImageRange(*mask), srcImage(tmpMask), destImage(*mask), max(Arg2() + Arg1(), Param(255))); } return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-19 17:29:45
|
Revision: 4247 http://hugin.svn.sourceforge.net/hugin/?rev=4247&view=rev Author: stativ Date: 2009-08-19 17:29:36 +0000 (Wed, 19 Aug 2009) Log Message: ----------- Fix to hugin_hdrmerge. Apply logarithm. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-19 12:16:52 UTC (rev 4246) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-19 17:29:36 UTC (rev 4247) @@ -288,7 +288,7 @@ reduceFilesToHDR(inputFiles, outputFile, onlyCompleteOverlap, waverage); } else if (mode == "khan") { Deghosting* deghoster = NULL; - Khan khanDeghoster(inputFiles, 0, 0, iterations, g_verbose); + Khan khanDeghoster(inputFiles, ADV_LOGARITHM, 0, iterations, g_verbose); khanDeghoster.setSigma(sigma); deghoster = &khanDeghoster; vector<FImagePtr> weights = deghoster->createWeightMasks(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-20 12:09:15
|
Revision: 4251 http://hugin.svn.sourceforge.net/hugin/?rev=4251&view=rev Author: stativ Date: 2009-08-20 12:09:08 +0000 (Thu, 20 Aug 2009) Log Message: ----------- hugin_hdrmerge now writes output. But it contains artifacts. This commit is only because I want to have some fallback before making more changes. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 07:33:33 UTC (rev 4250) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 12:09:08 UTC (rev 4251) @@ -135,16 +135,15 @@ /** compute output image when given source images */ bool weightedAverageOfImageFiles(const vector<string> &inputFiles, const vector<FImagePtr> &weights, - FRGBImage *output, - BImage *mask) + FRGBImage &output) { if(g_verbose > 0) { cout << "Merging input images" << endl; } + int width = (weights[0])->width(); + int height = (weights[0])->height(); assert(inputFiles.size() == weights.size()); - output->resize((weights[0])->width(), (weights[0])->height()); - mask->resize((weights[0])->width(), (weights[0])->height()); for(unsigned i = 0; i < inputFiles.size(); i++) { ImageImportInfo inputInfo(inputFiles[i].c_str()); @@ -158,13 +157,12 @@ combineTwoImages(srcImageRange(img), srcImage(*(weights.at(i))), destImage(img), Arg1() * Arg2()); + + output.resize(width, height); //combine with output img - combineTwoImages(srcImageRange(*output), srcImage(img), - destImage(*output), + combineTwoImages(srcImageRange(output), srcImage(img), + destImage(output), Arg1() + Arg2()); - //combine masks - combineTwoImages(srcImageRange(*mask), srcImage(tmpMask), - destImage(*mask), max(Arg2() + Arg1(), Param(255))); } return true; } @@ -293,12 +291,14 @@ deghoster = &khanDeghoster; vector<FImagePtr> weights = deghoster->createWeightMasks(); - BImage mask; + weightedAverageOfImageFiles(inputFiles, weights, output); if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; } - weightedAverageOfImageFiles(inputFiles, weights, &output, &mask); ImageExportInfo exinfo(outputFile.c_str()); + exinfo.setPixelType("FLOAT"); + BImage alpha(output.width(), output.height(), 255); + exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); } else { std::cerr << "Unknown merge mode, see help for a list of possible modes" << std::endl; return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-20 12:20:04
|
Revision: 4252 http://hugin.svn.sourceforge.net/hugin/?rev=4252&view=rev Author: stativ Date: 2009-08-20 12:19:50 +0000 (Thu, 20 Aug 2009) Log Message: ----------- modified mergeWeightedAverage function so it's usable for deghosting. Although it has more reasonable output (not extremely underexposed) it still contains the same artifacts. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 12:09:08 UTC (rev 4251) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 12:19:50 UTC (rev 4252) @@ -77,16 +77,23 @@ // load all images and apply a weighted average merge, with // special cases for completely over or underexposed pixels. -bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output) +// FIXME weights are changed during process so dont use them after calling mergeWeightedAverage() +bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output, vector<FImagePtr> &weights) { // load all images into memory vector<ImagePtr> images; - vector<BImagePtr> weightImages; + bool noWeights = false; + if (weights.empty()) { + noWeights = true; + } else if (inputFiles.size() != weights.size()) { + std::cerr << "Error: the number of images is not the same as the number of weight masks" << std::endl; + return false; + } for (size_t i=0; i < inputFiles.size(); i++) { ImagePtr img = ImagePtr(new ImageType()); - BImagePtr weight = BImagePtr(new BImage()); + FImagePtr weight = FImagePtr(new FImage()); if (g_verbose > 0) { std::cout << "Loading image: " << inputFiles[i] << std::endl; @@ -96,7 +103,12 @@ weight->resize(info.size()); vigra::importImageAlpha(info, vigra::destImage(*img), destImage(*weight)); images.push_back(img); - weightImages.push_back(weight); + + if (noWeights) { + weights.push_back(weight); + } else { + vigra::combineTwoImages(srcImageRange(*weight), srcImage(*(weights[i])), destImage(*(weights[i])), Arg1() * Arg2()); + } } // ensure all images have the same size (cropped images not supported yet) @@ -123,7 +135,7 @@ // loop over all exposures for (unsigned imgNr=0; imgNr < images.size(); imgNr++) { // add pixel to weighted average - waverage( (*images[imgNr])(x,y), (*weightImages[imgNr])(x,y) ); + waverage( (*images[imgNr])(x,y), (*weights[imgNr])(x,y) ); } // get result output(x,y) = waverage(); @@ -132,41 +144,6 @@ return true; } -/** compute output image when given source images */ -bool weightedAverageOfImageFiles(const vector<string> &inputFiles, - const vector<FImagePtr> &weights, - FRGBImage &output) -{ - if(g_verbose > 0) { - cout << "Merging input images" << endl; - } - int width = (weights[0])->width(); - int height = (weights[0])->height(); - - assert(inputFiles.size() == weights.size()); - - for(unsigned i = 0; i < inputFiles.size(); i++) { - ImageImportInfo inputInfo(inputFiles[i].c_str()); - FRGBImage img(inputInfo.size()); - BImage tmpMask(inputInfo.size()); - - //load image - importImageAlpha(inputInfo, destImage(img), destImage(tmpMask)); - - //combine with weight - combineTwoImages(srcImageRange(img), - srcImage(*(weights.at(i))), - destImage(img), Arg1() * Arg2()); - - output.resize(width, height); - //combine with output img - combineTwoImages(srcImageRange(output), srcImage(img), - destImage(output), - Arg1() + Arg2()); - } - return true; -} - static void usage(const char * name) { cerr << name << ": merge overlapping images" << std::endl @@ -270,7 +247,8 @@ cout << "Running simple weighted avg algorithm" << std::endl; } - mergeWeightedAverage(inputFiles, output); + vector<FImagePtr> weights; + mergeWeightedAverage(inputFiles, output, weights); // save output file if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; @@ -291,7 +269,7 @@ deghoster = &khanDeghoster; vector<FImagePtr> weights = deghoster->createWeightMasks(); - weightedAverageOfImageFiles(inputFiles, weights, output); + mergeWeightedAverage(inputFiles, output, weights); if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-20 12:35:23
|
Revision: 4253 http://hugin.svn.sourceforge.net/hugin/?rev=4253&view=rev Author: stativ Date: 2009-08-20 12:35:10 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Fixed bug in avg_slow Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 12:19:50 UTC (rev 4252) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 12:35:10 UTC (rev 4253) @@ -254,6 +254,7 @@ std::cout << "Writing " << outputFile << std::endl; } ImageExportInfo exinfo(outputFile.c_str()); + exinfo.setPixelType("FLOAT"); BImage alpha(output.width(), output.height(), 255); exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); } else if (mode == "avg") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-21 13:33:25
|
Revision: 4257 http://hugin.svn.sourceforge.net/hugin/?rev=4257&view=rev Author: stativ Date: 2009-08-21 13:33:18 +0000 (Fri, 21 Aug 2009) Log Message: ----------- Small change to interface. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-20 22:44:13 UTC (rev 4256) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-21 13:33:18 UTC (rev 4257) @@ -144,6 +144,11 @@ return true; } +bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output) { + vector<FImagePtr> weights; + return mergeWeightedAverage(inputFiles, output, weights); +} + static void usage(const char * name) { cerr << name << ": merge overlapping images" << std::endl @@ -247,8 +252,7 @@ cout << "Running simple weighted avg algorithm" << std::endl; } - vector<FImagePtr> weights; - mergeWeightedAverage(inputFiles, output, weights); + mergeWeightedAverage(inputFiles, output); // save output file if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-08-23 08:37:29
|
Revision: 4265 http://hugin.svn.sourceforge.net/hugin/?rev=4265&view=rev Author: stativ Date: 2009-08-23 08:37:19 +0000 (Sun, 23 Aug 2009) Log Message: ----------- hugin_hdrmerge finally works correctly. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-23 07:30:18 UTC (rev 4264) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-08-23 08:37:19 UTC (rev 4265) @@ -77,23 +77,16 @@ // load all images and apply a weighted average merge, with // special cases for completely over or underexposed pixels. -// FIXME weights are changed during process so dont use them after calling mergeWeightedAverage() -bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output, vector<FImagePtr> &weights) +bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output) { // load all images into memory vector<ImagePtr> images; - bool noWeights = false; - if (weights.empty()) { - noWeights = true; - } else if (inputFiles.size() != weights.size()) { - std::cerr << "Error: the number of images is not the same as the number of weight masks" << std::endl; - return false; - } + vector<BImagePtr> weightImages; for (size_t i=0; i < inputFiles.size(); i++) { ImagePtr img = ImagePtr(new ImageType()); - FImagePtr weight = FImagePtr(new FImage()); + BImagePtr weight = BImagePtr(new BImage()); if (g_verbose > 0) { std::cout << "Loading image: " << inputFiles[i] << std::endl; @@ -103,12 +96,7 @@ weight->resize(info.size()); vigra::importImageAlpha(info, vigra::destImage(*img), destImage(*weight)); images.push_back(img); - - if (noWeights) { - weights.push_back(weight); - } else { - vigra::combineTwoImages(srcImageRange(*weight), srcImage(*(weights[i])), destImage(*(weights[i])), Arg1() * Arg2()); - } + weightImages.push_back(weight); } // ensure all images have the same size (cropped images not supported yet) @@ -135,7 +123,7 @@ // loop over all exposures for (unsigned imgNr=0; imgNr < images.size(); imgNr++) { // add pixel to weighted average - waverage( (*images[imgNr])(x,y), (*weights[imgNr])(x,y) ); + waverage( (*images[imgNr])(x,y), (*weightImages[imgNr])(x,y) ); } // get result output(x,y) = waverage(); @@ -144,9 +132,45 @@ return true; } -bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output) { - vector<FImagePtr> weights; - return mergeWeightedAverage(inputFiles, output, weights); +/** compute output image when given source images */ +bool weightedAverageOfImageFiles(const vector<string> &inputFiles, + const vector<FImagePtr> &weights, + FRGBImage &output) +{ + if(g_verbose > 0) { + cout << "Merging input images" << endl; + } + int width = (weights[0])->width(); + int height = (weights[0])->height(); + + assert(inputFiles.size() == weights.size()); + + FRGBImage weightedImg(width, height); + FImage weightAdded(width, height); + for(unsigned i = 0; i < inputFiles.size(); i++) { + ImageImportInfo inputInfo(inputFiles[i].c_str()); + FRGBImage tmpImg(inputInfo.size()); + BImage tmpMask(inputInfo.size()); + + //load image + importImageAlpha(inputInfo, destImage(tmpImg), destImage(tmpMask)); + + //combine mask with weight + /*combineTwoImages(srcImageRange(tmpMask), + srcImage(*(weights[i])), + destImage(tmpMask), Arg1() * Arg2());*/ + + //combine with weight + combineTwoImages(srcImageRange(tmpImg), srcImage(*(weights[i])), destImage(tmpImg), Arg1() * Arg2()); + + combineTwoImages(srcImageRange(tmpImg), srcImage(weightedImg), destImage(weightedImg), Arg1() + Arg2()); + + combineTwoImages(srcImageRange(weightAdded), srcImage(*(weights[i])), destImage(weightAdded), Arg1() + Arg2()); + } + output.resize(width, height); + combineTwoImages(srcImageRange(weightedImg), srcImage(weightAdded), destImage(output), Arg1() / Arg2()); + + return true; } static void usage(const char * name) @@ -273,7 +297,7 @@ deghoster = &khanDeghoster; vector<FImagePtr> weights = deghoster->createWeightMasks(); - mergeWeightedAverage(inputFiles, output, weights); + weightedAverageOfImageFiles(inputFiles, weights, output); if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-09-18 16:25:44
|
Revision: 4452 http://hugin.svn.sourceforge.net/hugin/?rev=4452&view=rev Author: stativ Date: 2009-09-18 16:25:37 +0000 (Fri, 18 Sep 2009) Log Message: ----------- Handle I/O in hugin_hdrmerge better. Now it should be possible to load and save all types of HDR images supported by VIGRA. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-18 15:54:20 UTC (rev 4451) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-18 16:25:37 UTC (rev 4452) @@ -94,7 +94,11 @@ vigra::ImageImportInfo info(inputFiles[i].c_str()); img->resize(info.size()); weight->resize(info.size()); - vigra::importImageAlpha(info, vigra::destImage(*img), destImage(*weight)); + if (info.numBands() == 4) { + importImageAlpha(info, destImage(*img), destImage(*weight)); + } else { + importImage(info, destImage(*img)); + } images.push_back(img); weightImages.push_back(weight); } @@ -150,16 +154,15 @@ for(unsigned i = 0; i < inputFiles.size(); i++) { ImageImportInfo inputInfo(inputFiles[i].c_str()); FRGBImage tmpImg(inputInfo.size()); - BImage tmpMask(inputInfo.size()); //load image - importImageAlpha(inputInfo, destImage(tmpImg), destImage(tmpMask)); + if (inputInfo.numBands() == 4) { + BImage tmpMask(inputInfo.size()); + importImageAlpha(inputInfo, destImage(tmpImg), destImage(tmpMask)); + } else { + importImage(inputInfo, destImage(tmpImg)); + } - //combine mask with weight - /*combineTwoImages(srcImageRange(tmpMask), - srcImage(*(weights[i])), - destImage(tmpMask), Arg1() * Arg2());*/ - //combine with weight combineTwoImages(srcImageRange(tmpImg), srcImage(*(weights[i])), destImage(tmpImg), Arg1() * Arg2()); @@ -283,8 +286,12 @@ } ImageExportInfo exinfo(outputFile.c_str()); exinfo.setPixelType("FLOAT"); - BImage alpha(output.width(), output.height(), 255); - exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); + if (strcmp(exinfo.getFileType(),"HDR")) { + exportImage(srcImageRange(output), exinfo); + } else { + BImage alpha(output.width(), output.height(), 255); + exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); + } } else if (mode == "avg") { // apply weighted average functor with // heuristic to deal with pixels that are overexposed in all images @@ -303,8 +310,12 @@ } ImageExportInfo exinfo(outputFile.c_str()); exinfo.setPixelType("FLOAT"); - BImage alpha(output.width(), output.height(), 255); - exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); + if (strcmp(exinfo.getFileType(),"HDR")) { + exportImage(srcImageRange(output), exinfo); + } else { + BImage alpha(output.width(), output.height(), 255); + exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); + } } else { std::cerr << "Unknown merge mode, see help for a list of possible modes" << std::endl; return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-09-19 07:00:34
|
Revision: 4457 http://hugin.svn.sourceforge.net/hugin/?rev=4457&view=rev Author: stativ Date: 2009-09-19 07:00:21 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Added some of the advanced flags to the hugin_hdrmerge. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-18 20:05:26 UTC (rev 4456) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:00:21 UTC (rev 4457) @@ -74,6 +74,7 @@ static int g_verbose = 0; +const uint16_t OTHER_GRAY = 1; // load all images and apply a weighted average merge, with // special cases for completely over or underexposed pixels. @@ -190,6 +191,11 @@ << " -i iter number of iterations to execute (default is 1). Khan only" << std::endl << " -s sigma standard deviation of Gaussian weighting" << endl << " function (sigma > 0); default: 30. Khan only" << endl + << " -a set advanced settings. Possible options are:" << endl + << " f use gray images for computation. It's about two times faster" << endl + << " but it usually returns worse results." << endl + << " g use gamma 2.2 correction instead of logarithm" << endl + << " m do not scale image, NOTE: slows down process" << endl << " -c Only consider pixels that are defined in all images (avg mode only)" << std::endl << " -v Verbose, print progress messages, repeat for" << std::endl << " even more verbose output" << std::endl @@ -213,6 +219,8 @@ bool onlyCompleteOverlap = false; int iterations = 1; double sigma = 30; + uint16_t flags = 0; + uint16_t otherFlags = 0; string basename; @@ -227,6 +235,23 @@ case 's': sigma = atof(optarg); break; + case 'a': + for(char *c = optarg; *c; c++) { + switch(*c) { + case 'f': + otherFlags += OTHER_GRAY; + break; + case 'g': + flags += ADV_GAMMA; + break; + case 'm': + flags -= ADV_MULTIRES; + break; + default: + cerr<< "Error: unknown option" << endl; + exit(1); + } + } case 'c': onlyCompleteOverlap = true; break; @@ -300,10 +325,18 @@ reduceFilesToHDR(inputFiles, outputFile, onlyCompleteOverlap, waverage); } else if (mode == "khan") { Deghosting* deghoster = NULL; - Khan<RGBValue<float> > khanDeghoster(inputFiles, 0, 0, iterations, sigma, g_verbose); - deghoster = &khanDeghoster; - vector<FImagePtr> weights = deghoster->createWeightMasks(); + vector<FImagePtr> weights; + if (otherFlags & OTHER_GRAY) { + Khan<float> khanDeghoster(inputFiles, flags, 0, iterations, sigma, g_verbose); + deghoster = &khanDeghoster; + weights = deghoster->createWeightMasks(); + } else { + Khan<RGBValue<float> > khanDeghoster(inputFiles, flags, 0, iterations, sigma, g_verbose); + deghoster = &khanDeghoster; + weights = deghoster->createWeightMasks(); + } + weightedAverageOfImageFiles(inputFiles, weights, output); if (g_verbose > 0) { std::cout << "Writing " << outputFile << std::endl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-09-19 07:30:38
|
Revision: 4458 http://hugin.svn.sourceforge.net/hugin/?rev=4458&view=rev Author: stativ Date: 2009-09-19 07:30:29 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Revert the change to the handling of output in hugin_hdrmerge. I missed that ImageExportInfo.getFileType() is not implemented (returns "") so it didn't work at all. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:00:21 UTC (rev 4457) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:30:29 UTC (rev 4458) @@ -311,12 +311,8 @@ } ImageExportInfo exinfo(outputFile.c_str()); exinfo.setPixelType("FLOAT"); - if (strcmp(exinfo.getFileType(),"HDR")) { - exportImage(srcImageRange(output), exinfo); - } else { - BImage alpha(output.width(), output.height(), 255); - exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); - } + BImage alpha(output.width(), output.height(), 255); + exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); } else if (mode == "avg") { // apply weighted average functor with // heuristic to deal with pixels that are overexposed in all images @@ -343,12 +339,8 @@ } ImageExportInfo exinfo(outputFile.c_str()); exinfo.setPixelType("FLOAT"); - if (strcmp(exinfo.getFileType(),"HDR")) { - exportImage(srcImageRange(output), exinfo); - } else { - BImage alpha(output.width(), output.height(), 255); - exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); - } + BImage alpha(output.width(), output.height(), 255); + exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); } else { std::cerr << "Unknown merge mode, see help for a list of possible modes" << std::endl; return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-09-19 07:32:07
|
Revision: 4459 http://hugin.svn.sourceforge.net/hugin/?rev=4459&view=rev Author: stativ Date: 2009-09-19 07:31:57 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Changed default output file name from merged.hdr to the merged.exr because EXR is the only one which works correctly. Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:30:29 UTC (rev 4458) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:31:57 UTC (rev 4459) @@ -214,7 +214,7 @@ opterr = 0; g_verbose = 0; - std::string outputFile = "merged.hdr"; + std::string outputFile = "merged.exr"; std::string mode = "avg"; bool onlyCompleteOverlap = false; int iterations = 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-09-19 08:50:39
|
Revision: 4460 http://hugin.svn.sourceforge.net/hugin/?rev=4460&view=rev Author: stativ Date: 2009-09-19 08:50:32 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Use NumericTraits<>::Promote to lower the possibility of overflow Modified Paths: -------------- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp Modified: hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp =================================================================== --- hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 07:31:57 UTC (rev 4459) +++ hugin/branches/gsoc2009_deghosting/src/tools/hugin_hdrmerge.cpp 2009-09-19 08:50:32 UTC (rev 4460) @@ -150,11 +150,11 @@ assert(inputFiles.size() == weights.size()); - FRGBImage weightedImg(width, height); - FImage weightAdded(width, height); + BasicImage<NumericTraits<FRGBImage::PixelType>::Promote> weightedImg(width, height); + BasicImage<NumericTraits<FImage::PixelType>::Promote> weightAdded(width, height); for(unsigned i = 0; i < inputFiles.size(); i++) { ImageImportInfo inputInfo(inputFiles[i].c_str()); - FRGBImage tmpImg(inputInfo.size()); + BasicImage<NumericTraits<FRGBImage::PixelType>::Promote> tmpImg(inputInfo.size()); //load image if (inputInfo.numBands() == 4) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |