diff --git a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx index 2f7fc61774aaa657d4f2f5a7d969a92d3ffb8d3d..c55e6a1cabf49f894652419e50d32c5bb038c02b 100644 --- a/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx +++ b/Testing/Code/FeatureExtraction/otbImageFunctionAdaptor.cxx @@ -136,159 +136,214 @@ int otbImageFunctionAdaptor(int argc, char * argv[]) // Content testing double error = 0.0; - FMDFunction->SetInputImage(reader->GetOutput()); - FMDFunction->SetNeighborhoodRadius(5); - FMDFunction->SetPmax(5); - FMDFunction->SetQmax(5); - FMDFunctionType::OutputType resultFMD = FMDFunction->EvaluateAtIndex(index); - - FMDadaptedFunction->SetInputImage(reader->GetOutput()); - FMDadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - FMDadaptedFunction->GetInternalImageFunction()->SetPmax(5); - FMDadaptedFunction->GetInternalImageFunction()->SetQmax(5); - FMDImageFunctionAdaptorType::OutputType resultAdaptedFMD = FMDadaptedFunction->EvaluateAtIndex(index); - rsltIdx = 0; - for (unsigned int i=0; i<=5; i++) + try { - for (unsigned int j=0; j<=5; j++) + FMDFunction->SetInputImage(reader->GetOutput()); + FMDFunction->SetNeighborhoodRadius(5); + FMDFunction->SetPmax(5); + FMDFunction->SetQmax(5); + FMDFunctionType::OutputType resultFMD = FMDFunction->EvaluateAtIndex(index); + + FMDadaptedFunction->SetInputImage(reader->GetOutput()); + FMDadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + FMDadaptedFunction->GetInternalImageFunction()->SetPmax(5); + FMDadaptedFunction->GetInternalImageFunction()->SetQmax(5); + FMDImageFunctionAdaptorType::OutputType resultAdaptedFMD = FMDadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i <= 5; i++) { - error += vcl_pow(vcl_abs(resultAdaptedFMD[rsltIdx] - resultFMD.at(i).at(j)), 2); - - std::cout << "resultAdaptedFMD : " << resultAdaptedFMD[rsltIdx] - << "\t - resultFMD : " << resultFMD.at(i).at(j) << std::endl; - rsltIdx ++; + for (unsigned int j = 0; j <= 5; j++) + { + error += vcl_pow(vcl_abs(resultAdaptedFMD[rsltIdx] - resultFMD.at(i).at(j)), 2); + + std::cout << "resultAdaptedFMD : " << resultAdaptedFMD[rsltIdx] + << "\t - resultFMD : " << resultFMD.at(i).at(j) << std::endl; + rsltIdx++; + } } } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for FMDadaptedFunction() !" << std::endl; + std::cout << err << std::endl; + } - RMFunction->SetInputImage(reader->GetOutput()); - RMFunction->SetNeighborhoodRadius(5); - RMFunction->SetPmax(5); - RMFunction->SetQmax(5); - RMFunctionType::OutputType resultRM = RMFunction->EvaluateAtIndex(index); - - RMadaptedFunction->SetInputImage(reader->GetOutput()); - RMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - RMadaptedFunction->GetInternalImageFunction()->SetPmax(5); - RMadaptedFunction->GetInternalImageFunction()->SetQmax(5); - RMImageFunctionAdaptorType::OutputType resultAdaptedRM = RMadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<=5; i++) + + try { - for (unsigned int j=0; j<=5; j++) + RMFunction->SetInputImage(reader->GetOutput()); + RMFunction->SetNeighborhoodRadius(5); + RMFunction->SetPmax(5); + RMFunction->SetQmax(5); + RMFunctionType::OutputType resultRM = RMFunction->EvaluateAtIndex(index); + + RMadaptedFunction->SetInputImage(reader->GetOutput()); + RMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + RMadaptedFunction->GetInternalImageFunction()->SetPmax(5); + RMadaptedFunction->GetInternalImageFunction()->SetQmax(5); + RMImageFunctionAdaptorType::OutputType resultAdaptedRM = RMadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i <= 5; i++) { - error += vcl_pow(vcl_abs(resultAdaptedRM[rsltIdx] - resultRM.at(i).at(j)), 2); + for (unsigned int j = 0; j <= 5; j++) + { + error += vcl_pow(vcl_abs(resultAdaptedRM[rsltIdx] - resultRM.at(i).at(j)), 2); - std::cout << "resultAdaptedRM : " << resultAdaptedRM[rsltIdx] - << "\t - resultRM : " << resultRM.at(i).at(j) << std::endl; - rsltIdx ++; + std::cout << "resultAdaptedRM : " << resultAdaptedRM[rsltIdx] << "\t - resultRM : " << resultRM.at(i).at(j) + << std::endl; + rsltIdx++; + } } } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for RMFunction() !" << std::endl; + std::cout << err << std::endl; + } - CMFunction->SetInputImage(reader->GetOutput()); - CMFunction->SetNeighborhoodRadius(5); - CMFunction->SetPmax(5); - CMFunction->SetQmax(5); - CMFunctionType::OutputType resultCM = CMFunction->EvaluateAtIndex(index); - - CMadaptedFunction->SetInputImage(reader->GetOutput()); - CMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - CMadaptedFunction->GetInternalImageFunction()->SetPmax(5); - CMadaptedFunction->GetInternalImageFunction()->SetQmax(5); - CMImageFunctionAdaptorType::OutputType resultAdaptedCM = CMadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<=5; i++) + try { - for (unsigned int j=0; j<=5; j++) + CMFunction->SetInputImage(reader->GetOutput()); + CMFunction->SetNeighborhoodRadius(5); + CMFunction->SetPmax(5); + CMFunction->SetQmax(5); + CMFunctionType::OutputType resultCM = CMFunction->EvaluateAtIndex(index); + + CMadaptedFunction->SetInputImage(reader->GetOutput()); + CMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + CMadaptedFunction->GetInternalImageFunction()->SetPmax(5); + CMadaptedFunction->GetInternalImageFunction()->SetQmax(5); + CMImageFunctionAdaptorType::OutputType resultAdaptedCM = CMadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i <= 5; i++) { - error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).real()), 2); - std::cout << "resultAdaptedCM : (" << resultAdaptedCM[rsltIdx] - << "," << resultAdaptedCM[rsltIdx+1] << ")" - << "\t - resultCM : " << resultCM.at(i).at(j) << std::endl; - rsltIdx ++; - error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).imag()), 2); - rsltIdx ++; + for (unsigned int j = 0; j <= 5; j++) + { + error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).real()), 2); + std::cout << "resultAdaptedCM : (" << resultAdaptedCM[rsltIdx] << "," << resultAdaptedCM[rsltIdx + 1] << ")" + << "\t - resultCM : " << resultCM.at(i).at(j) << std::endl; + rsltIdx++; + error += vcl_pow(vcl_abs(resultAdaptedCM[rsltIdx] - resultCM.at(i).at(j).imag()), 2); + rsltIdx++; + } } } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for CMadaptedFunction() !" << std::endl; + std::cout << err << std::endl; + } - FMFunction->SetInputImage(reader->GetOutput()); - FMFunction->SetNeighborhoodRadius(5); - FMFunctionType::OutputType resultFM = FMFunction->EvaluateAtIndex(index); - - FMadaptedFunction->SetInputImage(reader->GetOutput()); - FMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - FMImageFunctionAdaptorType::OutputType resultAdaptedFM = FMadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<11; i++) + try { + FMFunction->SetInputImage(reader->GetOutput()); + FMFunction->SetNeighborhoodRadius(5); + FMFunctionType::OutputType resultFM = FMFunction->EvaluateAtIndex(index); + + FMadaptedFunction->SetInputImage(reader->GetOutput()); + FMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + FMImageFunctionAdaptorType::OutputType resultAdaptedFM = FMadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i < 11; i++) + { error += vcl_pow(vcl_abs(resultAdaptedFM[rsltIdx] - resultFM[i]), 2); - std::cout << "resultAdaptedFM : " << resultAdaptedFM[rsltIdx] - << "\t - resultFM : " << resultFM[i] << std::endl; - rsltIdx ++; + std::cout << "resultAdaptedFM : " << resultAdaptedFM[rsltIdx] << "\t - resultFM : " << resultFM[i] << std::endl; + rsltIdx++; + } + } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for FMFunction() !" << std::endl; + std::cout << err << std::endl; } - HMFunction->SetInputImage(reader->GetOutput()); - HMFunction->SetNeighborhoodRadius(5); - HMFunctionType::OutputType resultHM = HMFunction->EvaluateAtIndex(index); - - HMadaptedFunction->SetInputImage(reader->GetOutput()); - HMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - HMImageFunctionAdaptorType::OutputType resultAdaptedHM = HMadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<7; i++) + try { - error += vcl_pow(vcl_abs(resultAdaptedHM[rsltIdx] - resultHM[i]), 2); + HMFunction->SetInputImage(reader->GetOutput()); + HMFunction->SetNeighborhoodRadius(5); + HMFunctionType::OutputType resultHM = HMFunction->EvaluateAtIndex(index); + + HMadaptedFunction->SetInputImage(reader->GetOutput()); + HMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + HMImageFunctionAdaptorType::OutputType resultAdaptedHM = HMadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i < 7; i++) + { + error += vcl_pow(vcl_abs(resultAdaptedHM[rsltIdx] - resultHM[i]), 2); - std::cout << "resultAdaptedHM : " << resultAdaptedHM[rsltIdx] - << "\t - resultHM : " << resultHM[i] << std::endl; - rsltIdx ++; + std::cout << "resultAdaptedHM : " << resultAdaptedHM[rsltIdx] << "\t - resultHM : " << resultHM[i] << std::endl; + rsltIdx++; + } + } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for HMFunction() !" << std::endl; + std::cout << err << std::endl; } - RaMFunction->SetInputImage(reader->GetOutput()); - RaMFunction->SetNeighborhoodRadius(5); - RaMFunctionType::OutputType resultRaM = RaMFunction->EvaluateAtIndex(index); - - RaMadaptedFunction->SetInputImage(reader->GetOutput()); - RaMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - RaMImageFunctionAdaptorType::OutputType resultAdaptedRaM = RaMadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<4; i++) - { - error += vcl_pow(vcl_abs(resultAdaptedRaM[rsltIdx] - resultRaM[i]), 2); - - std::cout << "resultAdaptedRaM : " << resultAdaptedRaM[rsltIdx] - << "\t - resultRaM : " << resultRaM[i] << std::endl; - rsltIdx ++; + try + { + RaMFunction->SetInputImage(reader->GetOutput()); + RaMFunction->SetNeighborhoodRadius(5); + RaMFunctionType::OutputType resultRaM = RaMFunction->EvaluateAtIndex(index); + + RaMadaptedFunction->SetInputImage(reader->GetOutput()); + RaMadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + RaMImageFunctionAdaptorType::OutputType resultAdaptedRaM = RaMadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i < 4; i++) + { + error += vcl_pow(vcl_abs(resultAdaptedRaM[rsltIdx] - resultRaM[i]), 2); + + std::cout << "resultAdaptedRaM : " << resultAdaptedRaM[rsltIdx] << "\t - resultRaM : " << resultRaM[i] + << std::endl; + rsltIdx++; + } + } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for RaMFunction() !" << std::endl; + std::cout << err << std::endl; } - LHFunction->SetInputImage(reader->GetOutput()); - LHFunction->SetNeighborhoodRadius(5); - LHFunction->SetNumberOfHistogramBins(64); - LHFunction->SetHistogramMin(filter->GetMinimum()); - LHFunction->SetHistogramMax(filter->GetMaximum()); - LHFunctionType::OutputType resultLH = LHFunction->EvaluateAtIndex(index); - - LHadaptedFunction->SetInputImage(reader->GetOutput()); - LHadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); - LHadaptedFunction->GetInternalImageFunction()->SetNumberOfHistogramBins(64); - LHadaptedFunction->GetInternalImageFunction()->SetHistogramMin(filter->GetMinimum()); - LHadaptedFunction->GetInternalImageFunction()->SetHistogramMax(filter->GetMaximum()); - LHImageFunctionAdaptorType::OutputType resultAdaptedLH = LHadaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<64; i++) + try { - error += vcl_pow(vcl_abs( resultAdaptedLH[rsltIdx] - resultLH->GetFrequency(i)), 2); + LHFunction->SetInputImage(reader->GetOutput()); + LHFunction->SetNeighborhoodRadius(5); + LHFunction->SetNumberOfHistogramBins(64); + LHFunction->SetHistogramMin(filter->GetMinimum()); + LHFunction->SetHistogramMax(filter->GetMaximum()); + LHFunctionType::OutputType resultLH = LHFunction->EvaluateAtIndex(index); + + LHadaptedFunction->SetInputImage(reader->GetOutput()); + LHadaptedFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5); + LHadaptedFunction->GetInternalImageFunction()->SetNumberOfHistogramBins(64); + LHadaptedFunction->GetInternalImageFunction()->SetHistogramMin(filter->GetMinimum()); + LHadaptedFunction->GetInternalImageFunction()->SetHistogramMax(filter->GetMaximum()); + LHImageFunctionAdaptorType::OutputType resultAdaptedLH = LHadaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i < 64; i++) + { + error += vcl_pow(vcl_abs(resultAdaptedLH[rsltIdx] - resultLH->GetFrequency(i)), 2); - std::cout << "resultAdaptedLH : " << resultAdaptedLH[rsltIdx] - << "\t - resultLH : " << resultLH->GetFrequency(i) << std::endl; - rsltIdx ++; + std::cout << "resultAdaptedLH : " << resultAdaptedLH[rsltIdx] << "\t - resultLH : " << resultLH->GetFrequency(i) + << std::endl; + rsltIdx++; + } + } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for LHFunction() !" << std::endl; + std::cout << err << std::endl; } error = vcl_sqrt(error); @@ -303,29 +358,36 @@ int otbImageFunctionAdaptor(int argc, char * argv[]) // Testing the use of a user defined InternalImageFunction instead // of the build-in InternalImageFunction - FMDFunctionType::Pointer myFunction = FMDFunctionType::New(); - FMDImageFunctionAdaptorType::Pointer myAdaptedFunction = FMDImageFunctionAdaptorType::New(); - - myFunction->SetNeighborhoodRadius(8); - myFunction->SetPmax(2); - myFunction->SetQmax(2); - - myAdaptedFunction->SetInputImage(reader->GetOutput()); - myAdaptedFunction->SetInternalImageFunction(myFunction); - FMDImageFunctionAdaptorType::OutputType myResult = myAdaptedFunction->EvaluateAtIndex(index); - - rsltIdx = 0; - for (unsigned int i=0; i<=2; i++) + try { - for (unsigned int j=0; j<=2; j++) + FMDFunctionType::Pointer myFunction = FMDFunctionType::New(); + FMDImageFunctionAdaptorType::Pointer myAdaptedFunction = FMDImageFunctionAdaptorType::New(); + + myFunction->SetNeighborhoodRadius(8); + myFunction->SetPmax(2); + myFunction->SetQmax(2); + + myAdaptedFunction->SetInputImage(reader->GetOutput()); + myAdaptedFunction->SetInternalImageFunction(myFunction); + FMDImageFunctionAdaptorType::OutputType myResult = myAdaptedFunction->EvaluateAtIndex(index); + + rsltIdx = 0; + for (unsigned int i = 0; i <= 2; i++) { - std::cout << "myResult: " << myResult[rsltIdx] << std::endl; - rsltIdx ++; + for (unsigned int j = 0; j <= 2; j++) + { + std::cout << "myResult: " << myResult[rsltIdx] << std::endl; + rsltIdx++; + } } + std::cout << myAdaptedFunction << std::endl; + } + catch (itk::ExceptionObject& err) + { + std::cout << "ExceptionObject caught for FMDFunctionType() !" << std::endl; + std::cout << err << std::endl; } - std::cout << myAdaptedFunction << std::endl; - return EXIT_SUCCESS; }