X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLymphStationsFilter.txx;h=ea9e2b678c01fe40d75fffc8d2b009f3ada6d550;hb=686056dfe2391eed76302af43b08d30791901965;hp=7b2fd2ff91346aa16e10e96de0844af056ff999a;hpb=5e2af376544fce0c6dc46bb3c3227d35b501c1f1;p=clitk.git diff --git a/segmentation/clitkExtractLymphStationsFilter.txx b/segmentation/clitkExtractLymphStationsFilter.txx index 7b2fd2f..ea9e2b6 100644 --- a/segmentation/clitkExtractLymphStationsFilter.txx +++ b/segmentation/clitkExtractLymphStationsFilter.txx @@ -52,6 +52,10 @@ ExtractLymphStationsFilter(): SetBackgroundValue(0); SetForegroundValue(1); + // Default values + ExtractStation_8_SetDefaultValues(); + ExtractStation_3P_SetDefaultValues(); + // Station 7 SetFuzzyThreshold(0.5); SetStation7Filename("station7.mhd"); @@ -59,17 +63,6 @@ ExtractLymphStationsFilter(): //-------------------------------------------------------------------- -//-------------------------------------------------------------------- -template -template -void -clitk::ExtractLymphStationsFilter:: -SetArgsInfo(ArgsInfoType & argsinfo) { - DD("SetArgsInfo"); -} -//-------------------------------------------------------------------- - - //-------------------------------------------------------------------- template void @@ -78,28 +71,46 @@ GenerateOutputInformation() { // Get inputs LoadAFDB(); m_Input = dynamic_cast(itk::ProcessObject::GetInput(0)); - m_Support = GetAFDB()->template GetImage ("mediastinum"); - - // - typedef clitk::BooleanOperatorLabelImageFilter BFilter; - BFilter::Pointer merge = BFilter::New(); + m_Mediastinum = GetAFDB()->template GetImage ("Mediastinum"); + + // Extract Station8 + StartNewStep("Station 8"); + StartSubStep(); + ExtractStation_8(); + StopSubStep(); + + // Extract Station3P + StartNewStep("Station 3P"); + StartSubStep(); + ExtractStation_3P(); + StopSubStep(); - // Extract Station7 - ExtractStation_7(); - m_Output = m_Station7; + if (0) { // temporary suppress + // Extract Station7 + StartNewStep("Station 7"); + StartSubStep(); + ExtractStation_7(); + StopSubStep(); - // Extract Station4RL - ExtractStation_4RL(); + // Extract Station4RL + StartNewStep("Station 4RL"); + StartSubStep(); + //ExtractStation_4RL(); + StopSubStep(); + } - writeImage(m_Station4RL, "s4rl.mhd"); + + // + // typedef clitk::BooleanOperatorLabelImageFilter BFilter; + //BFilter::Pointer merge = BFilter::New(); // writeImage(m_Output, "ouput.mhd"); //writeImage(m_Working_Support, "ws.mhd"); /*merge->SetInput1(m_Station7); - merge->SetInput2(m_Station4RL); // support - merge->SetOperationType(BFilter::AndNot); CHANGE OPERATOR - merge->SetForegroundValue(4); - merge->Update(); - m_Output = merge->GetOutput(); + merge->SetInput2(m_Station4RL); // support + merge->SetOperationType(BFilter::AndNot); CHANGE OPERATOR + merge->SetForegroundValue(4); + merge->Update(); + m_Output = merge->GetOutput(); */ } //-------------------------------------------------------------------- @@ -110,7 +121,7 @@ template void clitk::ExtractLymphStationsFilter:: GenerateInputRequestedRegion() { - DD("GenerateInputRequestedRegion (nothing?)"); + //DD("GenerateInputRequestedRegion (nothing?)"); } //-------------------------------------------------------------------- @@ -123,17 +134,124 @@ GenerateData() { DD("GenerateData, graft output"); // Final Step -> graft output (if SetNthOutput => redo) - this->GraftOutput(m_Output); + this->GraftOutput(m_ListOfStations["8"]); } //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +template +bool +clitk::ExtractLymphStationsFilter:: +CheckForStation(std::string station) +{ + // Compute Station name + std::string s = "Station"+station; + + + // Check if station already exist in DB + bool found = false; + if (GetAFDB()->TagExist(s)) { + m_ListOfStations[station] = GetAFDB()->template GetImage(s); + found = true; + } + + // Define the starting support + if (found && GetComputeStation(station)) { + std::cout << "Station " << station << " already exists, but re-computation forced." << std::endl; + } + if (!found || GetComputeStation(station)) { + m_Working_Support = m_Mediastinum = GetAFDB()->template GetImage("Mediastinum", true); + return true; + } + else { + std::cout << "Station " << station << " found. I used it" << std::endl; + return false; + } +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +bool +clitk::ExtractLymphStationsFilter:: +GetComputeStation(std::string station) +{ + return (m_ComputeStationMap.find(station) != m_ComputeStationMap.end()); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void +clitk::ExtractLymphStationsFilter:: +AddComputeStation(std::string station) +{ + m_ComputeStationMap[station] = true; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void +clitk::ExtractLymphStationsFilter:: +ExtractStation_8() +{ + if (CheckForStation("8")) { + ExtractStation_8_SI_Limits(); + ExtractStation_8_Post_Limits(); + ExtractStation_8_Ant_Sup_Limits(); + ExtractStation_8_Ant_Inf_Limits(); + ExtractStation_8_LR_1_Limits(); + ExtractStation_8_LR_2_Limits(); + ExtractStation_8_LR_Limits(); + ExtractStation_8_Ant_Injected_Limits(); + ExtractStation_8_Single_CCL_Limits(); + ExtractStation_8_Remove_Structures(); + // Store image filenames into AFDB + writeImage(m_ListOfStations["8"], "seg/Station8.mhd"); + GetAFDB()->SetImageFilename("Station8", "seg/Station8.mhd"); + WriteAFDB(); + } +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void +clitk::ExtractLymphStationsFilter:: +ExtractStation_3P() +{ + if (CheckForStation("3P")) { + ExtractStation_3P_SI_Limits(); + ExtractStation_3P_Remove_Structures(); + ExtractStation_3P_Ant_Limits(); + ExtractStation_3P_Post_Limits(); + ExtractStation_3P_LR_sup_Limits(); + ExtractStation_3P_LR_inf_Limits(); + // Store image filenames into AFDB + writeImage(m_ListOfStations["3P"], "seg/Station3P.mhd"); + GetAFDB()->SetImageFilename("Station3P", "seg/Station3P.mhd"); + WriteAFDB(); + } +} +//-------------------------------------------------------------------- + + //-------------------------------------------------------------------- template void clitk::ExtractLymphStationsFilter:: ExtractStation_7() { - DD("ExtractStation_7"); + if (m_ListOfStations["7"]) { + DD("Station 7 support already exist -> use it"); + m_Working_Support = m_ListOfStations["7"]; + } + else m_Working_Support = m_Mediastinum; ExtractStation_7_SI_Limits(); ExtractStation_7_RL_Limits(); ExtractStation_7_Posterior_Limits(); @@ -146,19 +264,18 @@ template void clitk::ExtractLymphStationsFilter:: ExtractStation_4RL() { - DD("ExtractStation_4RL"); - writeImage(m_Support, "essai.mhd"); // OK - /* WARNING ONLY 4R FIRST !!! (not same inf limits) - */ - + */ ExtractStation_4RL_SI_Limits(); ExtractStation_4RL_LR_Limits(); - + ExtractStation_4RL_AP_Limits(); } //-------------------------------------------------------------------- +//-------------------------------------------------------------------- + + #endif //#define CLITKBOOLEANOPERATORLABELIMAGEFILTER_TXX