X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicomRT_ROI_ConvertToImageFilter.cxx;fp=tools%2FclitkDicomRT_ROI_ConvertToImageFilter.cxx;h=0000000000000000000000000000000000000000;hb=261a091dbabc5df821d4220a5a4a55f35e4d8eb0;hp=cedef817e23fcaa9beb8434765be2a99a91fd04d;hpb=82d0db04054ac02ddbd921427ddc2edf73d475a0;p=clitk.git diff --git a/tools/clitkDicomRT_ROI_ConvertToImageFilter.cxx b/tools/clitkDicomRT_ROI_ConvertToImageFilter.cxx deleted file mode 100644 index cedef81..0000000 --- a/tools/clitkDicomRT_ROI_ConvertToImageFilter.cxx +++ /dev/null @@ -1,191 +0,0 @@ -/*========================================================================= - Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Main authors : XX XX XX - - Authors belongs to: - - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the copyright notices for more information. - - It is distributed under dual licence - - BSD http://www.opensource.org/licenses/bsd-license.php - - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - - =========================================================================*/ - -#include "clitkDicomRT_ROI_ConvertToImageFilter.h" -#include -#include -#include -#include -#include -#include "clitkImageCommon.h" - -//-------------------------------------------------------------------- -clitk::DicomRT_ROI_ConvertToImageFilter::DicomRT_ROI_ConvertToImageFilter() { - mROI = NULL; - mImageInfoIsSet = false; - mWriteOutput = false; - mCropMask = true; -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -clitk::DicomRT_ROI_ConvertToImageFilter::~DicomRT_ROI_ConvertToImageFilter() { - -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -void clitk::DicomRT_ROI_ConvertToImageFilter::SetROI(clitk::DicomRT_ROI * roi) { - mROI = roi; -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -void clitk::DicomRT_ROI_ConvertToImageFilter::SetCropMaskEnabled(bool b) { - mCropMask = b; -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -void clitk::DicomRT_ROI_ConvertToImageFilter::SetOutputImageFilename(std::string s) { - mOutputFilename = s; - mWriteOutput = true; -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -void clitk::DicomRT_ROI_ConvertToImageFilter::SetImageFilename(std::string f) { - itk::ImageIOBase::Pointer header = clitk::readImageHeader(f); - if (header->GetNumberOfDimensions() < 3) { - std::cerr << "Error. Please provide a 3D image instead of " << f << std::endl; - exit(0); - } - if (header->GetNumberOfDimensions() > 3) { - std::cerr << "Warning dimension > 3 are ignored" << std::endl; - } - mSpacing.resize(3); - mOrigin.resize(3); - mSize.resize(3); - for(unsigned int i=0; i<3; i++) { - mSpacing[i] = header->GetSpacing(i); - mOrigin[i] = header->GetOrigin(i); - mSize[i] = header->GetDimensions(i); - } - mImageInfoIsSet = true; -} -//-------------------------------------------------------------------- - - -//-------------------------------------------------------------------- -void clitk::DicomRT_ROI_ConvertToImageFilter::Update() { - if (!mROI) { - std::cerr << "Error. No ROI set, please use SetROI." << std::endl; - exit(0); - } - if (!mImageInfoIsSet) { - std::cerr << "Error. Please provide image info (spacing/origin) with SetImageFilename" << std::endl; - exit(0); - } - // DD("Update"); - - // Get Mesh - vtkPolyData * mesh = mROI->GetMesh(); - // DD(mesh->GetNumberOfCells()); - - // Get bounds - double *bounds=mesh->GetBounds(); - // for(int i=0; i<6; i++){ -// DD(bounds[i]); -// } - - // Compute origin - std::vector origin; - origin.resize(3); - origin[0] = floor((bounds[0]-mOrigin[0])/mSpacing[0]-2)*mSpacing[0]+mOrigin[0]; - origin[1] = floor((bounds[2]-mOrigin[1])/mSpacing[1]-2)*mSpacing[1]+mOrigin[1]; - origin[2] = floor((bounds[4]-mOrigin[2])/mSpacing[2]-2)*mSpacing[2]+mOrigin[2]; - - // Compute extend - std::vector extend; - extend.resize(3); - extend[0] = ceil((bounds[1]-origin[0])/mSpacing[0]+4); - extend[1] = ceil((bounds[3]-origin[1])/mSpacing[1]+4); - extend[2] = ceil((bounds[5]-origin[2])/mSpacing[2]+4); - - // If no crop, set initial image size/origin - if (!mCropMask) { - for(int i=0; i<3; i++) { - origin[i] = mOrigin[i]; - extend[i] = mSize[i]-1; - } - } - - // Create new output image - mBinaryImage = vtkImageData::New(); - mBinaryImage->SetScalarTypeToUnsignedChar(); - mBinaryImage->SetOrigin(&origin[0]); - mBinaryImage->SetSpacing(&mSpacing[0]); - mBinaryImage->SetExtent(0, extend[0], - 0, extend[1], - 0, extend[2]); - mBinaryImage->AllocateScalars(); - - // for(int i=0; i<3; i++){ - // DD(origin[i]); - // DD(extend[i]); - // DD(mBinaryImage->GetDimensions()[i]); - // } - memset(mBinaryImage->GetScalarPointer(), 0, - mBinaryImage->GetDimensions()[0]*mBinaryImage->GetDimensions()[1]*mBinaryImage->GetDimensions()[2]*sizeof(unsigned char)); - - // Extrude - vtkSmartPointer extrude=vtkSmartPointer::New(); - extrude->SetInput(mesh); - ///We extrude in the -slice_spacing direction to respect the FOCAL convention // ????????????? - extrude->SetVector(0, 0, -mSpacing[2]); - - // Binarization - vtkSmartPointer sts=vtkSmartPointer::New(); - //The following line is extremely important - //http://www.nabble.com/Bug-in-vtkPolyDataToImageStencil--td23368312.html#a23370933 - sts->SetTolerance(0); - sts->SetInformationInput(mBinaryImage); - sts->SetInput(extrude->GetOutput()); - //sts->SetInput(mesh); - - vtkSmartPointer stencil=vtkSmartPointer::New(); - stencil->SetStencil(sts->GetOutput()); - stencil->SetInput(mBinaryImage); - stencil->ReverseStencilOn(); - stencil->Update(); - mBinaryImage->ShallowCopy(stencil->GetOutput()); - - if (mWriteOutput) { - typedef itk::Image ImageType; - typedef itk::VTKImageToImageFilter ConnectorType; - ConnectorType::Pointer connector = ConnectorType::New(); - connector->SetInput(GetOutput()); - connector->Update(); - clitk::writeImage(connector->GetOutput(), mOutputFilename); - } -} -//-------------------------------------------------------------------- - - - -//-------------------------------------------------------------------- -vtkImageData * clitk::DicomRT_ROI_ConvertToImageFilter::GetOutput() { - return mBinaryImage; -} -//--------------------------------------------------------------------