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//=============================================================================================================
67// FORWARD DECLARATIONS
68//=============================================================================================================
69
70class MriVolData;
71
72//=============================================================================================================
82
83//=============================================================================================================
103
104//=============================================================================================================
118{
119public:
120 //=========================================================================================================
133 const QVector<float>& volData,
134 const QVector<int>& dims,
135 const Eigen::Matrix4f& vox2ras,
136 SliceOrientation orientation,
137 int sliceIndex);
138
139 //=========================================================================================================
152 static int voxelAxisForOrientation(const Eigen::Matrix4f& vox2ras,
153 SliceOrientation orientation);
154
155 //=========================================================================================================
165 static int dimensionForOrientation(const QVector<int>& dims,
166 const Eigen::Matrix4f& vox2ras,
167 SliceOrientation orientation);
168
169 //=========================================================================================================
179 static int sliceIndexForOrientation(const Eigen::Matrix4f& vox2ras,
180 SliceOrientation orientation,
181 const Eigen::Vector3i& voxel);
182
183 //=========================================================================================================
194 static QVector<MriSliceImage> extractOrthogonal(
195 const QVector<float>& volData,
196 const QVector<int>& dims,
197 const Eigen::Matrix4f& vox2ras,
198 const Eigen::Vector3f& rasPoint);
199
200 //=========================================================================================================
209 static Eigen::Vector3i rasToVoxel(const Eigen::Matrix4f& vox2ras,
210 const Eigen::Vector3f& rasPoint);
211
212 //=========================================================================================================
221 static Eigen::Vector3f voxelToRas(const Eigen::Matrix4f& vox2ras,
222 const Eigen::Vector3i& voxel);
223
224 //=========================================================================================================
225 // MriVolData convenience overloads
226 //=========================================================================================================
227
237 static MriSliceImage extractSlice(const MriVolData& vol,
238 SliceOrientation orientation,
239 int sliceIndex);
240
248 static int voxelAxisForOrientation(const MriVolData& vol,
249 SliceOrientation orientation);
250
258 static int dimensionForOrientation(const MriVolData& vol,
259 SliceOrientation orientation);
260
270 SliceOrientation orientation,
271 const Eigen::Vector3i& voxel);
272
281 static QVector<MriSliceImage> extractOrthogonal(const MriVolData& vol,
282 const Eigen::Vector3f& rasPoint);
283
292 static Eigen::Vector3i rasToVoxel(const MriVolData& vol,
293 const Eigen::Vector3f& rasPoint);
294
303 static Eigen::Vector3f voxelToRas(const MriVolData& vol,
304 const Eigen::Vector3i& voxel);
305};
306
307} // namespace MRILIB
308
309#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:77
Single 2D MRI cross-section produced by MriSlicer (pixel buffer + RAS metadata).
Definition mri_slicer.h:95
Eigen::Matrix4f sliceToRas
Definition mri_slicer.h:101
SliceOrientation orientation
Definition mri_slicer.h:99
Eigen::MatrixXf pixels
Definition mri_slicer.h:96
Orthogonal-plane resampler (axial / coronal / sagittal) from MriVolData to MriSliceImage.
Definition mri_slicer.h:118
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),...