MeshLib C++ Docs
Loading...
Searching...
No Matches
MRDicom.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVoxelsFwd.h"
4#ifndef MRVOXELS_NO_DICOM
5#include "MRVoxelsVolume.h"
6
7#include "MRMesh/MRAffineXf.h"
8#include "MRMesh/MRMatrix3.h"
10
11#include <filesystem>
12#include <optional>
13
14namespace MR
15{
16
17namespace VoxelsLoad
18{
19
20
21enum class DicomStatusEnum : int
22{
23 Ok = 0, // valid DICOM and we can open it
24 Invalid, // not a valid DICOM
25 Unsupported, // a valid DICOM, but we do not support it (e.g. some MediaStorages)
26};
27
29{
30 // implicit by design
31 DicomStatus( DicomStatusEnum st, std::string_view rs = "" ):
32 status( st ),
33 reason( rs )
34 {}
35
36 explicit operator bool() const
37 { return status == DicomStatusEnum::Ok; }
38
40 { return status == s; }
41
43 std::string reason; // if status is Unsupported, specify reason why
44};
45
48MRVOXELS_API DicomStatus isDicomFile( const std::filesystem::path& path, std::string* seriesUid = nullptr );
49
51MRVOXELS_API bool isDicomFolder( const std::filesystem::path& dirPath );
52
53template <typename T>
55{
56 T vol;
57 std::string name;
58 AffineXf3f xf;
59};
60
62MRVOXELS_API Expected<DicomVolume> loadDicomFile( const std::filesystem::path& file, const ProgressCallback& cb = {} );
63
65MRVOXELS_API Expected<DicomVolumeAsVdb> loadDicomFileAsVdb( const std::filesystem::path& file, const ProgressCallback& cb = {} );
66
68MRVOXELS_API Expected<DicomVolume> loadDicomFolder( const std::filesystem::path& path, unsigned maxNumThreads, const ProgressCallback& cb = {} );
69
71MRVOXELS_API Expected<DicomVolumeAsVdb> loadDicomFolderAsVdb( const std::filesystem::path& path, unsigned maxNumThreads, const ProgressCallback& cb = {} );
72
74MRVOXELS_API std::vector<Expected<DicomVolume>> loadDicomsFolder( const std::filesystem::path& path, unsigned maxNumThreads, const ProgressCallback& cb = {} );
75
77MRVOXELS_API std::vector<Expected<DicomVolumeAsVdb>> loadDicomsFolderAsVdb( const std::filesystem::path& path, unsigned maxNumThreads, const ProgressCallback& cb = {} );
78
80MRVOXELS_API std::vector<Expected<DicomVolumeAsVdb>> loadDicomsFolderTreeAsVdb( const std::filesystem::path& path,
81 unsigned maxNumThreads = 4, const ProgressCallback& cb = {} );
82
85
87MRVOXELS_API Expected<LoadedObjects> makeObjectVoxelsFromDicomFolder( const std::filesystem::path& folder, const ProgressCallback& callback = {} );
88
89} // namespace VoxelsLoad
90
91namespace VoxelsSave
92{
93
95MRVOXELS_API Expected<void> toDicom( const VdbVolume& vdbVolume, const std::filesystem::path& path, ProgressCallback cb = {} );
98template <typename T>
99MRVOXELS_API Expected<void> toDicom( const VoxelsVolume<std::vector<T>>& volume, const std::filesystem::path& path, const std::optional<MinMaxf>& sourceScale = {}, const ProgressCallback& cb = {} );
100
101extern template MRVOXELS_API Expected<void> toDicom( const VoxelsVolume<std::vector<std::uint16_t>>& volume, const std::filesystem::path& path, const std::optional<MinMaxf>& sourceScale, const ProgressCallback& cb );
102
103} // namespace VoxelsSave
104
105} // namespace MR
106#endif
#define MRVOXELS_API
Definition MRVoxels/MRVoxelsFwd.h:13
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:636
MRVOXELS_API Expected< LoadedObjects > makeObjectVoxelsFromDicomFolder(const std::filesystem::path &folder, const ProgressCallback &callback={})
Loads 3D volumetric data from dicom-files in given folder, and converts them into an ObjectVoxels.
MRVOXELS_API Expected< std::shared_ptr< ObjectVoxels > > createObjectVoxels(const DicomVolumeAsVdb &dcm, const ProgressCallback &cb={})
converts DicomVolumeAsVdb in ObjectVoxels
DicomStatusEnum
Definition MRDicom.h:22
MRVOXELS_API Expected< DicomVolumeAsVdb > loadDicomFolderAsVdb(const std::filesystem::path &path, unsigned maxNumThreads, const ProgressCallback &cb={})
Loads one volume from DICOM files located in given folder as VdbVolume.
MRVOXELS_API std::vector< Expected< DicomVolume > > loadDicomsFolder(const std::filesystem::path &path, unsigned maxNumThreads, const ProgressCallback &cb={})
Loads all volumes from DICOM files located in given folder as a number of SimpleVolumeMinMax.
MRVOXELS_API Expected< DicomVolume > loadDicomFile(const std::filesystem::path &file, const ProgressCallback &cb={})
Loads full volume from single DICOM file (not a slice file) as SimpleVolumeMinMax.
MRVOXELS_API Expected< DicomVolumeAsVdb > loadDicomFileAsVdb(const std::filesystem::path &file, const ProgressCallback &cb={})
Loads full volume from single DICOM file (not a slice file) as VdbVolume.
MRVOXELS_API Expected< DicomVolume > loadDicomFolder(const std::filesystem::path &path, unsigned maxNumThreads, const ProgressCallback &cb={})
Loads one volume from DICOM files located in given folder as SimpleVolumeMinMax.
MRVOXELS_API DicomStatus isDicomFile(const std::filesystem::path &path, std::string *seriesUid=nullptr)
MRVOXELS_API std::vector< Expected< DicomVolumeAsVdb > > loadDicomsFolderTreeAsVdb(const std::filesystem::path &path, unsigned maxNumThreads=4, const ProgressCallback &cb={})
Loads every subfolder with DICOM volume as new object.
MRVOXELS_API bool isDicomFolder(const std::filesystem::path &dirPath)
check if given folder contains at least one DICOM file
MRVOXELS_API std::vector< Expected< DicomVolumeAsVdb > > loadDicomsFolderAsVdb(const std::filesystem::path &path, unsigned maxNumThreads, const ProgressCallback &cb={})
Loads all volumes from DICOM files located in given folder as a number of VdbVolume.
MRVOXELS_API Expected< void > toDicom(const VdbVolume &vdbVolume, const std::filesystem::path &path, ProgressCallback cb={})
Save voxels objet to a single 3d DICOM file.
tl::expected< T, E > Expected
Definition MRExpected.h:59
Definition MRDicom.h:29
std::string reason
Definition MRDicom.h:43
DicomStatusEnum status
Definition MRDicom.h:42
DicomStatus(DicomStatusEnum st, std::string_view rs="")
Definition MRDicom.h:31
bool operator==(DicomStatusEnum s) const
Definition MRDicom.h:39
Definition MRDicom.h:55
std::string name
Definition MRDicom.h:57
AffineXf3f xf
Definition MRDicom.h:58
T vol
Definition MRDicom.h:56
represents a box in 3D space subdivided on voxels stored in T
Definition MRVoxelsVolume.h:39