X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLymphStation_Supports.txx;h=1fb82f86b5a6e555e12c8db81e8eff8a83eaa9c8;hb=be9bbae68e5e08dda6be5d32fa1e8b3629e4041f;hp=ad2e95792efec4095f1a999fbc86d9291c8aead2;hpb=5b568893e14e5d955fa14f653bd176b54c6aee0c;p=clitk.git diff --git a/segmentation/clitkExtractLymphStation_Supports.txx b/segmentation/clitkExtractLymphStation_Supports.txx index ad2e957..1fb82f8 100644 --- a/segmentation/clitkExtractLymphStation_Supports.txx +++ b/segmentation/clitkExtractLymphStation_Supports.txx @@ -8,8 +8,6 @@ void clitk::ExtractLymphStationsFilter:: ExtractStationSupports() { - DD("ExtractStationSupports"); - // Get initial Mediastinum m_Working_Support = m_Mediastinum = this->GetAFDB()->template GetImage("Mediastinum", true); @@ -204,8 +202,10 @@ Support_SupInf_S2R_S2L() MaskImagePointer BrachioCephalicVein = this->GetAFDB()->template GetImage("BrachioCephalicVein"); MaskImagePointType p; clitk::FindExtremaPointInAGivenDirection(BrachioCephalicVein, GetBackgroundValue(), 2, true, p); - // I add slightly more than a slice - double CaudalMarginOfLeftBrachiocephalicVeinZ=p[2]+ 1.1*m_Working_Support->GetSpacing()[2]; + + // I add slightly more than a slice --> NO !! + double CaudalMarginOfLeftBrachiocephalicVeinZ=p[2];//+ 1.1*m_Working_Support->GetSpacing()[2]; + this->GetAFDB()->SetDouble("CaudalMarginOfLeftBrachiocephalicVeinZ", CaudalMarginOfLeftBrachiocephalicVeinZ); MaskImagePointer S2R = clitk::CropImageRemoveLowerThan(m_Working_Support, 2, @@ -266,7 +266,6 @@ Support_SupInf_S2R_S2L() - //-------------------------------------------------------------------- template void @@ -313,24 +312,32 @@ Support_SupInf_S4R_S4L() */ StartNewStep("[Support] Sup-Inf limits of 4R/4L"); - // Start from the support, remove 2R and 2L + // Start from the support MaskImagePointer S4RL = clitk::Clone(m_Working_Support); + MaskImagePointer S4R = clitk::Clone(S4RL); + MaskImagePointer S4L = clitk::Clone(S4RL); + + // Keep only what is lower than S2 MaskImagePointer S2R = m_ListOfSupports["S2R"]; MaskImagePointer S2L = m_ListOfSupports["S2L"]; - clitk::AndNot(S4RL, S2R, GetBackgroundValue()); - clitk::AndNot(S4RL, S2L, GetBackgroundValue()); - S4RL = clitk::AutoCrop(S4RL, GetBackgroundValue()); + MaskImagePointType p; + // Right part + clitk::FindExtremaPointInAGivenDirection(S2R, GetBackgroundValue(), + 2, true, p); + S4R = clitk::CropImageRemoveGreaterThan(S4R, 2, + p[2], true, GetBackgroundValue()); + // Left part + clitk::FindExtremaPointInAGivenDirection(S2L, GetBackgroundValue(), + 2, true, p); + S4L = clitk::CropImageRemoveGreaterThan(S4L, 2, + p[2], true, GetBackgroundValue()); - // Copy, stop 4R at AzygousVein and 4L at LeftPulmonaryArtery - MaskImagePointer S4R = clitk::Clone(S4RL); - MaskImagePointer S4L = clitk::Clone(S4RL); - // Get AzygousVein and limit according to LowerBorderAzygousVein MaskImagePointer LowerBorderAzygousVein = this->GetAFDB()->template GetImage("LowerBorderAzygousVein"); std::vector c; clitk::ComputeCentroids(LowerBorderAzygousVein, GetBackgroundValue(), c); - S4R = clitk::CropImageRemoveLowerThan(S4RL, 2, + S4R = clitk::CropImageRemoveLowerThan(S4R, 2, c[1][2], true, GetBackgroundValue()); S4R = clitk::AutoCrop(S4R, GetBackgroundValue()); m_ListOfSupports["S4R"] = S4R; @@ -339,10 +346,9 @@ Support_SupInf_S4R_S4L() // Limit according to LeftPulmonaryArtery MaskImagePointer LeftPulmonaryArtery = this->GetAFDB()->template GetImage("LeftPulmonaryArtery"); - MaskImagePointType p; clitk::FindExtremaPointInAGivenDirection(LeftPulmonaryArtery, GetBackgroundValue(), 2, false, p); - S4L = clitk::CropImageRemoveLowerThan(S4RL, 2, + S4L = clitk::CropImageRemoveLowerThan(S4L, 2, p[2], true, GetBackgroundValue()); S4L = clitk::AutoCrop(S4L, GetBackgroundValue()); m_ListOfSupports["S4L"] = S4L; @@ -423,7 +429,7 @@ LimitsWithTrachea(MaskImageType * input, int extremaDirection, int lineDirection GetBackgroundValue(), 2, extremaDirection, false, // Left lineDirection, // Vertical line - 1, // margins + -1, // margins tracheaLeftPositionsA, tracheaLeftPositionsB); // Do not consider trachea above the limit @@ -519,7 +525,7 @@ Support_S3A() MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(Sternum, GetBackgroundValue(), 2, false, p); - + p[2] += Sternum->GetSpacing()[2]; // we add one slice to stop 3A at the same slice than Sternum stop S3A = clitk::CropImageRemoveGreaterThan(S3A, 2, //m_ApexOfTheChest @@ -541,7 +547,8 @@ Support_S5() StartNewStep("[Support] Sup-Inf limits S5 with aorta"); // Initial S5 support - MaskImagePointer S5 = clitk::Clone(this->GetAFDB()->template GetImage("Mediastinum", true)); + MaskImagePointer S5 = + clitk::Clone(this->GetAFDB()->template GetImage("Mediastinum", true)); // Sup limits with Aorta double sup = FindInferiorBorderOfAorticArch(); @@ -552,6 +559,7 @@ Support_S5() MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(PulmonaryTrunk, GetBackgroundValue(), 2, false, p); + p[2] += PulmonaryTrunk->GetSpacing()[2]; // Cut Sup/Inf S5 = clitk::CropImageAlongOneAxis(S5, 2, p[2], sup, true, GetBackgroundValue());