NAMIC Wiki:ShapeAnalysis:ShapeAnalysisStatFilters
From NAMIC Wiki
Home < NAMIC Wiki:ShapeAnalysis:ShapeAnalysisStatFilters
Discussion for design of statistical filters of study data in itk
General:
- The statistical filter needs to load the data from the input study.
- Since the matching from filename to DataObject type is not unique, the measurement type needs to be supplied. This could be achieved via templating.
- The location in the study hierarchy of the output attachment is left to the filter
- The location of the saving of the output objects is determined by the input study
- A filter should provide the possibility not to overwrite existing data, but rather should write new data on each call modyfying the output with a montonically increasing 'run'-id
- A filter has to supply at least the following routines:
- SetInputStatStudy (study): sets the study to be processed
- SetInputObjectID (TypeID): The object/structure name (e.g. hippocampus) to be processed within the study.
- SetInputMeasurementID (keyword): The object measurement (e.g. RigidAlignedMeshRef) for the objects to be processed within the study
- SetInputPopulationIDList (listOfPopulationID's): Which populations to process. A filter may choose only the first 'n'-populations, e.g. only the first 2 if the filter compares only 2 populations
- SetOutputMeasurementName (keyword): The object measurement (e.g. RigidAlignedMeshRef) for the result of the filter. If the filter has multiple output measurements, then this serves as a base keyword.
- SetOutputPath (path): Path to storage location for output files
- The definition of how a statistical filter should save its data in the StudyObject datastructure can be found here
Simple Example:
- Difference of dimension-wise means of 2 hippocampus mesh populations:
// change the output path in the study to wherever you want the output to go to typedef MeshStatisticalObject<double> objectFeatType; tyepdef MeanDifferenceStatisticalFilter<objectFeatType> statFilter; statFilter::Pointer DiffMeanStatFilter = statFilter::New(); DiffMeanStatFilter->SetInputStatStudy(study); DiffMeanStatFilter->SetInputObjectID("1"); // id of hippocampus DiffMeanStatFilter->SetInputPopulationIDList(popList); DiffMeanStatFilter->SetInputMeasurementID(SubjectInfo::ObjectRigidAlignSurfRef); DiffMeanStatFilter->SetOutputMeasurementID(SubjectInfo::ObjectRigidAlignSurfRef); or DiffMeanStatFilter->SetInputMeasurementID("MyCustomMesh"); DiffMeanStatFilter->SetOutputMeasurementID("DiffCustomMesh"); DiffMeanStatFilter->SetOutputPath("/usr/data/bla/bla/"); DiffMeanStatFilter->Update();
Example of xml file part related to statistical filters
<StatisticalResult> <Name type="string">NonParametricPermutationSignificanceMapFilter</Name> <NumberOfPermutations type="int">10000</NumberOfPermutations> <Population1ID type="string">SZ</Population1ID> <Population2ID type="string">NC</Population2ID> <NumberOfObjects type="unsigned int">1</NumberOfObjects> <Object> <Name type="string">hippocampus</Name> <TypeID type="string">1</ID> <ScaleAlignedMeshRef type="string">/data/hippo/mesh/proc_align_orig_scale/SNPPM_HotellingSignificance_1_SZ_NC.mha</ScaleAlignedMeshRef> </Object> </StatisticalResult>