[vtkusers] Topology problem in converting polydata to image

Bill Lorensen bill.lorensen at gmail.com
Mon Aug 19 10:19:04 EDT 2013


What is the image dimension set to?


On Mon, Aug 19, 2013 at 10:09 AM, donyyo <donyyo at gmail.com> wrote:

> Hi,
> I want to convert polydata contour to image following the example (
> http://http://www.vtk.org/Wiki/VTK/Examples/PolyData/PolyDataToImageData
> <http://http://www.vtk.org/Wiki/VTK/Examples/PolyData/PolyDataToImageData>
> and
> http://
> http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataContourToImageData
> <http://
> http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataContourToImageData
> >
> ). There are many parts in the contour (left image). However, the topology
> in the image I got was wrong (right image). What can I do?
>
> <http://vtk.1045678.n5.nabble.com/file/n5722850/image1.png>
>
> modelPolyData->GetCenter(cutPlaneOrigin);
> cutPlaneOrigin[2] = firstImageNum+ii;
> vtkPlane *cutPlane = vtkPlane::New();
> cutPlane->SetOrigin(cutPlaneOrigin);
> cutPlane->SetNormal(0, 0, 1);
>
> vtkCutter *cutter = vtkCutter::New();
> cutter->SetInput(modelPolyData);
> cutter->SetCutFunction(cutPlane);
>
> vtkStripper *stripper = vtkStripper::New();
> stripper->SetInputConnection(cutter->GetOutputPort());
> stripper->Update();
>
> cutContourPolyData = stripper->GetOutput();
>
> double cutContourBounds[6];
> cutContourPolyData->GetBounds(cutContourBounds);
>
> // Prepare the binary image's voxel grid.
> double imageResolution[3] = {1.0, 1.0, 1.0};
> imageData->SetSpacing(imageResolution);
>
> // Compute dimensions.
> vtkImageData *imageData = vtkImageData::New();
> imageData->SetDimensions(imageDimension);
> imageData->SetExtent(0, imageDimension[0]-1, 0, imageDimension
>
> [1]-1, 0, imageDimension[2]-1);
>
> imageOrigin[2] = cutContourBounds[4];
> imageData->SetOrigin(imageOrigin);
> imageData->SetScalarTypeToUnsignedChar();
> imageData->AllocateScalars();
>
> // Fill the image with foreground voxels.
> for (vtkIdType i = 0; i < imageData->GetNumberOfPoints(); i++)
>     imageData->GetPointData()->GetScalars()->SetTuple1(i, 255);
>
> // polygonal data --> image stencil:
> vtkPolyDataToImageStencil *pol2stenc =
>
> vtkPolyDataToImageStencil::New();
> pol2stenc->SetTolerance(0);
> pol2stenc->SetInput(cutContourPolyData);
> pol2stenc->SetOutputOrigin(imageOrigin);
> pol2stenc->SetOutputSpacing(imageResolution);
> pol2stenc->SetOutputWholeExtent(imageData->GetExtent());
> pol2stenc->Update();
>
> // Cut the corresponding white image and set the background.
> vtkImageStencil *imgstenc = vtkImageStencil::New();
> imgstenc->SetInput(imageData);
> imgstenc->SetStencil(pol2stenc->GetOutput());
> imgstenc->ReverseStencilOff();
> imgstenc->SetBackgroundValue(0);
> imgstenc->Update();
>
> // Output image.
> imageNum = 10000+firstImageNum+ii;
> cout << "imageNum = " << imageNum << endl;
> logFile << "imageNum = " << imageNum << endl;
> ostringstream outputImageStringStream;
> outputImageStringStream << imageNum;
> outputImageNumStr = outputImageStringStream.str();
> cout << "outputImageNumStr = " << outputImageNumStr.c_str() <<
>
> endl;
> logFile << "outputImageNumStr = " << outputImageNumStr.c_str()
>
> << endl;
> outputImageFileName = modelName
>
> +"-"+outputImageNumStr.substr(1, outputImageNumStr.size()-
>
> 1)+"."+outputImageFormat;
> outputImageFilePathName = outputImageFilePath
>
> +outputImageFileName;
> if (outputImageFormat == "tif")
> {
>     tiffWriter->SetFileName(outputImageFilePathName.c_str());
>     tiffWriter->SetInputConnection(imgstenc->GetOutputPort());
>     tiffWriter->Write();
>     outputImageIndexFile << outputImageFileName.c_str() << endl;
> }
> if (outputImageFormat == "png")
> {
>     pngWriter->SetFileName(outputImageFilePathName.c_str());
>     pngWriter->SetInputConnection(imgstenc->GetOutputPort());
>     pngWriter->Write();
>     outputImageIndexFile << outputImageFileName.c_str() << endl;
> }
>
>
>
>
> --
> View this message in context:
> http://vtk.1045678.n5.nabble.com/Topology-problem-in-converting-polydata-to-image-tp5722850.html
> Sent from the VTK - Users mailing list archive at Nabble.com.
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



-- 
Unpaid intern in BillsBasement at noware dot com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130819/ba0c0ebd/attachment.htm>


More information about the vtkusers mailing list