Ejemplo n.º 1
0
    static void Main(string[] args)
    {
        try
        {
            // Setup typedefs
            itkPixelType pixel = itkPixelType.D;
            itkDimension dim = new itkDimension(3);
            itkMeshTraits traits = itkMeshTraits.Static();

            // Create mesh
            itkMesh mesh = itkMesh.New(pixel, dim, traits);
            itkRegularSphereMeshSource source = 
                itkRegularSphereMeshSource.New(mesh);
            source.Center = new itkPoint(32.0, 32.0, 32.0);
            source.Scale = new itkVector(32.0, 32.0, 32.0);
            source.Resolution = 4;
            source.Update();
            source.GetOutput(mesh);

            // Convert mesh to image
            itkImageBase output = itkImage.New(itkPixelType.UC, dim.Dimension);
            itkTriangleMeshToBinaryImageFilter filter = 
                itkTriangleMeshToBinaryImageFilter.New(mesh, output);
            filter.SetInput(mesh);
            filter.Tolerance = 0.001;
            filter.Size = new itkSize(100, 100, 100);
            filter.Update();
            filter.GetOutput(output);
            output.Write(args[0]);

            // Cleanup
            filter.Dispose();
            output.Dispose();
            mesh.Dispose();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    } // end main
      static void Main(string[] args)
      {
          try
          {
              // Setup typedefs
              itkPixelType pixel = itkPixelType.D;
              itkDimension dim = new itkDimension(3);
              itkMeshTraits traits = itkMeshTraits.Static();

              // Compute gradient
              Console.WriteLine("Reading gradient: " + args[0]);
              itkImageBase gradient = itkImage_CVD33.New();
              gradient.Read(args[0]);

              // Create initial mesh
              Console.WriteLine("Creating initial mesh");
              itkMesh meshIn = itkMesh.New(pixel, dim, traits);
              itkRegularSphereMeshSource source = itkRegularSphereMeshSource.New(meshIn);
              source.Center = new itkPoint(20.0, 20.0, 20.0);
              source.Scale = new itkVector(5.0, 5.0, 5.0);
              source.Resolution = 4;
              source.Update();
              source.GetOutput(meshIn);
              meshIn.DisconnectPipeline();

              // Convert triangle mesh to simplex mesh
              Console.WriteLine("Converting triangle mesh to simplex mesh");
              itkSimplexMesh simplexIn = itkSimplexMesh.New(pixel, dim, traits);
              itkTriangleMeshToSimplexMeshFilter convertToSimplex =
                  itkTriangleMeshToSimplexMeshFilter.New(meshIn, simplexIn);
              convertToSimplex.SetInput(meshIn);
              convertToSimplex.Update();
              convertToSimplex.GetOutput(simplexIn);
              simplexIn.DisconnectPipeline();

              // Deform the simplex mesh
              Console.WriteLine("Deforming simplex mesh");
              itkSimplexMesh simplexOut = itkSimplexMesh.New(pixel, dim, traits);
              itkDeformableSimplexMesh3DBalloonForceFilter deform =
                  itkDeformableSimplexMesh3DBalloonForceFilter.New(simplexIn, simplexOut);
              deform.Alpha = 0.8;   // Internal force scaling
              deform.Beta = 0.8;    // External force scaling
              deform.Gamma = 0.1;   // Reference metric scaling
              deform.Rigidity = 3;  // Mesh smoothness (0=high curvature, 9=smooth)
              deform.Kappa = 0.1;   // Internal balloon force scaling
              deform.Iterations = 200;
              deform.SetGradient(gradient);
              deform.SetInput(simplexIn);
              deform.Progress += new itkProgressHandler(FilterProgress);
              deform.Update();
              deform.GetOutput(simplexOut);
              simplexOut.DisconnectPipeline();
              Console.WriteLine();

              // Convert simplex mesh to triangle mesh
              Console.WriteLine("Converting simplex mesh to triangle mesh");
              itkMesh meshOut = itkMesh.New(pixel, dim, traits);
              itkSimplexMeshToTriangleMeshFilter convertToTriangle =
                  itkSimplexMeshToTriangleMeshFilter.New(simplexOut, meshOut);
              convertToTriangle.SetInput(simplexOut);
              convertToTriangle.Update();
              convertToTriangle.GetOutput(meshOut);
              meshOut.DisconnectPipeline();

              // Convert mesh to image
              Console.WriteLine("Converting mesh to image: " + Path.GetFileName(args[1]));
              itkImageBase output = itkImage_UC3.New();
              itkTriangleMeshToBinaryImageFilter filter =
                  itkTriangleMeshToBinaryImageFilter.New(meshOut, output);
              filter.SetInput(meshOut);
              filter.Tolerance = 0.001;
              filter.Size = gradient.Size;
              filter.Spacing = gradient.Spacing;
              filter.Origin = gradient.Origin;
              filter.GetOutput(output);
              filter.Update();
              output.Write(args[1]);
          }
          catch (Exception ex)
          {
              Console.WriteLine(ex.ToString());
          }
      }