X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkImage2DicomRTStructFilter.txx;h=17757c8fc008e1c2560b2cde09b0d0a4117c8070;hb=e6929caa9906837ade57b84706fe0a38529dc93a;hp=1b241a99824a233a094058f1b8196d09c4e99772;hpb=ebdb05ef36e1f579a451171e691cd71d640f849c;p=clitk.git diff --git a/common/clitkImage2DicomRTStructFilter.txx b/common/clitkImage2DicomRTStructFilter.txx index 1b241a9..17757c8 100644 --- a/common/clitkImage2DicomRTStructFilter.txx +++ b/common/clitkImage2DicomRTStructFilter.txx @@ -45,12 +45,15 @@ #include "vtkCamera.h" #include "vtkProperty.h" #include "vtkProperty2D.h" +#include // itk #include #include // gdcm +#include +#include #include //-------------------------------------------------------------------- @@ -61,6 +64,7 @@ clitk::Image2DicomRTStructFilter::Image2DicomRTStructFilter() m_DicomFolder = ""; m_OutputFilename = "default-output.dcm"; m_ThresholdValue = 0.5; + m_SkipInitialStructuresFlag = false; } //-------------------------------------------------------------------- @@ -76,9 +80,8 @@ clitk::Image2DicomRTStructFilter::~Image2DicomRTStructFilter() //-------------------------------------------------------------------- template void -clitk::Image2DicomRTStructFilter::SetROIName(std::string name, std::string type) +clitk::Image2DicomRTStructFilter::SetROIType(std::string type) { - m_ROIName = name; m_ROIType = type; } //-------------------------------------------------------------------- @@ -111,10 +114,18 @@ void clitk::Image2DicomRTStructFilter::Update() std::cout << "Number of structures in the dicom-rt-struct : " << p->GetNumberOfStructureSetROIs() << std::endl; } - + + // number of additional contours + int m = m_InputFilenames.size(); + // Init writer vtkGDCMPolyDataWriter * writer = vtkGDCMPolyDataWriter::New(); - int numMasks = reader->GetNumberOfOutputPorts() + 1;//add one more + int numMasks = reader->GetNumberOfOutputPorts() + m; + + if (m_SkipInitialStructuresFlag) { + numMasks = m; + } + writer->SetNumberOfInputPorts(numMasks); writer->SetFileName(m_OutputFilename.c_str()); writer->SetMedicalImageProperties(reader->GetMedicalImageProperties()); @@ -126,35 +137,72 @@ void clitk::Image2DicomRTStructFilter::Update() roiNames->SetNumberOfValues(numMasks); roiAlgorithms->SetNumberOfValues(numMasks); roiTypes->SetNumberOfValues(numMasks); - + // Convert the image into a mesh - typedef clitk::BinaryImageToMeshFilter BinaryImageToMeshFilterType; - typename BinaryImageToMeshFilterType::Pointer convert = BinaryImageToMeshFilterType::New(); - convert->SetThresholdValue(m_ThresholdValue); - convert->SetInput(m_Input); - convert->Update(); - vtkPolyData* mesh = convert->GetOutputMesh(); - if (GetVerboseFlag()) { - std::cout << "Mesh has " << mesh->GetNumberOfLines() << " lines." << std::endl; + std::vector > meshes; + std::vector m_ROINames; + meshes.resize(m); + m_ROINames.resize(m); + for(unsigned int i=0; i ImageType; + ImagePointer input = clitk::readImage(m_InputFilenames[i], false); + + std::ostringstream oss; + oss << vtksys::SystemTools:: + GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(m_InputFilenames[i])); + std::string name = oss.str(); + m_ROINames[i] = name; + + // convert to mesh + typedef clitk::BinaryImageToMeshFilter BinaryImageToMeshFilterType; + typename BinaryImageToMeshFilterType::Pointer convert = BinaryImageToMeshFilterType::New(); + convert->SetThresholdValue(m_ThresholdValue); + convert->SetInput(input); + convert->Update(); + meshes[i] = convert->GetOutputMesh(); + if (GetVerboseFlag()) { + std::cout << "Mesh has " << meshes[i]->GetNumberOfLines() << " lines." << std::endl; + } + + /* + // debug mesh write FIXME + vtkSmartPointer wr = vtkSmartPointer::New(); + wr->SetInputConnection(convert->GetOutputPort()); //psurface->GetOutputPort() + wr->SetFileName("bidon.obj"); + wr->Update(); + wr->Write(); + */ } // Copy previous contours - for (unsigned int i = 0; i < numMasks-1; ++i) { + for (unsigned int i = 0; i < numMasks-m; ++i) { +#if VTK_MAJOR_VERSION <= 5 writer->SetInput(i, reader->GetOutput(i)); +#else + writer->SetInputData(i, reader->GetOutput(i)); +#endif std::string theString = reader->GetRTStructSetProperties()->GetStructureSetROIName(i); roiNames->InsertValue(i, theString); theString = reader->GetRTStructSetProperties()->GetStructureSetROIGenerationAlgorithm(i); roiAlgorithms->InsertValue(i, theString); theString = reader->GetRTStructSetProperties()->GetStructureSetRTROIInterpretedType(i); roiTypes->InsertValue(i, theString); - } + } - // Add new one - int last = numMasks-1; - writer->SetInput(last, mesh); - roiNames->InsertValue(last, m_ROIName); - roiAlgorithms->InsertValue(last, "CLITK_CREATED"); - roiTypes->InsertValue(last, m_ROIType); + // Add new ones + for (unsigned int i = numMasks-m; i < numMasks; ++i) { +#if VTK_MAJOR_VERSION <= 5 + writer->SetInput(i, meshes[i-numMasks+m]); +#else + writer->SetInputData(i, meshes[i-numMasks+m]); +#endif + roiNames->InsertValue(i, m_ROINames[i-numMasks+m]); + roiAlgorithms->InsertValue(i, "CLITK_CREATED"); + roiTypes->InsertValue(i, m_ROIType); + } /* // Visu DEBUG @@ -194,7 +242,7 @@ void clitk::Image2DicomRTStructFilter::Update() writer->InitializeRTStructSet(m_DicomFolder, reader->GetRTStructSetProperties()->GetStructureSetLabel(), reader->GetRTStructSetProperties()->GetStructureSetName(), - roiNames, roiAlgorithms, roiTypes); + roiTypes, roiAlgorithms, roiTypes); writer->Write(); reader->Delete(); roiNames->Delete();