Esempio n. 1
0
BinaryImageType::Pointer meshToBinaryImage(MeshType::Pointer mesh, unsigned imageResolution, double imageMargin) {
typedef itk::TriangleMeshToBinaryImageFilter<MeshType, BinaryImageType> TriangleMeshToBinaryImageFilterType;

    // We transform the mesh to a binary image
    TriangleMeshToBinaryImageFilterType::Pointer meshToBinImageFilter = TriangleMeshToBinaryImageFilterType::New();


    // we choose the image slightly larger than the bounding box of the mesh
    const MeshType::BoundingBoxType* boundingBox = mesh->GetBoundingBox();
    PointType minPt = boundingBox->GetMinimum();
    for (unsigned d = 0; d < 3; d++) {minPt.SetElement(d, minPt.GetElement(d) - imageMargin); }
    PointType maxPt = boundingBox->GetMaximum();
    for (unsigned d = 0; d < 3; d++) {maxPt.SetElement(d, maxPt.GetElement(d) + imageMargin); }

    meshToBinImageFilter->SetOrigin(minPt);
    TriangleMeshToBinaryImageFilterType::SizeType size;
    for (unsigned d = 0; d < 3; d++) {
    size[d] = imageResolution;
    }

    meshToBinImageFilter->SetSize(size);
    TriangleMeshToBinaryImageFilterType::SpacingType spacing;
    for (unsigned d = 0; d < 3; d++) { spacing[d] = (maxPt[d] - minPt[d]) / size[d]; }
   meshToBinImageFilter->SetSpacing(spacing);

    meshToBinImageFilter->SetInput(mesh);
    meshToBinImageFilter->Update();
    return meshToBinImageFilter->GetOutput();
}