Actual size of stl models

Operating system: Windows
Slicer version: 4.8.1
Expected behavior: Life-size bone models

G’Day,
I’ve just started using Slicer.
I need to create 3d printed bone models to assist in surgical planning.
I just want to confirm that stl models created in Slicer will be true to life.
I have created the models I need and have saved the stl file ready to send offsite to get it 3d printed but it won’t be much good if it prints out a different size to reality.
How can I confirm this?
Thanks
Richard

Yes, if you segment an image acquired by a clinical scanner then the size of segmented and 3D-printed model is true to life. Of course, it is always your responsibility to verify that that the final result is correct and fit for the purpose that you intend to use it for. You can perform a complete processing workflow with the same scanner, processing software, and printer on an object of known size to verify that everything works as expected.

1 Like

If you get different size, e.g. very large or very small, this probably an issue of different scaling so you may need to re-scale either in Slicer or in the other software e.g convert from meter to mm or vice versa.

Clinical scanners usually follow the DICOM standard in basic aspects, such as voxel size. There is no known issue in Slicer of reading these images correctly. 3D printers pretty much standardized on using mm as unit in STL files. So, not much can go wrong.

Industrial, pre-clinical, and CBCT scanners still quite often generate invalid DICOM files, so you need to definitely test your workflow if you use one of these.

If your measurements within Slicer are reasonable (ruler, segmentation’s volume etc) then it should be alright. We and our collaborators regularly print bones and other surfaces segmented from CT.

I know Slicer measurements are correct. It is just there are some tools out there (and probably some 3D printers) that use different scaling e.g. OpenSim, if I load something generated by Slicer, it will appear larger than it should be as OpenSim thinks the spacing is in meters not mm. I have to rescale it in OpenSim e.g. multiply by 0.001 or or resale it in Slicer using Transforms module.

Note that it is not necessary to transform your segments if you just want to change their scale for export. You can specify scale in “Export to files” dialog in Segmentations/Segment Editor module:

Yes, various CAD software uses different units for STL import/export (mm, m, inches, 1/100 inches, etc).

Fortunately, 3D printing industry pretty much standardized on using mm as unit in STL files. So, if you export models for 3D printing then you should leave the default 1.0 scale.

Thanks for the info, I use Transform as the model should translated to the center of mass as well.

Why do you need to translate to the center of mass? We could include such centering in the export if it was useful, but you lose information (the true physical location) and I’m not sure what would be the advantage of doing that.

It is required for some simulation problems to have the model at the origin of the simulation space. It happens when the model is translated to the center of mass. I am working on extension to do number of this stuff including this, hopefully, I will upload it soon.

Last year I had an opportunity to work with Mimics trial version and made the same model that I made with Slicer previously. I got funny results, there was a bit difference between models segmented with these softwares as seen on the pic. I am not sure why that happened. (same DICOM data was used)!


When I made another model with 3D Slicer, Mimics and Philips IntelliSpace Portal there was not big difference (pic 2).

Maybe the CT was acquired with tilted gantry. When you acquire such CTs then you get a warning during DICOM import that image geometry may be incorrect. To load these tilted gantry CT-s correctly, “Acquisition geometry regularization” option must be set to “apply regularization transform” in menu: Edit / Application Settings / DICOM section.

Unfortunately CT study was performed in another hospital so I don’t know if gantry was tilted. I tried to import data again and there was no such warning.

I presume that option is used only if we have tilted gantry data, right? There is no need to used it when normal position gantry was performed?

Did you re-import the original dicom? That’s the only time when gantry tilt would be detected. Detection and correction would be automatic if the option is enabled.

yes, i reimport it over again few days ago and no message popped up.

If you can share the data set or at least image position and orientation DICOM fields (as described here) then we might be able to tell if there is a problem.

Unfortunately, DICOM data is too big to send (a bit over 1 Gb) so there is image position and orientation for soft tissue window:

DICOM header

[0008,0000] GenericGroupLength 624 UL 4
[0008,0005] SpecificCharacterSet ISO_IR 100 CS 10
[0008,0008] ImageType [3] ORIGINAL, PRIMARY, AXIAL CS 22
[0008,0012] InstanceCreationDate 20170204 DA 8
[0008,0013] InstanceCreationTime 224427 TM 6
[0008,0016] SOPClassUID 1.2.840.10008.5.1.4.1.1.2 UI 26
[0008,0018] SOPInstanceUID 1.2.840.113619.2.55.3.2831158528.79.1486038504.898.1 UI 52
[0008,0020] StudyDate 20170204 DA 8
[0008,0021] SeriesDate 20170204 DA 8
[0008,0022] AcquisitionDate 20170204 DA 8
[0008,0023] ContentDate 20170204 DA 8
[0008,0030] StudyTime 224203 TM 6
[0008,0031] SeriesTime 224305 TM 6
[0008,0032] AcquisitionTime 224317.511830 TM 14
[0008,0033] ContentTime 224427 TM 6
[0008,0050] AccessionNumber SH 0
[0008,0060] Modality CT CS 2
[0008,0070] Manufacturer GE MEDICAL SYSTEMS LO 18
[0008,0080] InstitutionName LO 12
[0008,0081] InstitutionAddress UNKNOWN ST 8
[0008,0090] ReferringPhysicianName pedijatrija PN 12
[0008,1010] StationName CT_VK SH 6
[0008,1030] StudyDescription CT MOZGA LO 8
[0008,103e] SeriesDescription DETAIL 0.625 LO 12
[0008,1050] PerformingPhysicianName PN 0
[0008,1060] NameOfPhysiciansReadingStudy PN 0
[0008,1070] OperatorsName M.P PN 4
[0008,1090] ManufacturerModelName Optima CT540 LO 12
[0008,1140] ReferencedImageSequence SQ 122
[fffe,e000] Item na 106
[0008,0000] GenericGroupLength 94 UL 4
[0008,1150] ReferencedSOPClassUID 1.2.840.10008.5.1.4.1.1.2 UI 26
[0008,1155] ReferencedSOPInstanceUID 1.2.840.113619.2.55.3.2831158528.79.1486038504.816.2 UI 52
[0009,0000] PrivateGroupLength 94 UL 4
[0009,0010] PrivateCreator GEMS_IDEN_01 LO 12
[0009,1001] FullFidelity CT_LIGHTSPEED LO 14
[0009,1002] SuiteId CT99 SH 4
[0009,1004] ProductId Optima CT540 SH 12
[0009,1027] ImageActualDate 1486248185 SL 4
[0009,10e3] EquipmentUID UI 0
[0010,0000] GenericGroupLength 92 UL 4
[0010,0010] PatientName PN 12
[0010,0020] PatientID LO 10
[0010,0030] PatientBirthDate DA 8
[0010,0040] PatientSex M CS 2
[0010,1000] RETIRED_OtherPatientIDs LO 0
[0010,1010] PatientAge 016Y AS 4
[0010,21b0] AdditionalPatientHistory LT 0
[0018,0000] GenericGroupLength 396 UL 4
[0018,0022] ScanOptions AXIAL MODE CS 10
[0018,0050] SliceThickness 0.625000 DS 8
[0018,0060] KVP 120 DS 4
[0018,0088] SpacingBetweenSlices 0.631941 DS 8
[0018,0090] DataCollectionDiameter 250.000000 DS 10
[0018,1000] DeviceSerialNumber * LO 2
[0018,1020] SoftwareVersions bj_sles_cl.68 LO 14
[0018,1030] ProtocolName 1.1 MOZAK KONTRAST M LO 20
[0018,1100] ReconstructionDiameter 250.000000 DS 10
[0018,1110] DistanceSourceToDetector 949.075000 DS 10
[0018,1111] DistanceSourceToPatient 541.000000 DS 10
[0018,1120] GantryDetectorTilt 8.500000 DS 8
[0018,1130] TableHeight 167.000000 DS 10
[0018,1140] RotationDirection CW CS 2
[0018,1150] ExposureTime 800 IS 4
[0018,1151] XRayTubeCurrent 299 IS 4
[0018,1152] Exposure 14 IS 2
[0018,1160] FilterType HEAD FILTER SH 12
[0018,1170] GeneratorPower 52800 IS 6
[0018,1190] FocalSpots 1.200000 DS 8
[0018,1210] ConvolutionKernel DETAIL SH 6
[0018,5100] PatientPosition HFS CS 4
[0018,9305] RevolutionTime 0.8 FD 8
[0018,9306] SingleCollimationWidth 0.625 FD 8
[0018,9307] TotalCollimationWidth 10 FD 8
[0019,0000] PrivateGroupLength 292 UL 4
[0019,0010] PrivateCreator GEMS_ACQU_01 LO 12
[0019,1002] NumberOfCellsInDetector 912 SL 4
[0019,1003] CellNumberAtTheta 389.750000 DS 10
[0019,1004] CellSpacing 1.023900 DS 8
[0019,100f] HorizontalFrameOfReference 557.500000 DS 10
[0019,1011] SeriesContrast 0 SS 2
[0019,1018] FirstScanRAS I LO 2
[0019,101a] LastScanRAS I LO 2
[0019,1023] TableSpeed 0.000000 DS 8
[0019,1024] MidScanTime 0.400000 DS 8
[0019,1025] MidScanFlag 1 SS 2
[0019,1026] DegreesOfAzimuth 355 SL 4
[0019,1027] GantryPeriod 0.800000 DS 8
[0019,102c] NumberOfTriggers 995 SL 4
[0019,102e] AngleOfFirstView 0.000000 DS 8
[0019,102f] TriggerFrequency 1230.000000 DS 12
[0019,1039] ScanFOVType 2 SS 2
[0019,1042] SegmentNumber 0 SS 2
[0019,1043] TotalSegmentsRequested 0 SS 2
[0019,1047] ViewCompressionFactor 1 SS 2
[0019,1052] ReconPostProcessingFlag 1 SS 2
[0019,106a] DependantOnNumberOfViewsProcessed 2 SS 2
[0020,0000] GenericGroupLength 348 UL 4
[0020,000d] StudyInstanceUID 1.2.840.113619.2.55.3.2831158528.79.1486038504.811 UI 50
[0020,000e] SeriesInstanceUID 1.2.840.113619.2.55.3.2831158528.79.1486038504.817.4 UI 52
[0020,0010] StudyID 6573 SH 4
[0020,0011] SeriesNumber 4 IS 2
[0020,0012] AcquisitionNumber 1 IS 2
[0020,0013] InstanceNumber 1 IS 2
[0020,0032] ImagePositionPatient [3] -121.200, -115.027, -180.757 DS 26
[0020,0037] ImageOrientationPatient [6] 1.000000, 0.000000, 0.000000, 0.000000, 0.989016, -0.147809 DS 54
[0020,0052] FrameOfReferenceUID 1.2.840.113619.2.55.3.2831158528.79.1486038504.813.5575.1 UI 58
[0020,1040] PositionReferenceIndicator OM LO 2
[0020,1041] SliceLocation -197.948 DS 8
[0021,0000] PrivateGroupLength 84 UL 4
[0021,0010] PrivateCreator GEMS_RELA_01 LO 12
[0021,1003] SeriesFromWhichPrescribed 2 SS 2
[0021,1035] SeriesFromWhichPrescribed 1 SS 2
[0021,1036] ImageFromWhichPrescribed 2 SS 2
[0021,1091] BiopsyPosition 0 SS 2
[0021,1092] BiopsyTLocation 0 FL 4
[0021,1093] BiopsyRefLocation 0 FL 4
[0023,0000] PrivateGroupLength 36 UL 4
[0023,0010] PrivateCreator GEMS_STDY_01 LO 12
[0023,1070] StartTimeSecsInFirstAxial 1486248197.5118301 FD 8
[0027,0000] PrivateGroupLength 182 UL 4
[0027,0010] PrivateCreator GEMS_IMAG_01 LO 12
[0027,1010] ScoutType 0 SS 2
[0027,101c] VmaMamp 0 SL 4
[0027,101e] VmaMod 0 SL 4
[0027,101f] VmaClip 38 SL 4
[0027,1020] SmartScanOnOffFlag 2 SS 2
[0027,1035] PlaneType 2 SS 2
[0027,1042] CenterRCoordOfPlaneImage -3.8 FL 4
[0027,1043] CenterACoordOfPlaneImage -8.6000004 FL 4
[0027,1044] CenterSCoordOfPlaneImage -199.23328 FL 4
[0027,1045] NormalRCoord 0 FL 4
[0027,1046] NormalACoord -0.1478094 FL 4
[0027,1047] NormalSCoord 0.98901588 FL 4
[0027,1050] TableStartLocation 0 FL 4
[0027,1051] TableEndLocation 0 FL 4
[0028,0000] GenericGroupLength 182 UL 4
[0028,0002] SamplesPerPixel 1 US 2
[0028,0004] PhotometricInterpretation MONOCHROME2 CS 12
[0028,0010] Rows 512 US 2
[0028,0011] Columns 512 US 2
[0028,0030] PixelSpacing [2] 0.488281, 0.488281 DS 18
[0028,0100] BitsAllocated 16 US 2
[0028,0101] BitsStored 16 US 2
[0028,0102] HighBit 15 US 2
[0028,0103] PixelRepresentation 1 US 2
[0028,0120] PixelPaddingValue -2000 SS 2
[0028,1050] WindowCenter 40 DS 2
[0028,1051] WindowWidth 100 DS 4
[0028,1052] RescaleIntercept -1024 DS 6
[0028,1053] RescaleSlope 1 DS 2
[0028,1054] RescaleType HU LO 2
[0040,0000] GenericGroupLength 68 UL 4
[0040,0244] PerformedProcedureStepStartDate 20170204 DA 8
[0040,0245] PerformedProcedureStepStartTime 224203 TM 6
[0040,0253] PerformedProcedureStepID PPS ID 6573 SH 14
[0040,0254] PerformedProcedureStepDescription CT MOZGA LO 8
[0043,0000] PrivateGroupLength 310 UL 4
[0043,0010] PrivateCreator GEMS_PARM_01 LO 12
[0043,1010] WindowValue 100 US 2
[0043,1012] XrayChain [3] 99, 99, 99 SS 6
[0043,1016] NumberOfOverranges -1 SS 2
[0043,101e] DeltaStartTime 0.000000 DS 8
[0043,101f] MaxOverrangesInAView 0 SL 4
[0043,1021] CorrectedAfterglowTerms 0 SS 2
[0043,1025] ReferenceChannels [6] 0, 0, 0, 0, 0, 0 SS 12
[0043,1026] NoViewsRefChannelsBlocked [4] 0, 0, 0, 0 US 8
[0043,1027] ScanPitchRatio SH 0
[0043,1028] UniqueImageIdentifier 30 OB 2
[0043,102b] PrivateScanOptions [4] 2, 0, 1, 0 SS 8
[0043,1031] RACoordOfTargetReconCentre [2] -3.800000, -8.600000 DS 20
[0043,1040] TriggerOnPosition 211.2484 FL 4
[0043,1041] DegreeOfRotation 364.024384 FL 4
[0043,1042] DASTriggerSource 0 SL 4
[0043,1043] DASFpaGain 0 SL 4
[0043,1044] DASOutputSource 0 SL 4
[0043,1045] DASAdInput 0 SL 4
[0043,1046] DASCalMode 0 SL 4
[0043,104d] StartScanToXrayOnDelay 0 FL 4
[0043,104e] DurationOfXrayOn 0.80000001 FL 4
[0043,1064] Unknown Tag & Data CS 0
[0045,0000] PrivateGroupLength 316 UL 4
[0045,0010] PrivateCreator GEMS_HELIOS_01 LO 14
[0045,1001] Unknown Tag & Data 16 SS 2
[0045,1002] Unknown Tag & Data 0.625 FL 4
[0045,1003] Unknown Tag & Data 22 SS 2
[0045,1004] Unknown Tag & Data 5 SS 2
[0045,1006] Unknown Tag & Data OUT OF GANTRY CS 14
[0045,1007] Unknown Tag & Data 0 FL 4
[0045,1008] Unknown Tag & Data 0 SS 2
[0045,1009] Unknown Tag & Data 17 SS 2
[0045,100a] Unknown Tag & Data 0 FL 4
[0045,100b] Unknown Tag & Data 0 FL 4
[0045,100c] Unknown Tag & Data 0 SS 2
[0045,100d] Unknown Tag & Data 0 SS 2
[0045,100e] Unknown Tag & Data 0 FL 4
[0045,100f] Unknown Tag & Data 0 FL 4
[0045,1010] Unknown Tag & Data 0 SS 2
[0045,1011] Unknown Tag & Data 0 SS 2
[0045,1012] Unknown Tag & Data 0 SS 2
[0045,1013] Unknown Tag & Data 12 SS 2
[0045,1014] Unknown Tag & Data 0 SS 2
[0045,1015] Unknown Tag & Data 0 SS 2
[0045,1016] Unknown Tag & Data 0 SS 2
[0045,1017] Unknown Tag & Data 0 SS 2
[0045,1018] Unknown Tag & Data 0 SS 2
[0045,1021] Unknown Tag & Data 1 SS 2
[0045,1022] Unknown Tag & Data 0 SS 2
[0045,1032] Unknown Tag & Data 0.80000001 FL 4
[0045,103b] Unknown Tag & Data LO 0
[0053,0000] PrivateGroupLength 162 UL 4
[0053,0010] PrivateCreator GEHC_CT_ADVAPP_001 LO 18
[0053,1020] Unknown Tag & Data 0 IS 2
[0053,1060] Unknown Tag & Data SH 0
[0053,1061] Unknown Tag & Data 0 SH 2
[0053,1062] Unknown Tag & Data 0 SH 2
[0053,1064] Unknown Tag & Data 0 IS 2
[0053,1065] Unknown Tag & Data 0 IS 2
[0053,1066] Unknown Tag & Data 120kV LO 6
[0053,1067] Unknown Tag & Data 0 IS 2
[0053,1068] Unknown Tag & Data 1 IS 2
[0053,106a] Unknown Tag & Data 0 IS 2
[0053,106b] Unknown Tag & Data 0 IS 2
[0053,106c] Unknown Tag & Data DS 0
[0053,106d] Unknown Tag & Data DS 0
[0053,109d] Unknown Tag & Data LO 0
[7fe0,0000] GenericGroupLength 524300 UL 4
[7fe0,0010] PixelData f830 OW 524288

hope this helps, if not let me know and we’ll think of something else.

[0018,1120] GantryDetectorTilt 8.500000 DS 8

This indicates that this series indeed was acquired with gantry tilt. If you enable in menu: Edit / Application settings / DICOM / Acquisition geometry regularization: apply regularization transform; click OK, restart Slicer, and then use DICOM module to load the image. To convert the image to a Cartesian image volume, go to Data module, Transform hierarchy tab, right-click on your image, and click “Harden transform”. I’ve just double-checked this with Slcier-4.10.0 and it works perfectly.

If you have any further problems: Sharing files up to a couple of gigabytes should not be a problem - upload to dropbox, onedrive, google drive, etc. and post the link.

1 Like

Thank you for your reply.
So this action should be performed only when study was performed with gentry tilt?

edit:
i made model following your steps and have obtained model with totally different dimensions, so now I have 3 models with 3 different dimensions :slight_smile: (two with 3D slicer and one mimics). i will upload data into philips intellispace portal and make stl model and again compare 4 of them.

Normally the gantry tilt correction will be detected automatically and only applied when needed. But the method is relatively new so we have the correction turned off by default. Let us know what you find out when you compare the various methods.