X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLymphStationsFilter.txx;h=aab78d85c01730c9778c4be1cf81d99c28726728;hb=5cc64cb817d78d671eb20d219cc19f9ad5b1e5c1;hp=993d2888f52ee3dbc328d6c4bc4c1f5dd223f221;hpb=2d513dbdb78fe0a0e2c3980eea894699f3496192;p=clitk.git diff --git a/segmentation/clitkExtractLymphStationsFilter.txx b/segmentation/clitkExtractLymphStationsFilter.txx index 993d288..aab78d8 100644 --- a/segmentation/clitkExtractLymphStationsFilter.txx +++ b/segmentation/clitkExtractLymphStationsFilter.txx @@ -29,12 +29,12 @@ #include "clitkSliceBySliceRelativePositionFilter.h" // itk -#include #include #include #include #include #include +#include // itk ENST #include "RelativePositionPropImageFilter.h" @@ -119,7 +119,7 @@ GenerateOutputInformation() { // ---------------------------------------------------------------- // Superior limit = carena // Inferior limit = origine middle lobe bronchus - StartNewStep("Inf/Sup limits with carena/bronchus"); + StartNewStep("Inf/Sup mediastinum limits with carena/bronchus"); ImageRegionType region = m_mediastinum->GetLargestPossibleRegion(); DD(region); ImageSizeType size = region.GetSize(); ImageIndexType index = region.GetIndex(); @@ -144,7 +144,7 @@ GenerateOutputInformation() { // ---------------------------------------------------------------- // ---------------------------------------------------------------- // Separate trachea in two CCL - StartNewStep("Separate trachea"); + StartNewStep("Separate trachea under carena"); // DD(region); ImageRegionType trachea_region = m_trachea->GetLargestPossibleRegion(); for(int i=0; i<3; i++) { @@ -176,8 +176,7 @@ GenerateOutputInformation() { // Labelize and consider two main labels m_working_trachea = Labelize(m_working_trachea, 0, true, 1); - StopCurrentStep(m_working_trachea); - + // Detect wich label is at Left typedef itk::ImageSliceConstIteratorWithIndex SliceIteratorType; SliceIteratorType iter(m_working_trachea, m_working_trachea->GetLargestPossibleRegion()); @@ -186,6 +185,7 @@ GenerateOutputInformation() { iter.GoToBegin(); bool stop = false; ImagePixelType leftLabel; + ImagePixelType rightLabel; while (!stop) { if (iter.Get() != m_BackgroundValueTrachea) { // DD(iter.GetIndex()); @@ -195,62 +195,30 @@ GenerateOutputInformation() { } ++iter; } + if (leftLabel == 1) rightLabel = 2; + else rightLabel = 1; DD((int)leftLabel); - - /* - // Relative position - StartNewStep("Left/Right limits with trachea"); - - // Select LeftLabel (set label 1 to 0) - ImagePointer temp = SetBackground(m_working_trachea, m_working_trachea, 1, 0); - writeImage(temp, "temp1.mhd"); - - // Left relative position - typedef clitk::AddRelativePositionConstraintToLabelImageFilter RelPosFilterType; - typename RelPosFilterType::Pointer relPosFilter = RelPosFilterType::New(); - relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()); - relPosFilter->VerboseStepOff(); - relPosFilter->WriteStepOff(); - relPosFilter->SetInput(m_working_image); - relPosFilter->SetInputObject(temp); - relPosFilter->SetOrientationType(RelPosFilterType::RightTo); - relPosFilter->SetIntermediateSpacing(GetIntermediateSpacing()); - relPosFilter->SetFuzzyThreshold(GetFuzzyThreshold1()); - relPosFilter->Update(); - m_working_image = relPosFilter->GetOutput(); - - // Select RightLabel (set label 2 to 0) - temp = SetBackground(m_working_trachea, m_working_trachea, 2, 0); - writeImage(temp, "temp2.mhd"); + DD((int)rightLabel); - // Left relative position - relPosFilter = RelPosFilterType::New(); - relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()); - relPosFilter->VerboseStepOn(); - relPosFilter->WriteStepOn(); - relPosFilter->SetInput(m_working_image); - relPosFilter->SetInputObject(temp); - relPosFilter->SetOrientationType(RelPosFilterType::LeftTo); - relPosFilter->SetIntermediateSpacing(GetIntermediateSpacing()); - relPosFilter->SetFuzzyThreshold(GetFuzzyThreshold1()); - relPosFilter->Update(); - m_working_image = relPosFilter->GetOutput(); + // End step + StopCurrentStep(m_working_trachea); + + //----------------------------------------------------- + /* DD("TEST Skeleton"); + typedef itk::BinaryThinningImageFilter SkeletonFilterType; + typename SkeletonFilterType::Pointer skeletonFilter = SkeletonFilterType::New(); + skeletonFilter->SetInput(m_working_trachea); + skeletonFilter->Update(); + writeImage(skeletonFilter->GetOutput(), "skel.mhd"); + writeImage(skeletonFilter->GetThinning(), "skel2.mhd"); */ //----------------------------------------------------- - StartNewStep("Left/Right limits with trachea (slice by slice"); - - // Select LeftLabel (set label 1 to 0) - ImagePointer temp = SetBackground(m_working_trachea, m_working_trachea, 1, 0); + StartNewStep("Left limits with bronchus (slice by slice)"); + // Select LeftLabel (set right label to 0) + ImagePointer temp = SetBackground(m_working_trachea, m_working_trachea, rightLabel, 0); writeImage(temp, "temp1.mhd"); - /* - - écrire utilisation de filter SliceBySliceRelPosFilter (combine in a 3D) - - filter SliceBySliceRelPosFilter + combine in a 3D - - resampling, affine transfo to pair the slices - - extract list of images (ecrire utilisation de ExtractSliceFilter) - */ - typedef clitk::SliceBySliceRelativePositionFilter SliceRelPosFilterType; typename SliceRelPosFilterType::Pointer sliceRelPosFilter = SliceRelPosFilterType::New(); sliceRelPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()); @@ -259,79 +227,33 @@ GenerateOutputInformation() { sliceRelPosFilter->SetInput(m_working_image); sliceRelPosFilter->SetInputObject(temp); sliceRelPosFilter->SetDirection(2); + sliceRelPosFilter->SetFuzzyThreshold(0.5); + sliceRelPosFilter->SetOrientationType(SliceRelPosFilterType::RelPosFilterType::RightTo); sliceRelPosFilter->Update(); m_working_image = sliceRelPosFilter->GetOutput(); writeImage(m_working_image, "afterslicebyslice.mhd"); - /* - - itk::ImageSliceConstIteratorWithIndex it(temp, temp->GetRequestedRegion()); - itk::ImageRegionIterator * ot; - typename SliceType::Pointer slice; - it.SetFirstDirection(0); - it.SetSecondDirection(1); - it.GoToBegin(); - typename SliceType::RegionType mSliceRegion; - typename SliceType::IndexType mSliceIndex; - typename SliceType::SizeType mSliceSize; - typename SliceType::SpacingType mSliceSpacing; - typename SliceType::PointType mSliceOrigin; - mSliceIndex[0] = temp->GetLargestPossibleRegion().GetIndex()[0]; - mSliceIndex[1] = temp->GetLargestPossibleRegion().GetIndex()[1]; - mSliceSize[0] = temp->GetLargestPossibleRegion().GetSize()[0]; - mSliceSize[1] = temp->GetLargestPossibleRegion().GetSize()[1]; - mSliceSpacing[0] = temp->GetSpacing()[0]; - mSliceSpacing[1] = temp->GetSpacing()[1]; - mSliceOrigin[0] = temp->GetOrigin()[0]; - mSliceOrigin[1] = temp->GetOrigin()[1]; - mSliceRegion.SetIndex(mSliceIndex); - mSliceRegion.SetSize(mSliceSize); - int i=0; - while( !it.IsAtEnd() ) { - // DD(i); - slice = SliceType::New(); - slice->SetRegions(mSliceRegion); - slice->SetOrigin(mSliceOrigin); - slice->SetSpacing(mSliceSpacing); - slice->Allocate(); - ot = new itk::ImageRegionIterator(slice, slice->GetLargestPossibleRegion()); - ot->GoToBegin(); - // DD(it.GetIndex()); - while(!it.IsAtEndOfSlice()) { - // DD(ot->GetIndex()); - while(!it.IsAtEndOfLine()) { - ot->Set(it.Get()); - ++it; - ++(*ot); - } - it.NextLine(); - } - mImageSlices.push_back(slice); - it.NextSlice(); - ++i; - } - writeImage(mImageSlices[10], "slice.mhd"); - - // Perform RelPos by slice - for(int i=0; i RelPosFilterType; - typename RelPosFilterType::Pointer relPosFilter = RelPosFilterType::New(); - // relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()); - relPosFilter->VerboseStepOff(); - relPosFilter->WriteStepOff(); - relPosFilter->SetInput(m_working_image); - relPosFilter->SetInputObject(temp); - relPosFilter->SetOrientationType(RelPosFilterType::RightTo); - relPosFilter->SetIntermediateSpacing(GetIntermediateSpacing()); - relPosFilter->SetFuzzyThreshold(GetFuzzyThreshold1()); - relPosFilter->Update(); - m_working_image = relPosFilter->GetOutput(); - } + //----------------------------------------------------- + StartNewStep("Right limits with bronchus (slice by slice)"); + // Select LeftLabel (set right label to 0) + temp = SetBackground(m_working_trachea, m_working_trachea, leftLabel, 0); + writeImage(temp, "temp2.mhd"); + + sliceRelPosFilter = SliceRelPosFilterType::New(); + sliceRelPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()); + sliceRelPosFilter->VerboseStepOn(); + sliceRelPosFilter->WriteStepOn(); + sliceRelPosFilter->SetInput(m_working_image); + sliceRelPosFilter->SetInputObject(temp); + sliceRelPosFilter->SetDirection(2); + sliceRelPosFilter->SetFuzzyThreshold(0.5); + sliceRelPosFilter->SetOrientationType(SliceRelPosFilterType::RelPosFilterType::LeftTo); + sliceRelPosFilter->Update(); + m_working_image = sliceRelPosFilter->GetOutput(); + writeImage(m_working_image, "afterslicebyslice.mhd"); + - */ - DD("end"); m_output = m_working_image; StopCurrentStep(m_output);