Esempio n. 1
0
bool SGSTerrain::isInStepList(Step& step, StepList& step_list)
{
  StepList::iterator iter;

  for (iter = step_list.begin(); iter != step_list.end(); iter++) {
    Step one_step = *iter;
    if (step.__pos == one_step.__pos) {
      return true;
    }
  }
  return false;
}
void pdp::ThickeningDetector::run()
{
    struct StepInfo {
        float realPercent;
        ThickeningDetectionStep* step;

        StepInfo(ThickeningDetectionStep* step) : step(step) {};
    };

    typedef std::list<StepInfo> StepList;
    StepList steps;

    // Add your steps here in a similar way.

	//using threshold to detect the lungs
	//the first and end slices containing a large enough amount of lungs are found
	LungsDetection* startEnd = new LungsDetection("detect start and end of the lungs");
	startEnd->setInputStepName("Original Lung CT");
	steps.push_back(startEnd);

	OtsuStep* otsu = new OtsuStep("detect start and end of the lungs");
	otsu->setInputStepName("Lungs");
	steps.push_back(otsu);

	//EMClassification* emClassifier = new EMClassification("detect start and end of the lungs");
	//emClassifier->setInputStepName("Otsu");
	//steps.push_back(emClassifier);
	
	//contourExtractor<double>* contour = new contourExtractor<double>("Extracting contours");
 //   contour->setInputStepName("Lungs");
 //   steps.push_back(contour);

 //   convexHull* convex = new convexHull("Computing the convex hull");
 //   steps.push_back(convex);
	//
	//thickeningsIdentification* thickIdent = new thickeningsIdentification("Identifying 3d thicks");
 //   steps.push_back(thickIdent);

	//visualizeData<double>* visualize = new visualizeData<double>("Visualizing data");
 //   steps.push_back(visualize);

    // Done adding steps, let's go!

    // Normalize the progress percents.
    float totalPercent = 0.0f;
    for(StepList::iterator iStep = steps.begin() ; iStep != steps.end() ; ++iStep) {
        totalPercent += iStep->step->relativePercent();
    }
    for(StepList::iterator iStep = steps.begin() ; iStep != steps.end() ; ++iStep) {
        iStep->realPercent = iStep->step->relativePercent() / totalPercent;
    }

    // Execute the steps.
    for(StepList::iterator iStep = steps.begin() ; iStep != steps.end() ; ++iStep) {
        QObject::connect(iStep->step, SIGNAL(stepProgress(float)),
                         this, SLOT(onStepProgress(float)));

        emit startStep(iStep->step->name(), iStep->realPercent);
		//! \todo exceptionhandling
		iStep->step->work(m_input, m_output);

        emit stepDone();

        // Cleanup
        QObject::disconnect(iStep->step, SIGNAL(stepProgress(float)),
                            this, SLOT(onStepProgress(float)));
        delete iStep->step;
    }

    this->exit();
}