Printing volume renderings in plastic

A question that comes up on this forum from time to time is why we can’t just 3D print the volume rendered view. We explain that most printers today expect STL surface models and we go into the difference between volume rendering and surface segmentation.

I wanted to point out some just published research about new printing techniques that are much closer to directly printing out a volume rendering.

These are photographs of 3D prints made using this technique:

Here’s our paper that describes the method:

https://www.liebertpub.com/doi/pdf/10.1089/3dp.2017.0140

It still requires special printers and materials, but if the technique proves useful we can expect it to become more commonly available.

10 Likes

These look beautiful and it’s great that you don’t need to segment your data.

An extension has been added to Slicer that can print such models: SlicerFab. It is available in the extension manager for recent nightly builds.

3 Likes

Hello, I am a Chinese student and I am going to print a heart model like this:


But I encountered certain difficulties in volume rendering, my heart model is dark, like this picture. It doesn’t has any color, so I got numbers of bitmap(png) without colors. How can I save this problem.

In cardiac CT images, all contrast-filled structures have similar image intensity, so direct volume rendering will not help. You need to segment the image as explained here in detail:

I‘m sorry. My English is poor, I will describe my question more clearly:
I want to 3D print a heart model. In the 3D slicer, I used the “grow from seed” method and got the following picture:


I know that only the volume can be rendered, so I want to convert these 8 segmentation into volume. In this step, I used the “split volume” method. This way I got 8 volumes。
image
I want to render these volumes one by one, superimposed in the window, like this:

Finally I got the picture below


But I have this very serious problem when using bitmap generator. There is nothing left

I think maybe multiple volumes cause an error, but the same problem still happens when I try render one volume and generate bitmap.
I ’m sure there are no errors in my bitmap, because the picture below is a successful example

Thank you for reading, I look forward to your answer, thank you

@Wan - Can you try the latest nightly preview of Slicer and the SlicerFab extension? If the bitmap generator is not working for you please share a scene that can be used to replicate the issue.

If you already segmented your volume then you don’t need bitmap printing but you can use a regular plastic color printer. You need to export the segmentation to STL or colored OBJ (using Export to files feature in Segment Editor). You may also export to colored VRML (as described here) or glTF (using SlicerOpenAnatomy extension).

A post was split to a new topic: I have lots of questions. Can I write you an email?

Hi @lassoan , thanks a lot for the great plugin!
However after exporting the slicing images using Slicerfab with only 6 colors, the Voxel Print Utility still shows error “voxel data contains 4043(too many) colors”… Guess the boundaries are still not clear enough… Any solution to that??

Slicer exports full-color images. You need to apply dithering on the exported images if you want to reduce the total number of colors used. I have never gone further than generating the full-color images, so I cannot recommend any specific software to do that. If you find a good one then please share it here to help future users.

1 Like

Thanks! I got the same answer from Stratasys team asking me to use the dithering/halftoning tools to process the image, I will find a way to bulk process them then.

1 Like

it could be great if SlicerFab have dithering within the algorithm. We were using Gimp with Bimp (the batch mode modification for Gimp, all free and open source software) to change the amount of colours by dithering the images, but still having errors to solve. And I recently post an error, I was using SlicerFab properly until today https://discourse.slicer.org/t/slicerfab-doesnt-work-properly-in-5-0-2/24001

Dithering should be done by the printer manufacturer, because only they know the optimal parameters (which colors are available, what is the resolution, what amount of each color can be deposited, etc.).

However, until they provide this feature it woul be indeed nice if Slicer could do some generic dithering.

Integrating Gimp/Bimp with Slicer could be somewhat complicated, as they are both applications and I’m not sure if they have a command-line interface.

However, using ImageMagick should be quite easy. It has nice quantization features and Slicer could run the command-line tool to quantize each captured image slice.

Hi, I’m a bit confused how to use this extension to convert a .STL file into a stack of images for use in inkjet 3D printing. I can import the .STL fine, but then when I try to use the extension it returns a traceback error, attached below.

I’ll be honest, I’m a materials development person. Software always throws me for a loop. Any help understanding what I’m looking at, what’s going wrong, and how the software understands STLs would be wonderful.

"Traceback (most recent call last):
File “C:/Users/geoff/AppData/Local/NA-MIC/Slicer 5.0.3/NA-MIC/Extensions-30893/SlicerFab/lib/Slicer-5.0/qt-scripted-modules/BitmapGenerator.py”, line 157, in onApplyButton
self.logic.generate(volumeRenderingNode, filePattern)
File “C:/Users/geoff/AppData/Local/NA-MIC/Slicer 5.0.3/NA-MIC/Extensions-30893/SlicerFab/lib/Slicer-5.0/qt-scripted-modules/BitmapGenerator.py”, line 268, in generate
self.create3dView(volumeRenderingNode)
File “C:/Users/geoff/AppData/Local/NA-MIC/Slicer 5.0.3/NA-MIC/Extensions-30893/SlicerFab/lib/Slicer-5.0/qt-scripted-modules/BitmapGenerator.py”, line 251, in create3dView
self.threeDViewNode.SetAndObserveParentLayoutNodeID(viewOwnerNode.GetID())
AttributeError: ‘NoneType’ object has no attribute ‘GetID’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “C:/Users/geoff/AppData/Local/NA-MIC/Slicer 5.0.3/NA-MIC/Extensions-30893/SlicerFab/lib/Slicer-5.0/qt-scripted-modules/BitmapGenerator.py”, line 160, in onApplyButton
logging.error(“Error: {0}”.format(e.message))
AttributeError: ‘AttributeError’ object has no attribute ‘message’"

It looks like the SlicerFab extension needs to be updated to work with the recent Slicer5 release. Probably you can have it working with an older release.

But FYI, if you are starting with an STL file than SlicerFab is not what you need. The BitmapGenerator is for taking volumetric data, like a CT scan and making rendered slices (rgb images). STL files are already surface models.

Ah, I see, thank you. This is what came up while hunting around online, I guess the keywords were a bit tricked. Thanks so much!