GithubHelp home page GithubHelp logo

temirlanst / dicomtomesh Goto Github PK

View Code? Open in Web Editor NEW

This project forked from myousefi2016/dicomtomesh

0.0 0.0 0.0 55 KB

A command line tool to transform a DICOM volume into a 3d surface mesh (obj or stl). Several mesh processing routines can be enabled, such as mesh reduction, smoothing or cleaning.

License: MIT License

C++ 95.66% C 1.36% CMake 2.99%

dicomtomesh's Introduction

DicomToMesh

DicomToMesh is a handy command line tool, which enables the user to automatically create a 3D mesh from a set of 2D DICOM images, a common image format used in medicine. The supported 3D mesh formats are STL and OBJ.

dicom2mesh

Mesh Creation

The 3D surface mesh is computed by the marching cubes algorithm. As an input, this algorithm requires a threshold which indicates what range of voxel values should be considered. This threshold is also known as iso-value. In CT scans, the iso-value depends on the tissue (density). In Dicom2Mesh you can specify the iso-value with the parameter -t X, where X is an integer.

Mesh Post-Processing Options

Mesh reduction: The mesh of a medical DICOM image can easily exceed 1 GB of data. Reducing the number of polygons, therefore, is a crucial feature. Reduction can be enabled by the option -r X where X is a floating-point value between 0.0 and 1.0.

reduction

Mesh smoothing: Acquired medical images contain often heavy noise. This is visible in the extracted 3D surface. Smoothing the mesh leads often to a better result. Smoothing can be enabled with the argument -s.

smoothing

Remove small objects: The resulting 3D mesh contains often parts which are not of interest, such as for example the screws of the table on which a CT scan of a patient was acquired. With DicomToMesh, you can remove objects below a certain size by adding the option -e X where X is a floating-point value between 0.0 and 1.0. X is a size threshold relative to the connected object with the most vertices. It is easy understandable with an example: The biggest connected object of the mesh has 1000 vertices. Then -e 0.25 removes all connected objects with less than 250 vertices.

filter

Visualisation

By passing the command line option -v the resulting mesh is visualised in a 3D environment. By double clicking the mesh's surface, the corresponding 3D coordinate is printed to the shell.

filter

Building

The software is written in C++11 and uses VTK 7.0. CMake is used as build-system.

In order to extend the supported DICOM formats, the libray vtk-dicom can be optionally enabled (see https://github.com/dgobbi/vtk-dicom).

Building DicomToMesh on Linux:

> git clone https://github.com/AOT-AG/DicomToMesh.git</code>
> cd DicomToMesh</code>
> mkdir build</code>
> cd build</code>
> ccmake ..  #opens ccmake window

Within the ccmake window, pass the path to your vtk installation or vtk build directory. In my case, it looks like that

CMAKE_BUILD_TYPE                 DEBUG                                        
CMAKE_INSTALL_PREFIX             /usr/local                                   
USE_VTK_DICOM                    OFF                                          
VTK_DIR                          /home/eidelen/Development/libs/vtk/build     

Press c and then g. Now you are back in terminal and ready to build.

> make

How to use Dicom2Mesh

Command line arguments can be combined and passed in arbitrary order.

Input and output: The path to the DICOM directory is passed by the argument -i dicomPath. The file name of the resulting 3D mesh is specified by the parameter -o meshPath. This simple example transforms a DICOM data set into a 3D mesh file called mesh.stl, by using an iso-value of 557 -t 557.

> dicom2mesh -i pathToDicomDirectory -t 557 -o mesh.stl

Alternatively, one can use an existing 3d mesh as input. This is useful if you want to apply only mesh post-processing routines and bypass the time consuming mesh creation step. This example imports the former mesh.stl, centers it and exports it in the OBJ mesh format.

> dicom2mesh -i mesh.stl -c -o newMesh.obj

Mesh post-processing: The following example shows different mesh post-processing methods applied to resulting surface mesh out of the marching cubes algorithm. In particular, a mesh is reduced by 90% of its original number faces -r 0.9. In addition, the mesh is smoothed -s and centred at the coordinate system's origin -c. Another helpful function is the removal of small objects - here the removal of every object smaller than 5% of the biggest object -e 0.05.

> dicom2mesh -i pathToDicomDirectory -r 0.9 -s -c -e 0.05 -o mesh.stl

Contributors

DicomToMesh is a small in-house product of AOT AG (http://www.aot.swiss). Since it is based on several open-source examples, we decided to make our code public as well. We hope somebody can use parts of it. Participants are most welcome.

Have fun :)

filter

dicomtomesh's People

Contributors

eidelen avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.