18 #include <itkImageRegionIterator.h> 23 #include "itkImageFileWriter.h" 80 typedef itk::Image<double , 3> FeatureImageType;
89 std::vector<DataCollectionSingleImageIterator<double, 3> > featureList;
90 for (
unsigned int i = 0; i < m_Modalities.size(); ++i)
93 featureList.push_back(iter);
100 itk::ImageRegionIterator<MaskImageType> trainIter(train.
GetImage(), train.
GetImage()->GetLargestPossibleRegion() );
101 itk::ImageRegionIterator<MaskImageType> testIter(test.
GetImage(), test.
GetImage()->GetLargestPossibleRegion() );
103 int trainElements = 0;
104 int testElements = 0;
105 while (!trainIter.IsAtEnd())
107 if (trainIter.Get() > 0)
111 if (testIter.Get() > 0)
118 trainIter.GoToBegin();
119 testIter.GoToBegin();
121 std::vector<itk::ImageRegionIterator<FeatureImageType> > featureIter;
122 for (
unsigned int i = 0; i < featureList.size(); ++i)
124 itk::ImageRegionIterator<FeatureImageType> iter(featureList[i].GetImage(), featureList[i].GetImage()->GetLargestPossibleRegion() );
125 featureIter.push_back(iter);
128 vnl_vector<double> label(trainElements + testElements);
129 vnl_matrix<double> feature(trainElements + testElements, featureList.size() );
130 vnl_matrix<double> trainFeature(trainElements, featureList.size() );
134 while (!trainIter.IsAtEnd())
136 if (trainIter.Get() > 0)
139 for (
unsigned int i = 0; i < featureIter.size(); ++i)
141 feature(index, i) = featureIter[i].Get();
142 trainFeature(trainIndex, i) = featureIter[i].Get();
147 if (testIter.Get() > 0)
150 for (
unsigned int i = 0; i < featureIter.size(); ++i)
152 feature(index, i) = featureIter[i].Get();
159 for (
unsigned int i = 0; i < featureIter.size(); ++i)
166 vnl_vector<double> weightVector = glm.
ExpMu(trainFeature);
168 itk::ImageRegionIterator<FeatureImageType> weightIter(weight.
GetImage(), weight.
GetImage()->GetLargestPossibleRegion() );
170 trainIter.GoToBegin();
174 while(!trainIter.IsAtEnd())
176 if (trainIter.Get() > 0)
178 weightIter.Set(weightVector(index) );
200 for (
unsigned int i = 0; i < featureList.size(); ++i)
210 m_Modalities = modalities;
213 std::vector<std::string>
236 typedef itk::Image<double, 3> FeatureImage;
237 typedef itk::Image<unsigned char, 3> LabelImage;
245 if (collection->HasElement(origin))
247 LabelImage::Pointer originImage =
dynamic_cast<LabelImage*
>(collection->GetData(origin).GetPointer());
248 if (!collection->HasElement(target) && originImage.IsNotNull())
251 FeatureImage::Pointer
image = FeatureImage::New();
252 image->SetRegions(originImage->GetLargestPossibleRegion());
253 image->SetSpacing(originImage->GetSpacing());
254 image->SetOrigin(originImage->GetOrigin());
255 image->SetDirection(originImage->GetDirection());
258 collection->AddData(dynamic_cast<itk::DataObject*>(image.GetPointer()),target,
"");
261 for (std::size_t i = 0; i < collection->Size();++i)
264 if (newCol !=
nullptr)
281 std::vector<DataCollectionImageIterator<double, 3> > trainFeatureList;
282 std::vector<DataCollectionImageIterator<double, 3> > testFeatureList;
283 for (
unsigned int i = 0; i < m_Modalities.size(); ++i)
286 trainFeatureList.push_back(iter);
288 testFeatureList.push_back(iter2);
291 int trainElements = 0;
292 int testElements = 0;
308 vnl_vector<double> label(trainElements + testElements);
309 vnl_matrix<double> feature(trainElements + testElements, trainFeatureList.size() );
310 vnl_matrix<double> trainFeature(trainElements, trainFeatureList.size() );
318 label(trainIndex) = 1;
319 for (
unsigned int i = 0; i < trainFeatureList.size(); ++i)
321 feature(trainIndex, i) = trainFeatureList[i].GetVoxel();
322 trainFeature(trainIndex, i) = trainFeatureList[i].GetVoxel();
329 for (
unsigned int i = 0; i < trainFeatureList.size(); ++i)
331 ++(trainFeatureList[i]);
339 label(trainIndex) = 1;
340 for (
unsigned int i = 0; i < testFeatureList.size(); ++i)
342 feature(trainIndex+testIndex, i) = testFeatureList[i].GetVoxel();
348 for (
unsigned int i = 0; i < testFeatureList.size(); ++i)
350 ++(testFeatureList[i]);
355 vnl_vector<double> weightVector = glm.
ExpMu(trainFeature);
363 weightIter.
SetVoxel(weightVector(index));
374 typedef itk::Image<double , 3> FeatureImageType;
383 std::vector<DataCollectionSingleImageIterator<double, 3> > featureList;
384 for (
unsigned int i = 0; i < m_Modalities.size(); ++i)
387 featureList.push_back(iter);
392 itk::ImageRegionIterator<MaskImageType> trainIter(train.
GetImage(), train.
GetImage()->GetLargestPossibleRegion() );
393 itk::ImageRegionIterator<MaskImageType> testIter(test.
GetImage(), test.
GetImage()->GetLargestPossibleRegion() );
395 int trainElements = 0;
396 int testElements = 0;
397 while (!trainIter.IsAtEnd())
399 if (trainIter.Get() > 0)
403 if (testIter.Get() > 0)
410 trainIter.GoToBegin();
411 testIter.GoToBegin();
413 std::vector<itk::ImageRegionIterator<FeatureImageType> > featureIter;
414 for (
unsigned int i = 0; i < featureList.size(); ++i)
416 itk::ImageRegionIterator<FeatureImageType> iter(featureList[i].GetImage(), featureList[i].GetImage()->GetLargestPossibleRegion() );
417 featureIter.push_back(iter);
420 vnl_vector<double> label(trainElements + testElements);
421 vnl_matrix<double> feature(trainElements + testElements, featureList.size() );
422 vnl_matrix<double> trainFeature(trainElements, featureList.size() );
426 while (!trainIter.IsAtEnd())
428 if (trainIter.Get() > 0)
431 for (
unsigned int i = 0; i < featureIter.size(); ++i)
433 feature(index, i) = featureIter[i].Get();
434 trainFeature(trainIndex, i) = featureIter[i].Get();
439 if (testIter.Get() > 0)
442 for (
unsigned int i = 0; i < featureIter.size(); ++i)
444 feature(index, i) = featureIter[i].Get();
451 for (
unsigned int i = 0; i < featureIter.size(); ++i)
458 vnl_vector<double> weightVector = glm.
Predict(trainFeature);
460 itk::ImageRegionIterator<FeatureImageType> weightIter(weight.
GetImage(), weight.
GetImage()->GetLargestPossibleRegion() );
462 trainIter.GoToBegin();
465 while(!trainIter.IsAtEnd())
467 if (trainIter.Get() > 0)
469 weightIter.Set(weightVector(index) );
479 for (
unsigned int i = 0; i < featureList.size(); ++i)
void SetWeightName(std::string name)
std::string GetTestMask()
void SetVoxel(TDataType value)
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
double Predict(const vnl_vector< double > &c)
Predicts the value corresponding to the given vector.
std::string GetTrainMask()
void SetTrainMask(std::string name)
DataCollection::Pointer GetCollection()
Generalized Linear Model that allows linear models for non-gaussian data.
void SetTestMask(std::string name)
static void EnsureDataImageInCollection(mitk::DataCollection::Pointer collection, std::string origin, std::string target)
std::vector< std::string > GetModalities()
itk::Image< unsigned char, 3 > MaskImageType
std::string GetWeightName()
mitk::Image::Pointer image
void SetModalities(std::vector< std::string > modalities)
void SetCollection(DataCollection::Pointer data)
vnl_vector< double > ExpMu(const vnl_matrix< double > &x)
Estimation of the exponential factor for a given function.
itk::SmartPointer< Self > Pointer
void WeightsForAll(mitk::DataCollection::Pointer train, mitk::DataCollection::Pointer test)