From f365becdd37f92d0aebeecb90cf09dd39a03f755 Mon Sep 17 00:00:00 2001 From: Mickael Savinaud <mickael.savinaud@c-s.fr> Date: Tue, 25 Oct 2011 16:43:14 +0200 Subject: [PATCH] ENH: add time information about JPEG2000 reading --- Code/IO/otbJPEG2000ImageIO.cxx | 9 ++- .../Code/Common/otbMultiChannelExtractROI.cxx | 59 +++++++++++++------ Testing/Code/IO/CMakeLists.txt | 22 ++++--- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/Code/IO/otbJPEG2000ImageIO.cxx b/Code/IO/otbJPEG2000ImageIO.cxx index 2a1c9e390f..9eecd4ec78 100644 --- a/Code/IO/otbJPEG2000ImageIO.cxx +++ b/Code/IO/otbJPEG2000ImageIO.cxx @@ -19,9 +19,10 @@ #include "otbMacro.h" - #include "otbSystem.h" +#include "itkTimeProbe.h" + /** sample error debug callback expecting no client object */ @@ -191,6 +192,9 @@ void JPEG2000ImageIO::Read(void* buffer) buffer_size_y - 1); otbMsgDevMacro(<< "Component type: " << this->GetComponentTypeAsString(this->GetComponentType())); + itk::TimeProbe chrono; + chrono.Start(); + // Creating openjpeg objects if (System::SetToLower(System::GetExtension(m_FileName)) == "j2k") { @@ -346,6 +350,9 @@ void JPEG2000ImageIO::Read(void* buffer) fclose(m_File); otb_openjpeg_opj_destroy_codec(m_Codec); otb_openjpeg_opj_image_destroy(m_OpenJpegImage); + + chrono.Stop(); + otbMsgDevMacro(<< "JPEG2000_IO Read took " << chrono.GetTotal() << " sec") } void JPEG2000ImageIO::ReadImageInformation() diff --git a/Testing/Code/Common/otbMultiChannelExtractROI.cxx b/Testing/Code/Common/otbMultiChannelExtractROI.cxx index d4b873549d..0ff185c317 100644 --- a/Testing/Code/Common/otbMultiChannelExtractROI.cxx +++ b/Testing/Code/Common/otbMultiChannelExtractROI.cxx @@ -24,12 +24,17 @@ #include "otbImage.h" +#include "itkTimeProbe.h" + + template <typename InputPixelType /*= unsigned char */, typename OutputPixelType /*= unsigned char*/> int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inputFilename, const char * outputFilename) { typedef otb::MultiChannelExtractROI<InputPixelType, OutputPixelType> ExtractROIFilterType; + int computeExtractTime = 0; + typename ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New(); int cpt(0), nbcanaux(0); @@ -60,6 +65,12 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu std::cout << " ->SetSizeY(" << ::atoi(argv[cpt + 1]) << ")" << std::endl; cpt += 2; } + else if (strArgv == "-time") + { + std::cout << " ->Extract time will be computed" << std::endl; + computeExtractTime = 1; + cpt += 1; + } else if (strArgv == "-channels") { ++cpt; @@ -71,7 +82,7 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu searchChannels = false; } else - //Regarde si ce n'est pas une autre otption + // Check if we have set another option { if (argv[cpt][0] == '-') { @@ -89,12 +100,12 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu } } - // Resume de la ligne de commande - std::cout << " ROI selectionnee : startX " << extractROIFilter->GetStartX() << std::endl; - std::cout << " startY " << extractROIFilter->GetStartY() << std::endl; - std::cout << " sizeX " << extractROIFilter->GetSizeX() << std::endl; - std::cout << " sizeY " << extractROIFilter->GetSizeY() << std::endl; - std::cout << " Canaux selectionnes (" << extractROIFilter->GetNbChannels() << ") : "; + // Resume the command line + std::cout << " Selected ROI: startX " << extractROIFilter->GetStartX() << std::endl; + std::cout << " startY " << extractROIFilter->GetStartY() << std::endl; + std::cout << " sizeX " << extractROIFilter->GetSizeX() << std::endl; + std::cout << " sizeY " << extractROIFilter->GetSizeY() << std::endl; + std::cout << " Selected Channels: (" << extractROIFilter->GetNbChannels() << ") : "; typename ExtractROIFilterType::ChannelsType lChannels; lChannels = extractROIFilter->GetChannels(); for (unsigned int i = 0; i < lChannels.size(); ++i) @@ -102,7 +113,7 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu std::cout << lChannels[i] << " "; } - std::cout << " Extraction de " << nbcanaux << " de l'image source." << std::endl; + std::cout << " Extracted " << nbcanaux << " channels from input image." << std::endl; // OTB-FA-00008-CS typedef otb::ImageFileReader<ITK_TYPENAME ExtractROIFilterType::InputImageType> ReaderType; @@ -111,16 +122,30 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu typename WriterType::Pointer writer = WriterType::New(); reader->SetFileName(inputFilename); - //THOMAS - // reader->Update(); //Necessaire pour connaitre le nombre de canaux dans l'image writer->SetFileName(outputFilename); + extractROIFilter->SetInput(reader->GetOutput()); writer->SetInput(extractROIFilter->GetOutput()); + + itk::TimeProbe chrono; + + if (computeExtractTime) + { + chrono.Start(); + } + writer->Update(); - std::cout << " Nb canaux dans l'image d'entree : " << reader->GetOutput()->GetNumberOfComponentsPerPixel() << + + if (computeExtractTime) + { + chrono.Stop(); + std::cout << " Time to compute the extracted image: " << chrono.GetTotal() << " seconds" << std::endl; + } + + std::cout << " Number of channels in the input image: " << reader->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl; - std::cout << " Nb canaux dans l'image de sortie : " << + std::cout << " Number of channels in the output image: " << extractROIFilter->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl; return EXIT_SUCCESS; @@ -163,8 +188,8 @@ int otbMultiChannelExtractROI(int argc, char * argv[]) argc -= cpt; argv += cpt; - std::cout << " -> " << linputPixelType << " pour " << inputFilename << std::endl; - std::cout << " -> " << loutputPixelType << " pour " << outputFilename << std::endl; + std::cout << " -> " << linputPixelType << " for " << inputFilename << std::endl; + std::cout << " -> " << loutputPixelType << " for " << outputFilename << std::endl; std::string pixelType; if ((linputPixelType == "-uchar") && (loutputPixelType == @@ -225,9 +250,9 @@ int otbMultiChannelExtractROI(int argc, char * argv[]) outputFilename)); else { - std::cout << " Erreur : le format des images en entree est mal precise dans la ligne de commande !!!" << std::endl; - std::cout << " valeurs autorisees : -uchar, -char, -ushort, -uint, -float, -double" << std::endl; - std::cout << " valeurs par defaut : -uchar" << std::endl; + std::cout << " Error : the output image format is not well defined by the command line !!!" << std::endl; + std::cout << " possible values: -uchar, -char, -ushort, -uint, -float, -double" << std::endl; + std::cout << " default value: -uchar" << std::endl; return EXIT_FAILURE; } diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt index 33f72d957a..6b802676eb 100644 --- a/Testing/Code/IO/CMakeLists.txt +++ b/Testing/Code/IO/CMakeLists.txt @@ -1961,8 +1961,9 @@ IF(OTB_DATA_USE_LARGEINPUT) otbMultiChannelExtractROI -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R3C1.JP2 -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1.tif - -startX 0 -startY 0 -sizeX 128 -sizeY 128 - -channels 1 + -startX 256 -startY 512 -sizeX 256 -sizeY 128 + -channels 1 2 3 4 + -time ) ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R3C1-4tiles ${COMMON_TESTS2} @@ -1971,8 +1972,9 @@ IF(OTB_DATA_USE_LARGEINPUT) otbMultiChannelExtractROI -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R3C1.JP2 -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1-4tiles.tif - -startX 2000 -startY 2000 -sizeX 128 -sizeY 128 - -channels 1 + -startX 2000 -startY 2000 -sizeX 256 -sizeY 128 + -channels 1 2 3 4 + -time ) ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R4C1 ${COMMON_TESTS2} @@ -1981,8 +1983,9 @@ IF(OTB_DATA_USE_LARGEINPUT) otbMultiChannelExtractROI -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R4C1.JP2 -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1.tif - -startX 0 -startY 0 -sizeX 128 -sizeY 128 - -channels 3 + -startX 256 -startY 512 -sizeX 256 -sizeY 128 + -channels 1 2 3 4 + -time ) ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R4C1-4tiles ${COMMON_TESTS2} @@ -1990,9 +1993,10 @@ IF(OTB_DATA_USE_LARGEINPUT) ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1-4tiles.tif otbMultiChannelExtractROI -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R4C1.JP2 - -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1-4tiles.tif - -startX 2000 -startY 2000 -sizeX 128 -sizeY 128 - -channels 1 + -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1-4tiles.tif + -startX 2000 -startY 2000 -sizeX 256 -sizeY 128 + -channels 1 2 3 4 + -time ) ENDIF(OTB_DATA_USE_LARGEINPUT) -- GitLab