v2.0.0
Loading...
Searching...
No Matches
mri_slicer.h
Go to the documentation of this file.
1//=============================================================================================================
37
38#ifndef MRI_SLICER_H
39#define MRI_SLICER_H
40
41//=============================================================================================================
42// INCLUDES
43//=============================================================================================================
44
45#include "mri_global.h"
46
47//=============================================================================================================
48// QT INCLUDES
49//=============================================================================================================
50
51#include <QVector>
52
53//=============================================================================================================
54// EIGEN INCLUDES
55//=============================================================================================================
56
57#include <Eigen/Core>
58
59//=============================================================================================================
60// DEFINE NAMESPACE MRILIB
61//=============================================================================================================
62
63namespace MRILIB {
64
65//=============================================================================================================
66// FORWARD DECLARATIONS
67//=============================================================================================================
68
69class MriVolData;
70
71//=============================================================================================================
76
77//=============================================================================================================
95
96//=============================================================================================================
108{
109public:
110 //=========================================================================================================
123 const QVector<float>& volData,
124 const QVector<int>& dims,
125 const Eigen::Matrix4f& vox2ras,
126 SliceOrientation orientation,
127 int sliceIndex);
128
129 //=========================================================================================================
142 static int voxelAxisForOrientation(const Eigen::Matrix4f& vox2ras,
143 SliceOrientation orientation);
144
145 //=========================================================================================================
155 static int dimensionForOrientation(const QVector<int>& dims,
156 const Eigen::Matrix4f& vox2ras,
157 SliceOrientation orientation);
158
159 //=========================================================================================================
169 static int sliceIndexForOrientation(const Eigen::Matrix4f& vox2ras,
170 SliceOrientation orientation,
171 const Eigen::Vector3i& voxel);
172
173 //=========================================================================================================
184 static QVector<MriSliceImage> extractOrthogonal(
185 const QVector<float>& volData,
186 const QVector<int>& dims,
187 const Eigen::Matrix4f& vox2ras,
188 const Eigen::Vector3f& rasPoint);
189
190 //=========================================================================================================
199 static Eigen::Vector3i rasToVoxel(const Eigen::Matrix4f& vox2ras,
200 const Eigen::Vector3f& rasPoint);
201
202 //=========================================================================================================
211 static Eigen::Vector3f voxelToRas(const Eigen::Matrix4f& vox2ras,
212 const Eigen::Vector3i& voxel);
213
214 //=========================================================================================================
215 // MriVolData convenience overloads
216 //=========================================================================================================
217
227 static MriSliceImage extractSlice(const MriVolData& vol,
228 SliceOrientation orientation,
229 int sliceIndex);
230
234 static int voxelAxisForOrientation(const MriVolData& vol,
235 SliceOrientation orientation);
236
240 static int dimensionForOrientation(const MriVolData& vol,
241 SliceOrientation orientation);
242
247 SliceOrientation orientation,
248 const Eigen::Vector3i& voxel);
249
258 static QVector<MriSliceImage> extractOrthogonal(const MriVolData& vol,
259 const Eigen::Vector3f& rasPoint);
260
269 static Eigen::Vector3i rasToVoxel(const MriVolData& vol,
270 const Eigen::Vector3f& rasPoint);
271
280 static Eigen::Vector3f voxelToRas(const MriVolData& vol,
281 const Eigen::Vector3i& voxel);
282};
283
284} // namespace MRILIB
285
286#endif // MRI_SLICER_H
Export/import macros and build-info accessors for MRILIB.
#define MRISHARED_EXPORT
Definition mri_global.h:39
Volume I/O, voxel geometry and slice resampling for structural MRI data inside mne-cpp.
SliceOrientation
Definition mri_slicer.h:75
Single 2D MRI cross-section produced by MriSlicer (pixel buffer + RAS metadata).
Definition mri_slicer.h:87
Eigen::Matrix4f sliceToRas
Definition mri_slicer.h:93
SliceOrientation orientation
Definition mri_slicer.h:91
Eigen::MatrixXf pixels
Definition mri_slicer.h:88
Orthogonal-plane resampler (axial / coronal / sagittal) from MriVolData to MriSliceImage.
Definition mri_slicer.h:108
static int sliceIndexForOrientation(const MriVolData &vol, SliceOrientation orientation, const Eigen::Vector3i &voxel)
static Eigen::Vector3f voxelToRas(const Eigen::Matrix4f &vox2ras, const Eigen::Vector3i &voxel)
static Eigen::Vector3f voxelToRas(const MriVolData &vol, const Eigen::Vector3i &voxel)
static MriSliceImage extractSlice(const QVector< float > &volData, const QVector< int > &dims, const Eigen::Matrix4f &vox2ras, SliceOrientation orientation, int sliceIndex)
static QVector< MriSliceImage > extractOrthogonal(const MriVolData &vol, const Eigen::Vector3f &rasPoint)
static Eigen::Vector3i rasToVoxel(const Eigen::Matrix4f &vox2ras, const Eigen::Vector3f &rasPoint)
static Eigen::Vector3i rasToVoxel(const MriVolData &vol, const Eigen::Vector3f &rasPoint)
static int voxelAxisForOrientation(const Eigen::Matrix4f &vox2ras, SliceOrientation orientation)
static int sliceIndexForOrientation(const Eigen::Matrix4f &vox2ras, SliceOrientation orientation, const Eigen::Vector3i &voxel)
static QVector< MriSliceImage > extractOrthogonal(const QVector< float > &volData, const QVector< int > &dims, const Eigen::Matrix4f &vox2ras, const Eigen::Vector3f &rasPoint)
static int dimensionForOrientation(const QVector< int > &dims, const Eigen::Matrix4f &vox2ras, SliceOrientation orientation)
Format-agnostic 3D MRI volume: header geometry, voxel buffer (as a vector of MriSlice),...