diff --git a/Testing/Fa/0000041-mean_shift.cxx b/Testing/Fa/0000041-mean_shift.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7a5e3c08fe7c2950359f9c3b5c7882a9868db4e6 --- /dev/null +++ b/Testing/Fa/0000041-mean_shift.cxx @@ -0,0 +1,85 @@ +#include "otbImage.h" +#include "otbVectorImage.h" +#include "otbImageFileReader.h" +#include "otbStreamingImageFileWriter.h" +#include "otbMeanShiftVectorImageFilter.h" + +//Code adapted from submission from Christophe Simler +// http://bugs.orfeo-toolbox.org/view.php?id=41 + +int main( int argc, char *argv[] ) +{ + + if (argc < 9) + { + std::cout << "Usage : inputImage rangeRadius spatialRadius minRegionSize outfilenamefiltered outfilenamesegmented outfilenamelabeled outfilenameboundary" << std::endl ; + + return EXIT_FAILURE; + } + + char * filename = argv[1]; + int rangeRadius = atoi(argv[2]); + int spatialRadius = atoi(argv[3]); + int minRegionSize = atoi(argv[4]); + char * outfilenamefiltered = argv[5]; + char * outfilenamesegmented = argv[6]; + char * outfilenamelabeled = argv[7]; + char * outfilenameboundary = argv[8]; + + + typedef otb::VectorImage< unsigned char, 2 > ImageType; // image d'entrée, image filtrée et image segmenté + typedef otb::Image< int, 2 > TLabeledOutput; // image labelisée,image des contours (de l'image labellisée) + + + // lecture de l'image d'entree a partir d'un fichier + typedef otb::ImageFileReader< ImageType > ReaderType; + ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(filename); + + // traitement avec le filtre + typedef otb::MeanShiftVectorImageFilter< ImageType, ImageType, TLabeledOutput > FilterType; + FilterType::Pointer filter = FilterType::New(); + filter->SetRangeRadius(rangeRadius); + filter->SetSpatialRadius(spatialRadius); + filter->SetMinimumRegionSize(minRegionSize); + + + + // sauvegarde de l'image filtrée, + typedef otb::StreamingImageFileWriter<ImageType> WriterType1; + WriterType1::Pointer writer1=WriterType1::New(); + writer1->SetFileName(outfilenamefiltered); + + // sauvegarde de l'image segmenté, + typedef otb::StreamingImageFileWriter<ImageType> WriterType2; + WriterType2::Pointer writer2=WriterType2::New(); + writer2->SetFileName(outfilenamesegmented); + + // sauvegarde de l'image labelisée + typedef otb::StreamingImageFileWriter<TLabeledOutput> WriterType3; + WriterType3::Pointer writer3=WriterType3::New(); + writer3->SetFileName(outfilenamelabeled); + + // sauvegarde de l'image de contours + typedef otb::StreamingImageFileWriter<TLabeledOutput> WriterType4; + WriterType4::Pointer writer4=WriterType4::New(); + writer4->SetFileName(outfilenameboundary); + + + // construction du pipeline + filter->SetInput(reader->GetOutput()); + + writer1->SetInput(filter->GetOutput()); // image filtrée (*) + writer2->SetInput(filter->GetClusteredOutput()); // image segmenté (clusterisée avec cohérence spaciale ?) (*) + writer3->SetInput(filter->GetLabeledClusteredOutput()); // image des labels des clusters + writer4->SetInput(filter->GetClusterBoundariesOutput()); // image des contours des clusters (contours de l'image labelisée) + + writer1->Update(); + writer2->Update(); + writer3->Update(); + writer4->Update(); + + return 0; +} + + diff --git a/Testing/Fa/CMakeLists.txt b/Testing/Fa/CMakeLists.txt index ef5e16099ac0967c411a6bef8207fa28e8a32b76..73867a57898404e84af630e074722c1974c25059 100644 --- a/Testing/Fa/CMakeLists.txt +++ b/Testing/Fa/CMakeLists.txt @@ -25,13 +25,13 @@ SET(VISU_TESTS ${CXX_TEST_PATH}/otbVisuTests1) # ------- FAs traitees ----------------------------------- # --- FA 00005 ENVI (GDAL) image multi-canal --- -ADD_TEST(FA-00005-io_EnviMultiBande_RW ${IO_TESTS} +ADD_TEST(FA-00005-io_EnviMultiBande_RW ${IO_TESTS} otbVectorImageFileReaderWriterTest ${INPUTDATA}/GomaBestScale_w15_50.raw.hdr ${TEMP}/FA-00005-io_EnviMultiBande_GomaBestScale_w15.hdr ) -ADD_TEST(FA-00005-io_EnviMultiBande ${COMMON_TESTS2} +ADD_TEST(FA-00005-io_EnviMultiBande ${COMMON_TESTS2} # --compare-image ${TOL} ${BASELINE}/FA-00005-io_EnviMultiBande_GomaBestScale_w15_50_100_120_150_200.hdr # ${TEMP}/FA-00005-io_EnviMultiBande_GomaBestScale_w15_50_100_120_150_200.hdr otbMultiChannelExtractROI @@ -42,52 +42,52 @@ ADD_TEST(FA-00005-io_EnviMultiBande ${COMMON_TESTS2} # --- FA 00006 ENVI (GDAL) Conversion Type de pixel --- -ADD_TEST(FA-00006-io_Amst_ers1_Double2UChar ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Amst_ers1_Double2UChar ${COMMON_TESTS} # --compare-image ${TOL} ${INPUTDATA}/amst_ers1.ima.hdr # ${TEMP}/FA-00006-io_amst_ers1_double2uchar.hdr otbMultiToMonoChannelExtractROI - -double ${INPUTDATA}/amst_ers1.ima.hdr + -double ${INPUTDATA}/amst_ers1.ima.hdr -uchar ${TEMP}/FA-00006-io_amst_ers1_double2uchar.hdr ) -ADD_TEST(FA-00006-io_Amst_ers1_UChar2UChar ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Amst_ers1_UChar2UChar ${COMMON_TESTS} # --compare-image ${TOL} ${INPUTDATA}/amst_ers1.ima.hdr # ${TEMP}/FA-00006-io_amst_ers1_uchar2uchar.hdr otbMultiToMonoChannelExtractROI - -uchar ${INPUTDATA}/amst_ers1.ima.hdr + -uchar ${INPUTDATA}/amst_ers1.ima.hdr -uchar ${TEMP}/FA-00006-io_amst_ers1_uchar2uchar.hdr ) -ADD_TEST(FA-00006-io_Amst_ers1_Double2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Amst_ers1_Double2Double ${COMMON_TESTS} otbMultiToMonoChannelExtractROI -double ${INPUTDATA}/amst_ers1.ima.hdr -double ${TEMP}/FA-00006-io_amst_ers1_double2double.hdr ) -ADD_TEST(FA-00006-io_Amst_ers1_UChar2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Amst_ers1_UChar2Double ${COMMON_TESTS} otbMultiToMonoChannelExtractROI -uchar ${INPUTDATA}/amst_ers1.ima.hdr -double ${TEMP}/FA-00006-io_amst_ers1_uchar2double.hdr ) -ADD_TEST(FA-00006-io_Poupees_OCT_UChar2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Poupees_OCT_UChar2Double ${COMMON_TESTS} # --compare-image ${TOL} ${BASELINE}/ioMultiMonoChannelROI_ENVI2PNG_poupees_1canal_302_2_134_330.png # ${TEMP}/ioMultiMonoChannelROI_ENVI2PNG_poupees_1canal_302_2_134_330.png otbMultiToMonoChannelExtractROI -uchar ${INPUTDATA}/poupees_1canal.c1.hdr -double ${TEMP}/FA-00006-io_Poupees_1canal_r8.hdr ) -ADD_TEST(FA-00006-io_Poupees_OCT_Double2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Poupees_OCT_Double2Double ${COMMON_TESTS} # --compare-image ${TOL} ${TEMP}/FA-00006-io_Poupees_1canal_r8.hdr # ${TEMP}/FA-00006-io_Poupees_1canal_r8_bis.hdr otbMultiToMonoChannelExtractROI - -double ${INPUTDATA}/poupees_1canal.c1.hdr + -double ${INPUTDATA}/poupees_1canal.c1.hdr -double ${TEMP}/FA-00006-io_Poupees_1canal_r8_bis.hdr ) -ADD_TEST(FA-00006-io_Poupees_OCT_Double2UChar ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Poupees_OCT_Double2UChar ${COMMON_TESTS} # --compare-image ${TOL} ${INPUTDATA}/poupees_1canal.c1.hdr # ${TEMP}/FA-00006-io_Poupees_1canal_oct.hdr otbMultiToMonoChannelExtractROI - -double ${INPUTDATA}/poupees_1canal.c1.hdr + -double ${INPUTDATA}/poupees_1canal.c1.hdr -uchar ${TEMP}/FA-00006-io_Poupees_1canal_oct.hdr ) -ADD_TEST(FA-00006-io_Poupees_R8_Double2UCharBis ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Poupees_R8_Double2UCharBis ${COMMON_TESTS} # --compare-image ${TOL} ${INPUTDATA}/poupees_1canal.c1.hdr # ${TEMP}/FA-00006-io_Poupees_1canal_oct_bis.hdr otbMultiToMonoChannelExtractROI @@ -96,25 +96,25 @@ ADD_TEST(FA-00006-io_Poupees_R8_Double2UCharBis ${COMMON_TESTS} # ------ RADARSAT ------------ IF(OTB_DATA_USE_LARGEINPUT) -ADD_TEST(FA-00006-io_Radarsat_UI2_UShort2UShort ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_UI2_UShort2UShort ${COMMON_TESTS} otbMultiToMonoChannelExtractROI -ushort ${IMAGEDATA}/RADARSAT1/SCENE01/ -ushort ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_ui2.hdr -startX 2559 -startY 3591 -sizeX 337 -sizeY 280 ) -ADD_TEST(FA-00006-io_Radarsat_UI2_Int2Int ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_UI2_Int2Int ${COMMON_TESTS} otbMultiToMonoChannelExtractROI -int ${IMAGEDATA}/RADARSAT1/SCENE01/ -int ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_i4.hdr -startX 2559 -startY 3591 -sizeX 337 -sizeY 280 ) -ADD_TEST(FA-00006-io_Radarsat_UI2_Double2Double_ ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_UI2_Double2Double_ ${COMMON_TESTS} otbMultiToMonoChannelExtractROI -double ${IMAGEDATA}/RADARSAT1/SCENE01/ -double ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8.hdr -startX 2559 -startY 3591 -sizeX 337 -sizeY 280 ) -ADD_TEST(FA-00006-io_Radarsat_I4_Int2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_I4_Int2Double ${COMMON_TESTS} # --compare-image ${TOL} ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8.hdr # ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8_bis.hdr otbMultiToMonoChannelExtractROI @@ -122,7 +122,7 @@ ADD_TEST(FA-00006-io_Radarsat_I4_Int2Double ${COMMON_TESTS} -double ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8_bis.hdr ) -ADD_TEST(FA-00006-io_Radarsat_I4_Double2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_I4_Double2Double ${COMMON_TESTS} # --compare-image ${TOL} ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8.hdr # ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8_ter.hdr otbMultiToMonoChannelExtractROI @@ -130,7 +130,7 @@ ADD_TEST(FA-00006-io_Radarsat_I4_Double2Double ${COMMON_TESTS} -double ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8_ter.hdr ) -ADD_TEST(FA-00006-io_Radarsat_R8_Double2Double ${COMMON_TESTS} +ADD_TEST(FA-00006-io_Radarsat_R8_Double2Double ${COMMON_TESTS} # --compare-image ${TOL} ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8.hdr # ${TEMP}/FA-00006-io_Radarsat_2559_3591_337_280_r8_4.hdr otbMultiToMonoChannelExtractROI @@ -141,19 +141,19 @@ ADD_TEST(FA-00006-io_Radarsat_R8_Double2Double ${COMMON_TESTS} ENDIF(OTB_DATA_USE_LARGEINPUT) ADD_TEST(FA-00012-co_AlignementsQB ${CXX_TEST_PATH}/AlignementsQB - ${INPUTDATA}/poupees.hdr - ${TEMP}/FA-00012-co_AlignementsQB.png + ${INPUTDATA}/poupees.hdr + ${TEMP}/FA-00012-co_AlignementsQB.png ) # --- FA 00013 : impossible to write a TIFF(CAI) -> GDAL --- -ADD_TEST(FA-00013-io_WriteImageTIFF ${IO_TESTS2} +ADD_TEST(FA-00013-io_WriteImageTIFF ${IO_TESTS2} otbImageFileWriterTest - ${INPUTDATA}/sbuv_NB_c1.png + ${INPUTDATA}/sbuv_NB_c1.png ${TEMP}/FA-00013-io_WriteImageTIFF_sbuv_NB_c1.tif ) -ADD_TEST(FA-00013-io_WriteImageTIFF_bis ${COMMON_TESTS} +ADD_TEST(FA-00013-io_WriteImageTIFF_bis ${COMMON_TESTS} otbMultiToMonoChannelExtractROI ${INPUTDATA}/sbuv_NB_c1.png ${TEMP}/FA-00013-io_WriteImageTIFF_sbuv_NB_c1_extrait.tif @@ -191,6 +191,30 @@ ADD_TEST(FA-00070-vi_Streaming_Stat_bis ${CXX_TEST_PATH}/StreamingStat ${EXAMPLES_DATA}/amst.png ) + +# ------- From Mantis tracker ----------------------------------- +ADD_TEST(FA-0000041-mean_shift1 ${CXX_TEST_PATH}/0000041-mean_shift + ${INPUTDATA}/QB_Suburb.png + 12 + 7 + 100 + ${TEMP}/filtered_image1.tif + ${TEMP}/segmented_image1.tif + ${TEMP}/labelled_image1.tif + ${TEMP}/boundary_of_labelled_image1.tif + ) + +ADD_TEST(FA-0000041-mean_shift2 ${CXX_TEST_PATH}/0000041-mean_shift + ${INPUTDATA}/QB_Suburb.png + 20 + 7 + 100 + ${TEMP}/filtered_image2.tif + ${TEMP}/segmented_image2.tif + ${TEMP}/labelled_image2.tif + ${TEMP}/boundary_of_labelled_image2.tif + ) + ADD_EXECUTABLE(AlignementsQB AlignementsQB.cxx) TARGET_LINK_LIBRARIES(AlignementsQB OTBFeatureExtraction OTBIO OTBCommon gdal ITKIO ITKCommon) @@ -200,6 +224,8 @@ TARGET_LINK_LIBRARIES(MapActivation OTBFeatureExtraction OTBIO OTBCommon gdal IT ADD_EXECUTABLE(StreamingStat StreamingStat.cxx) TARGET_LINK_LIBRARIES(StreamingStat OTBFeatureExtraction OTBIO OTBCommon gdal ITKIO ITKCommon) +ADD_EXECUTABLE(0000041-mean_shift 0000041-mean_shift.cxx) +TARGET_LINK_LIBRARIES(0000041-mean_shift OTBIO OTBCommon OTBBasicFilters) INCLUDE_DIRECTORIES("${OTBTesting_BINARY_DIR}")