Skip to content
Snippets Groups Projects
Commit 7509e803 authored by Cyrille Valladeau's avatar Cyrille Valladeau
Browse files

RMG

parents fa75e339 fba3d79a
Branches
Tags
No related merge requests found
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "otbConcatenateImages.h"
#include <iostream>
#include "otbImage.h"
#include "otbVectorImage.h"
#include "otbImageFileReader.h"
#include "otbObjectList.h"
#include "otbImageList.h"
#include "otbImageListToVectorImageFilter.h"
#include "otbStreamingImageFileWriter.h"
#include "otbStandardFilterWatcher.h"
namespace otb
{
template<typename PixelType>
int generic_main_concatenate(otb::ApplicationOptionsResult* parseResult)
{
const unsigned int NbImages = parseResult->GetNumberOfParameters("InputImagesList");
std::ofstream textFile;
if (parseResult->IsOptionPresent("OutputNameList"))
{
std::string textName = parseResult->GetParameterString("OutputNameList");
textFile.open(textName.c_str());
}
std::cout << "Concat of " << NbImages << " images into a multi-band image " << std::endl;
const unsigned int Dimension = 2;
typedef otb::Image<PixelType, Dimension> InputImageType;
typedef otb::ImageFileReader<InputImageType> ImageReaderType;
typedef otb::ObjectList<ImageReaderType> ReaderListType;
typename ReaderListType::Pointer readerList = ReaderListType::New();
typedef otb::ImageList<InputImageType> ImageListType;
typename ImageListType::Pointer imageList = ImageListType::New();
for (unsigned int i = 0; i < NbImages; i++)
{
typename ImageReaderType::Pointer imageReader = ImageReaderType::New();
imageReader->SetFileName(parseResult->GetParameterString("InputImagesList", i).c_str());
std::cout << "Adding image " << parseResult->GetParameterString("InputImagesList", i).c_str() << std::endl;
textFile << parseResult->GetParameterString("InputImagesList", i) << "\n";
imageReader->UpdateOutputInformation();
imageList->PushBack(imageReader->GetOutput());
readerList->PushBack(imageReader);
}
textFile.close();
typedef otb::VectorImage<PixelType, Dimension> VectorImageType;
typedef otb::ImageListToVectorImageFilter<ImageListType, VectorImageType> ImageListToVectorImageFilterType;
typename ImageListToVectorImageFilterType::Pointer iL2VI = ImageListToVectorImageFilterType::New();
iL2VI->SetInput(imageList);
typedef otb::StreamingImageFileWriter<VectorImageType> ImageWriterType;
typename ImageWriterType::Pointer imageWriter = ImageWriterType::New();
imageWriter->SetFileName(parseResult->GetOutputImage().c_str());
unsigned int ram = 256;
if (parseResult->IsOptionPresent("AvailableMemory"))
{
ram = parseResult->GetParameterUInt("AvailableMemory");
}
imageWriter->SetAutomaticTiledStreaming(ram);
imageWriter->SetInput(iL2VI->GetOutput());
otb::StandardFilterWatcher watcher(imageWriter, "Writing");
imageWriter->Update();
return EXIT_SUCCESS;
}
int ConcatenateImages::Describe(ApplicationDescriptor* descriptor)
{
descriptor->SetName("ConcatenateImages");
descriptor->SetDescription("Concatenate n images in a multiband image");
descriptor->AddOptionNParams("InputImagesList", "Images list to concatenate", "il", true, ApplicationDescriptor::InputImage);
descriptor->AddOutputImage();
descriptor->AddOption("OutputPixelType",
"OutputPixelType: unsigned char (1), short int (2), int (3), float (4),"
" double (5), unsigned short int (12), unsigned int (13); default 2",
"t", 1, false, ApplicationDescriptor::Integer);
descriptor->AddOption("OutputNameList",
"Text file containing the name of the images used to generate the output in the same order",
"ot", 1, false, ApplicationDescriptor::String);
descriptor->AddOption("AvailableMemory","Set the maximum of available memory for the pipeline execution in mega bytes (optional, 256 by default)","ram", 1, false, otb::ApplicationDescriptor::Integer);
return EXIT_SUCCESS;
}
int ConcatenateImages::Execute(otb::ApplicationOptionsResult* parseResult)
{
unsigned int type = 2; //default to short int as the original
//program
if (parseResult->IsOptionPresent("OutputPixelType"))
{
type = parseResult->GetParameterUInt("OutputPixelType");
}
switch (type)
{
case 1:
generic_main_concatenate<unsigned char> (parseResult);
break;
case 2:
generic_main_concatenate<short int> (parseResult);
break;
case 3:
generic_main_concatenate<int> (parseResult);
break;
case 4:
generic_main_concatenate<float> (parseResult);
break;
case 5:
generic_main_concatenate<double> (parseResult);
break;
case 12:
generic_main_concatenate<unsigned short int> (parseResult);
break;
case 13:
generic_main_concatenate<unsigned int> (parseResult);
break;
default:
generic_main_concatenate<unsigned char> (parseResult);
break;
}
return EXIT_SUCCESS;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment