28 #include "WDataSetScalar.h"
29 #include "../kernel/WKernel.h"
31 #include "WDataSetSegmentation.h"
37 boost::shared_ptr< WDataSetScalar > grayMatter,
38 boost::shared_ptr< WDataSetScalar > cerebrospinalFluid )
39 :
WDataSetSingle( convert( whiteMatter, grayMatter, cerebrospinalFluid ), whiteMatter->getGrid() )
41 boost::shared_ptr< WGrid > grid( whiteMatter->getGrid() );
45 boost::shared_ptr< WGrid > grid )
64 return "WDataSetSegmentation";
69 return "Segmentation of brain into white and gray matter, and CSF.";
114 boost::shared_ptr< WGridRegular3D > grid = boost::shared_dynamic_cast<
WGridRegular3D >(
m_grid );
115 size_t id = x + y * grid->
getNbCoordsX() + z * grid->getNbCoordsX() * grid->getNbCoordsY();
122 boost::shared_ptr< WGridRegular3D > grid = boost::shared_dynamic_cast<
WGridRegular3D >(
m_grid );
123 size_t id = x + y * grid->
getNbCoordsX() + z * grid->getNbCoordsX() * grid->getNbCoordsY();
130 boost::shared_ptr< WGridRegular3D > grid = boost::shared_dynamic_cast<
WGridRegular3D >(
m_grid );
131 size_t id = x + y * grid->
getNbCoordsX() + z * grid->getNbCoordsX() * grid->getNbCoordsY();
137 boost::shared_ptr< WDataSetScalar > grayMatter,
138 boost::shared_ptr< WDataSetScalar > cerebrospinalFluid )
141 WAssert( whiteMatter,
"No white matter data given." );
142 WAssert( grayMatter,
"No gray matter data given." );
143 WAssert( cerebrospinalFluid,
"No CSF data given." );
146 boost::shared_ptr< WGridRegular3D > wm_grid = boost::shared_dynamic_cast<
WGridRegular3D >( whiteMatter->getGrid() );
147 boost::shared_ptr< WGridRegular3D > gm_grid = boost::shared_dynamic_cast<
WGridRegular3D >( grayMatter->getGrid() );
148 boost::shared_ptr< WGridRegular3D > csf_grid = boost::shared_dynamic_cast<
WGridRegular3D >( cerebrospinalFluid->getGrid() );
150 WAssert( ( wm_grid->getNbCoordsX() == gm_grid->getNbCoordsX() ) && ( gm_grid->getNbCoordsX() == csf_grid->getNbCoordsX() ),
151 "Different X size of GrayMatter, WhiteMatter or CSF-Input" );
152 WAssert( ( wm_grid->getNbCoordsY() == gm_grid->getNbCoordsY() ) && ( gm_grid->getNbCoordsY() == csf_grid->getNbCoordsY() ),
153 "Different Y size of GrayMatter, WhiteMatter or CSF-Input" );
154 WAssert( ( wm_grid->getNbCoordsZ() == gm_grid->getNbCoordsZ() ) && ( gm_grid->getNbCoordsZ() == csf_grid->getNbCoordsZ() ),
155 "Different Z size of GrayMatter, WhiteMatter or CSF-Input" );
157 boost::shared_ptr< WValueSetBase > segmentation;
158 std::vector< boost::shared_ptr< WDataSetScalar > > dataSets;
159 dataSets.push_back( whiteMatter );
160 dataSets.push_back( grayMatter );
161 dataSets.push_back( cerebrospinalFluid );
163 switch( whiteMatter->getValueSet()->getDataType() )
165 case W_DT_UNSIGNED_CHAR:
167 boost::shared_ptr< std::vector< unsigned char > > data(
new std::vector< unsigned char > );
168 *data = copyDataSetsToArray< unsigned char >( dataSets );
169 segmentation = boost::shared_ptr< WValueSetBase >(
new WValueSet< unsigned char >( 1, dataSets.size(), data, W_DT_UNSIGNED_CHAR ) );
174 boost::shared_ptr< std::vector< int16_t > > data(
new std::vector< int16_t > );
175 *data = copyDataSetsToArray< int16_t >( dataSets );
176 segmentation = boost::shared_ptr< WValueSetBase >(
new WValueSet< int16_t >( 1, dataSets.size(), data, W_DT_INT16 ) );
179 case W_DT_SIGNED_INT:
181 boost::shared_ptr< std::vector< int32_t > > data(
new std::vector< int32_t > );
182 *data = copyDataSetsToArray< int32_t >( dataSets );
183 segmentation = boost::shared_ptr< WValueSetBase >(
new WValueSet< int32_t >( 1, dataSets.size(), data, W_DT_SIGNED_INT ) );
188 boost::shared_ptr< std::vector< float > > data(
new std::vector< float > );
189 *data = copyDataSetsToArray< float >( dataSets );
190 segmentation = boost::shared_ptr< WValueSetBase >(
new WValueSet< float >( 1, dataSets.size(), data, W_DT_FLOAT ) );
195 boost::shared_ptr< std::vector< double > > data(
new std::vector< double > );
196 *data = copyDataSetsToArray< double >( dataSets );
197 segmentation = boost::shared_ptr< WValueSetBase >(
new WValueSet< double >( 1, dataSets.size(), data, W_DT_DOUBLE ) );
201 WAssert(
false,
"Unknown data type in dataset." );