SOLVED: I was simply omitting the SetMeasurementVectorSize() Sorry
Le samedi 29 avril 2017 21:50:43 UTC+2, Julien Radoux a écrit : > > Hello, > > I am trying to build my own filter machine lerning training with a > specific sampling method. I've tried o start with an example, butI am no > able to make it work. It is probably just missing one line to set the size > of the measurement vector of the ListSample, but I don't fin it. Any one > has an idea ? > > Error message (compile is OK) > > test 6 on 6 > test 0 for 0.04172 on 6 > test 1 for 0.0577576 on 6 > test 2 for 0.0816327 on 6 > test 3 for 0.138198 on 6 > test 4 for 0.124274 on 6 > test 5 for 0.0801539 on 6 > test target on 1 > terminate called after throwing an instance of 'itk::ExceptionObject' > what(): /home/tom/libs/OTB/install/include/ITK-4.8/itkListSample.hxx:56: > itk::ERROR: ListSample(0x16edfb0): MeasurementVectorSize: 0 doesn't match > input measurement vector length: 6 > Aborted > > > code : > > //vector of floats as input > typedef float InputValueType; > typedef itk::VariableLengthVector<InputValueType> > InputSampleType; > //typedef itk::FixedArray<InputValueType, 6> InputSampleType; > typedef itk::Statistics::ListSample<InputSampleType> > InputListSampleType; > > // Target related typedefs > typedef int TargetValueType; > typedef itk::FixedArray<TargetValueType, 1> TargetSampleType; > typedef itk::Statistics::ListSample<TargetSampleType> > TargetListSampleType; > > InputListSampleType::Pointer InputListSample = > InputListSampleType::New(); > InputListSample.MeasurementVectorSize = 0; > TargetListSampleType::Pointer TargetListSample = > TargetListSampleType::New(); > > > > int sizePixel = > inputReader->GetOutput()->GetNumberOfComponentsPerPixel(); // the vector > must have the size of the vector image that will be classified > > for (int i(0); i<nbClasses; i++) > { > if (lMatrix[i].rows()>1) > { > // Filling the two input training lists > for (int j = 0; j < lMatrix[i].rows(); ++j) > { > InputSampleType sample; > sample.SetSize(sizePixel); > > TargetValueType label = i + 1; > > // Multi-component sample filled based on matrix > std::cout<< "test " << lMatrix[i].columns() << " on " > << sizePixel << std::endl; > for (int k = 0; k < lMatrix[i].columns(); k++) > { > sample[k] = lMatrix[i].get(j,k); > std::cout<< "test " << k << " for " << sample[k] > << " on " << sizePixel << std::endl; > } > > TargetListSample->PushBack(label); > std::cout<< "test target on " << label << std::endl; > InputListSample->PushBack(sample); // THIS IS WHERE I > GET THE ERROR > } > } > > } > > std::cout<<" RF learning step"<<std::endl; > typedef otb::RandomForestsMachineLearningModel<InputValueType, > TargetValueType> RFType; > > RFType::Pointer RFEstimator = RFType::New(); > RFEstimator->SetInputListSample(InputListSample); > RFEstimator->SetTargetListSample(TargetListSample); > -- -- Check the OTB FAQ at http://www.orfeo-toolbox.org/FAQ.html You received this message because you are subscribed to the Google Groups "otb-users" group. To post to this group, send email to otb-users@googlegroups.com To unsubscribe from this group, send email to otb-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/otb-users?hl=en --- You received this message because you are subscribed to the Google Groups "otb-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to otb-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.