3D Image Analysis with qim3d
Felipe Delestro
fima@dtu.dk
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428820/qim-logo.png)
QIM Center
Center for Quantification of Imaging Data from MAX IV
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428883/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428885/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428886/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428888/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428892/pasted-from-clipboard.png)
supported by
![](http://qim.dk/wp-content/uploads/2022/12/20211210_143046-e1670249659340.jpg)
![](http://qim.dk/wp-content/uploads/2019/04/Abda-e1554965932656.jpg)
![](http://qim.dk/wp-content/uploads/2019/04/Jon_Sporring-e1554966002365.jpeg)
Rebecca
Engberg
Center Manager
Anders Bjorholm Dahl
Head of the QIM Center
Jon
Sporring
Deputy Head of the QIM Center
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428851/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428852/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428853/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428857/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428858/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428859/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428860/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428861/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428862/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428863/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428865/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428866/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428867/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428868/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428869/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428870/pasted-from-clipboard.png)
an open-source Python library, that focuses on 3D volumetric data
Getting started is easy:
pip install qim3d
Full documentation at https://platform.qim.dk/qim3d/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.io.load("path/to/image.tif", virtual_stack=True)
Supported formats:
-
Tiff
(including file stacks) HDF5
-
TXRM
/TXM
/XRM
NIfTI
-
PIL
(including file stacks) -
VOL
/VGI
DICOM
qim3d.io.save("my_file.h5", vol)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429043/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429048/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429049/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429051/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.bone_128x128x128
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429056/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429057/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429060/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429063/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429066/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429067/pasted-from-clipboard.png)
blobs_256x256x256
bone_128x128x128
cement_128x128x128
fly_150x256x256
NT_128x128x128
shell_225x128x128
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429080/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429079/viz-slicer-notebook.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429081/volviz-notebook.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429083/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429085/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
# Get data
vol = qim3d.examples.cement_128x128x128
vol_blurred = qim3d.processing.gaussian(vol, sigma=2)
# Detect blobs, and get binary mask
blobs, mask = qim3d.processing.blob_detection(
vol_blurred,
min_sigma=1,
max_sigma=8,
threshold=0.001,
overlap=0.1,
background="bright"
)
# Visualize detected blobs
qim3d.viz.circles(blobs, vol, alpha=0.8, color='blue')
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429092/blob_detection.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.cement_128x128x128
binary = qim3d.processing.filters.gaussian(vol, 2)<60
qim3d.viz.slices(binary, axis=1)
labeled_volume, num_labels = qim3d.processing.operations.watershed(binary)
cmap = qim3d.viz.colormaps.objects(num_labels)
qim3d.viz.slices(labeled_volume, axis=1, cmap=cmap)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429107/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429108/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
cmap = qim3d.viz.colormaps.objects(num_labels, style='bright', min_dist=0.5)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429099/viz-colormaps-min_dist.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.cement_128x128x128[50:150]
vol_bin = vol<80
cc = qim3d.processing.get_3d_cc(vol_bin)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429103/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429104/pasted-from-clipboard.png)
qim3d.viz.plot_cc(cc, crop=True, show=True, overlay=None, n_slices=5, component_indexs=[4])
qim3d.viz.plot_cc(cc, crop=True, show=True, overlay=vol, n_slices=5, component_indexs=[4])
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.cement_128x128x128
qim3d.viz.slices(vol, vmin=0, vmax=255)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429114/pasted-from-clipboard.png)
vol_filtered = qim3d.processing.operations.remove_background(vol,
min_object_radius=3,
background="bright")
qim3d.viz.slices(vol_filtered, vmin=0, vmax=255)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429115/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.cement_128x128x128
qim3d.viz.interactive_fade_mask(vol)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429117/viz-fade_mask.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
qim3d.viz.vol(vol)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429124/pasted-from-clipboard.png)
import qim3d
vol_faded = qim3d.processing.operations.edge_fade(vol, decay_rate=4,
ratio=0.45,
geometric='cylindrical')
qim3d.viz.vol(vol_faded)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429126/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429156/annotation-tool.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429189/full_page_unet_part1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429191/full_page_unet_part3.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429190/full_page_unet_part2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429192/full_page_unet_part4.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.utils.generate_volume(noise_scale=0.05, threshold=0.4)
qim3d.viz.vol(vol)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429132/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
vol = qim3d.examples.NT_128x128x128
val, vec = qim3d.processing.structure_tensor(vol, visualize=True, axis=2)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429135/structure_tensor.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
import qim3d
fly = qim3d.examples.fly_150x256x256
lt_fly = qim3d.processing.local_thickness(fly, visualize=True, axis=0)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429137/local_thickness_3d.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429141/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429218/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429220/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429221/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429207/pasted-from-clipboard.png)
qim3d gui --data-explorer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
qim3d gui --local-thickness
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429216/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
Next steps of development
- Simplify dependencies
- Operations for large volumetric data (using
Dask
andZarr
) - Pre-trained DL models
- GUI for volumetric reconstruction (Using
CIL
) - GUI for volumetric data annotation
Author | Commits | First commit |
---|---|---|
Felipe Delestro | 170 | 2023-05-12 |
Stefan Engelmann Jensen | 29 | 2023-06-29 |
Oskar Kristoffersen | 15 | 2023-07-05 |
Christian Kento Rasmussen | 19 | 2024-02-01 |
Alessia Saccardo | 7 | 2024-02-19 |
David Grundfest | 4 | 2024-04-12 |
Anna Bøgevang Ekner | 3 | 2024-04-18 |
Thanks to all that contributed with code for qim3d
!
Find us at GitLab
lab.compute.dtu.dk/QIM/tools/qim3d
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11428908/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/347072/images/11429236/pasted-from-clipboard.png)
3D Image Analysis with qim3d
By Felipe Delestro
3D Image Analysis with qim3d
- 180