A dentist in our group is interested in doing virtual surgical planning and/or 3D printing based on 3D reconstructions of cone-beam computed tomography (CBCT) data.
Although I don't know if the results can be saved in a format suitable for 3D printing you can find a list of some open source software for image reconstruction in the link below. OSCAR, ASTRA, OpenRTK are some of them.
By using Invesalius open source software, wonderful segmentation, thresholding of any tissue can be done. Such segmented part can be saved as .stl file, these files may have few errors as far as 3D printing is concerned. once you have got 3D .stl file, load it into another free software from Autodesk known as Meshmixer. You can repair the model with automatic repair command and make the part ready for printing from there only. Download InVesalius at http://www.cti.gov.br/invesalius/ and meshmixer at http://meshmixer.com/download.html
some information on segmentation by Invesalius is given in my answer to another question at https://www.researchgate.net/post/Which_software_can_be_used_to_accurately_measure_the_volume_of_maxillary_sinus_from_CBCT_multiple_images
3D segmentation can be done with Avizo, Dragonfly, etc. After segmentation, a surface needs to be rendered (can also be done at least in Avizo) and then export that as STL which can be printed. I have done that many times.
3D segmentation can also be done with GeoDict. After segmentation, a surface is exported as STL which can then be printed. We and our clients have done that many times.
If you are looking for a programmatic approach there is Adam Aitkenhead's code on the Matlab File Exchange (link below). It takes a binary image as input, so you will need to threshold your volume image first (the 'true' phase will become the manifold). Not sure what your native format for your volume images are but I usually use tiff stacks as an interchange format (create a dimension matched 3D array using the zeros() then read into memory in a loop with imread() ). Be warned that the code is very memory hungry (converting a 1k^3 image will eat 10s of GB) and the resulting mesh will be very large (usually hundreds of MB to a couple of GB) as the voxels are tessellated explicitly. Meshes can be decimated / smoothed using Meshlab (open source if you want to fiddle with the code: link below). I would recommend using quadratic edge collapse followed by a Laplacian smooth.
3D Slicer is an open source software that can be used for 3D reconstruction. It can also be used for generating stl files. Meshmixer and viewbox - are good softwares for stl files