Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
- ======================================================================-====*/
+ ===========================================================================**/
#ifndef CLITKEXTRACTLYMPHSTATIONSFILTER_TXX
#define CLITKEXTRACTLYMPHSTATIONSFILTER_TXX
// Default values
ExtractStation_8_SetDefaultValues();
ExtractStation_3P_SetDefaultValues();
-
- // Station 7
- SetFuzzyThreshold(0.5);
- SetStation7Filename("station7.mhd");
+ ExtractStation_3A_SetDefaultValues();
+ ExtractStation_7_SetDefaultValues();
}
//--------------------------------------------------------------------
ExtractStation_8();
StopSubStep();
- DD(GetCurrentStepNumber());
-
// Extract Station3P
StartNewStep("Station 3P");
StartSubStep();
ExtractStation_3P();
StopSubStep();
- if (0) { // temporary suppress
- // Extract Station7
- StartNewStep("Station 7");
- StartSubStep();
- ExtractStation_7();
- StopSubStep();
+ // Extract Station3A
+ StartNewStep("Station 3A");
+ StartSubStep();
+ ExtractStation_3A();
+ StopSubStep();
+
+ // Extract Station7
+ StartNewStep("Station 7");
+ StartSubStep();
+ ExtractStation_7();
+ StopSubStep();
+ if (0) { // temporary suppress
// Extract Station4RL
StartNewStep("Station 4RL");
StartSubStep();
void
clitk::ExtractLymphStationsFilter<TImageType>::
GenerateInputRequestedRegion() {
- DD("GenerateInputRequestedRegion (nothing?)");
+ //DD("GenerateInputRequestedRegion (nothing?)");
}
//--------------------------------------------------------------------
void
clitk::ExtractLymphStationsFilter<TImageType>::
GenerateData() {
- DD("GenerateData, graft output");
-
// Final Step -> graft output (if SetNthOutput => redo)
this->GraftOutput(m_ListOfStations["8"]);
}
}
// Define the starting support
- if (found && GetComputeStation("8")) {
+ if (found && GetComputeStation(station)) {
std::cout << "Station " << station << " already exists, but re-computation forced." << std::endl;
}
- if (!found || GetComputeStation("8")) {
+ if (!found || GetComputeStation(station)) {
m_Working_Support = m_Mediastinum = GetAFDB()->template GetImage<MaskImageType>("Mediastinum", true);
return true;
}
if (CheckForStation("8")) {
ExtractStation_8_SI_Limits();
ExtractStation_8_Post_Limits();
- ExtractStation_8_Ant_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<MaskImageType>(m_ListOfStations["8"], "seg/Station8.mhd");
GetAFDB()->SetImageFilename("Station8", "seg/Station8.mhd");
{
if (CheckForStation("3P")) {
ExtractStation_3P_SI_Limits();
+ ExtractStation_3P_Ant_Limits();
+ ExtractStation_3P_Post_Limits();
+ ExtractStation_3P_LR_sup_Limits();
+ // ExtractStation_3P_LR_sup_Limits_2();
+ ExtractStation_3P_LR_inf_Limits();
+ ExtractStation_8_Single_CCL_Limits(); // YES 8 !
+ ExtractStation_3P_Remove_Structures(); // after CCL
// Store image filenames into AFDB
writeImage<MaskImageType>(m_ListOfStations["3P"], "seg/Station3P.mhd");
- GetAFDB()->SetImageFilename("Station3P", "seg/Station3P.mhd");
+ GetAFDB()->SetImageFilename("Station3P", "seg/Station3P.mhd");
+ WriteAFDB();
}
}
//--------------------------------------------------------------------
void
clitk::ExtractLymphStationsFilter<TImageType>::
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;
+ if (CheckForStation("7")) {
ExtractStation_7_SI_Limits();
ExtractStation_7_RL_Limits();
ExtractStation_7_Posterior_Limits();
+ // ExtractStation_8_Single_CCL_Limits(); // Yes the same than 8
+ ExtractStation_7_Remove_Structures();
+ // Store image filenames into AFDB
+ writeImage<MaskImageType>(m_ListOfStations["7"], "seg/Station7.mhd");
+ GetAFDB()->SetImageFilename("Station7", "seg/Station7.mhd");
+ WriteAFDB();
+ }
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class TImageType>
+void
+clitk::ExtractLymphStationsFilter<TImageType>::
+ExtractStation_3A()
+{
+ if (CheckForStation("3A")) {
+ ExtractStation_3A_SI_Limits();
+ ExtractStation_3A_Ant_Limits();
+ // Store image filenames into AFDB
+ writeImage<MaskImageType>(m_ListOfStations["3A"], "seg/Station3A.mhd");
+ GetAFDB()->SetImageFilename("Station3A", "seg/Station3A.mhd");
+ WriteAFDB();
+ }
}
//--------------------------------------------------------------------
void
clitk::ExtractLymphStationsFilter<TImageType>::
ExtractStation_4RL() {
+ DD("TODO");
+ exit(0);
/*
WARNING ONLY 4R FIRST !!! (not same inf limits)
*/
//--------------------------------------------------------------------
-
-
-//--------------------------------------------------------------------
-template <class TImageType>
+template <class ImageType>
void
-clitk::ExtractLymphStationsFilter<TImageType>::
-FindExtremaPointsInBronchus(MaskImagePointer input,
- int direction,
- double distance_max_from_center_point,
- ListOfPointsType & LR,
- ListOfPointsType & Ant,
- ListOfPointsType & Post)
+clitk::ExtractLymphStationsFilter<ImageType>::
+Remove_Structures(std::string s)
{
-
- // Other solution ==> with auto bounding box ! (but pb to prevent to
- // be too distant from the center point
-
- // Extract slices
- std::vector<typename MaskSliceType::Pointer> slices;
- clitk::ExtractSlices<MaskImageType>(input, 2, slices);
-
- // Loop on slices
- bool found;
- for(uint i=0; i<slices.size(); i++) {
- /*
- // Keep main CCL
- slices[i] = Labelize<MaskSliceType>(slices[i], 0, true, 10);
- slices[i] = KeepLabels<MaskSliceType>(slices[i],
- GetBackgroundValue(),
- GetForegroundValue(), 1, 1, true);
- */
-
- // ------- Find rightmost or leftmost point -------
- MaskSliceType::PointType LRMost;
- found =
- clitk::FindExtremaPointInAGivenDirection<MaskSliceType>(slices[i],
- GetBackgroundValue(),
- 0, // axis XY
- (direction==0?false:true), // right or left according to direction
- LRMost);
- // ------- Find postmost point -------
- MaskSliceType::PointType postMost;
- found =
- clitk::FindExtremaPointInAGivenDirection<MaskSliceType>(slices[i],
- GetBackgroundValue(),
- 1, false, LRMost,
- distance_max_from_center_point,
- postMost);
- // ------- Find antmost point -------
- MaskSliceType::PointType antMost;
- found =
- clitk::FindExtremaPointInAGivenDirection<MaskSliceType>(slices[i],
- GetBackgroundValue(),
- 1, true, LRMost,
- distance_max_from_center_point,
- antMost);
- // Only add point if found
- if (found) {
- // ------- Convert 2D to 3D points --------
- MaskImageType::PointType p;
- clitk::PointsUtils<MaskImageType>::Convert2DTo3D(LRMost, input, i, p);
- LR.push_back(p);
- clitk::PointsUtils<MaskImageType>::Convert2DTo3D(antMost, input, i, p);
- Ant.push_back(p);
- clitk::PointsUtils<MaskImageType>::Convert2DTo3D(postMost, input, i, p);
- Post.push_back(p);
- }
+ try {
+ StartNewStep("[Station7] Remove "+s);
+ MaskImagePointer Structure = GetAFDB()->template GetImage<MaskImageType>(s);
+ clitk::AndNot<MaskImageType>(m_Working_Support, Structure, GetBackgroundValue());
}
-}
+ catch(clitk::ExceptionObject e) {
+ std::cout << s << " not found, skip." << std::endl;
+ }
+}
//--------------------------------------------------------------------
+
+
#endif //#define CLITKBOOLEANOPERATORLABELIMAGEFILTER_TXX