From 931a42358442f4ee4f314613c991c838d4b4e3b7 Mon Sep 17 00:00:00 2001 From: schaerer Date: Wed, 6 Jan 2010 13:31:56 +0000 Subject: [PATCH] Initial revision --- .cvsignore | 14 + .gitignore | 14 + .vimrc | 4 + CMakeLists.txt | 80 + clitk.doxygen | 1294 +++++++ cmake/FindROOT.cmake1 | 229 ++ cmake/FindROOT.cmake2 | 225 ++ cmake/FindRoot.cmake | 220 ++ cmake/common.cmake | 51 + common/CMakeLists.txt | 50 + common/clitkCommon.cxx | 317 ++ common/clitkCommon.h | 203 ++ common/clitkCommon.txx | 132 + common/clitkIO.h | 34 + common/clitkIOCommon.cxx | 160 + common/clitkIOCommon.h | 3 + common/clitkIOCommon.txx | 86 + common/clitkImageCommon.cxx | 178 + common/clitkImageCommon.h | 90 + common/clitkImageCommon.txx | 259 ++ common/clitkImageToImageGenericFilter.cxx | 90 + common/clitkImageToImageGenericFilter.h | 107 + common/clitkImageUtilities.cxx | 36 + common/clitkImageUtilities.h | 36 + common/clitkImageUtilities.txx | 105 + common/clitkListOfPair.cxx | 66 + common/clitkListOfPair.h | 32 + common/clitkListOfPair.txx | 39 + common/clitkOrientation.cxx | 184 + common/clitkOrientation.h | 56 + common/clitkSignal.cxx | 1095 ++++++ common/clitkSignal.h | 130 + common/clitkTimer.cxx | 81 + common/clitkTimer.h | 53 + common/clitkTransformUtilities.h | 432 +++ common/clitkVfImageIO.cxx | 211 ++ common/clitkVfImageIO.h | 66 + common/clitkVfImageIOFactory.cxx | 47 + common/clitkVfImageIOFactory.h | 69 + common/clitkVoxImageIO.cxx | 265 ++ common/clitkVoxImageIO.h | 65 + common/clitkVoxImageIOFactory.cxx | 48 + common/clitkVoxImageIOFactory.h | 69 + common/vvFromITK.h | 116 + common/vvImage.cxx | 192 ++ common/vvImage.h | 72 + common/vvToITK.h | 110 + fast_make.sh | 69 + filters/CMakeLists.txt | 16 + .../clitkGuerreroVentilationGenericFilter.cxx | 97 + .../clitkGuerreroVentilationGenericFilter.h | 77 + filters/clitkImageArithmGenericFilter.cxx | 67 + filters/clitkImageArithmGenericFilter.h | 98 + filters/clitkImageArithmGenericFilter.txx | 241 ++ filters/clitkImageConvertGenericFilter.cxx | 62 + filters/clitkImageConvertGenericFilter.h | 55 + filters/clitkImageConvertGenericFilter.txx | 129 + filters/clitkImageFillRegionGenericFilter.cxx | 81 + filters/clitkImageFillRegionGenericFilter.h | 89 + filters/clitkImageFillRegionGenericFilter.txx | 146 + filters/clitkImageResampleGenericFilter.cxx | 70 + filters/clitkImageResampleGenericFilter.h | 89 + filters/clitkImageResampleGenericFilter.txx | 192 ++ filters/clitkSplitImageGenericFilter.cxx | 49 + filters/clitkSplitImageGenericFilter.h | 75 + filters/clitkSplitImageGenericFilter.txx | 101 + filters/clitkVFResampleGenericFilter.cxx | 74 + filters/clitkVFResampleGenericFilter.h | 93 + filters/clitkVFResampleGenericFilter.txx | 172 + itk/clitkForwardWarpImageFilter.h | 106 + itk/clitkForwardWarpImageFilter.txx | 499 +++ itk/clitkGenericInterpolator.h | 79 + itk/clitkGenericInterpolator.txx | 75 + itk/clitkGenericVectorInterpolator.h | 70 + itk/clitkGenericVectorInterpolator.txx | 74 + itk/clitkInvertVFFilter.h | 79 + itk/clitkInvertVFFilter.txx | 483 +++ itk/clitkSetBackgroundImageFilter.h | 215 ++ ...itkVectorBSplineDecompositionImageFilter.h | 133 + ...kVectorBSplineDecompositionImageFilter.txx | 418 +++ ...orBSplineDecompositionImageFilterWithOBD.h | 140 + ...BSplineDecompositionImageFilterWithOBD.txx | 429 +++ ...itkVectorBSplineInterpolateImageFunction.h | 201 ++ ...kVectorBSplineInterpolateImageFunction.txx | 563 +++ ...orBSplineInterpolateImageFunctionWithLUT.h | 139 + ...BSplineInterpolateImageFunctionWithLUT.txx | 438 +++ itk/clitkVectorBSplineResampleImageFunction.h | 69 + ...ectorBSplineResampleImageFunctionWithLUT.h | 77 + ...tkBSplineDecompositionImageFilterWithOBD.h | 137 + ...BSplineDecompositionImageFilterWithOBD.txx | 421 +++ ...tkBSplineInterpolateImageFunctionWithLUT.h | 134 + ...InterpolateImageFunctionWithLUT.h.original | 132 + ...BSplineInterpolateImageFunctionWithLUT.txx | 395 +++ ...terpolateImageFunctionWithLUT.txx.original | 409 +++ itk/itkBSplineResampleImageFunctionWithLUT.h | 78 + itk/itkBSplineWeightsCalculator.h | 113 + itk/itkBSplineWeightsCalculator.txx | 273 ++ itk/itkBinaryGuerreroFilter.h | 129 + itk/itkImageToVTKImageFilter.h | 103 + itk/itkImageToVTKImageFilter.txx | 144 + ...ayCastInterpolateImageFunctionWithOrigin.h | 206 ++ ...CastInterpolateImageFunctionWithOrigin.txx | 1569 +++++++++ itk/itkVTKImageToImageFilter.h | 107 + itk/itkVTKImageToImageFilter.txx | 144 + make_meta.sh | 19 + tools/.cvsignore | 1 + tools/CMakeLists.txt | 78 + tools/clitkAffineTransform.cxx | 45 + tools/clitkAffineTransform.ggo | 31 + tools/clitkAffineTransformGenericFilter.cxx | 23 + tools/clitkAffineTransformGenericFilter.h | 105 + tools/clitkAffineTransformGenericFilter.txx | 342 ++ tools/clitkAverageTemporalDimension.cxx | 46 + tools/clitkAverageTemporalDimension.ggo | 12 + ...kAverageTemporalDimensionGenericFilter.cxx | 24 + ...itkAverageTemporalDimensionGenericFilter.h | 97 + ...kAverageTemporalDimensionGenericFilter.txx | 227 ++ .../clitkCorrelationRatioImageToImageMetric.h | 165 + ...litkCorrelationRatioImageToImageMetric.txx | 482 +++ tools/clitkDicomInfo.cxx | 54 + tools/clitkDicomInfo.ggo | 5 + tools/clitkEllipse.cxx | 285 ++ tools/clitkEllipse.h | 82 + tools/clitkGuerreroVentilation.cxx | 48 + tools/clitkGuerreroVentilation.ggo | 13 + tools/clitkImageArithm.cxx | 110 + tools/clitkImageArithm.ggo | 17 + tools/clitkImageConvert.cxx | 71 + tools/clitkImageConvert.ggo | 10 + tools/clitkImageCreate.cxx | 148 + tools/clitkImageCreate.ggo | 21 + tools/clitkImageExtractLine.cxx | 121 + tools/clitkImageExtractLine.ggo | 17 + tools/clitkImageFillRegion.cxx | 119 + tools/clitkImageFillRegion.ggo | 20 + tools/clitkImageInfo.cxx | 65 + tools/clitkImageInfo.ggo | 10 + tools/clitkImageResample.cxx | 163 + tools/clitkImageResample.ggo | 17 + tools/clitkImageWarp.ggo | 16 + tools/clitkInvertVF.cxx | 46 + tools/clitkInvertVF.ggo | 17 + tools/clitkInvertVFGenericFilter.cxx | 22 + tools/clitkInvertVFGenericFilter.h | 99 + tools/clitkInvertVFGenericFilter.txx | 166 + tools/clitkRigidRegistration.cxx | 110 + tools/clitkRigidRegistration.ggo | 55 + tools/clitkSetBackground.cxx | 45 + tools/clitkSetBackground.ggo | 14 + tools/clitkSetBackgroundGenericFilter.cxx | 55 + tools/clitkSetBackgroundGenericFilter.h | 98 + tools/clitkSetBackgroundGenericFilter.txx | 98 + tools/clitkSignalFilter.cxx | 83 + tools/clitkSignalFilter.ggo | 27 + tools/clitkSignalMeanPositionFilter.cxx | 222 ++ tools/clitkSignalMeanPositionFilter.h | 71 + tools/clitkSignalMeanPositionTracking.cxx | 53 + tools/clitkSignalMeanPositionTracking.ggo | 22 + tools/clitkSplitImage.cxx | 51 + tools/clitkSplitImage.ggo | 12 + tools/clitkVFMerge.cxx | 135 + tools/clitkVFMerge.ggo | 14 + tools/clitkVFResample.cxx | 163 + tools/clitkWarpImage.cxx | 45 + tools/clitkWarpImage.ggo | 30 + tools/clitkWarpImageGenericFilter.cxx | 55 + tools/clitkWarpImageGenericFilter.h | 102 + tools/clitkWarpImageGenericFilter.txx | 223 ++ tools/clitkWriteDicomSeries.cxx | 46 + tools/clitkWriteDicomSeries.ggo | 14 + tools/clitkWriteDicomSeriesGenericFilter.cxx | 22 + tools/clitkWriteDicomSeriesGenericFilter.h | 103 + tools/clitkWriteDicomSeriesGenericFilter.txx | 193 ++ tools/clitkZeroVF.cxx | 40 + tools/clitkZeroVF.ggo | 11 + tools/clitkZeroVFGenericFilter.cxx | 35 + tools/clitkZeroVFGenericFilter.h | 62 + tools/clitkZeroVFGenericFilter.txx | 52 + tools/make_new_tool.sh | 8 + vv/.gitignore | 14 + vv/CMakeLists.txt | 294 ++ vv/License.txt | 44 + vv/QTreePushButton.cxx | 41 + vv/QTreePushButton.h | 63 + vv/QVTKWidget.cxx | 3029 +++++++++++++++++ vv/QVTKWidget.h | 310 ++ vv/ReadMe.txt | 66 + vv/icons/GPSup.png | Bin 0 -> 819 bytes vv/icons/NEgrid.png | Bin 0 -> 391 bytes vv/icons/NOgrid.png | Bin 0 -> 411 bytes vv/icons/SEgrid.png | Bin 0 -> 341 bytes vv/icons/SOgrid.png | Bin 0 -> 404 bytes vv/icons/adjustsize.png | Bin 0 -> 1929 bytes vv/icons/crop.png | Bin 0 -> 977 bytes vv/icons/cross.png | Bin 0 -> 174 bytes vv/icons/cursor-uparrow.png | Bin 0 -> 572 bytes vv/icons/cut.png | Bin 0 -> 1323 bytes vv/icons/ducky.bmp | Bin 0 -> 105014 bytes vv/icons/ducky.ico | Bin 0 -> 9662 bytes vv/icons/ducky.png | Bin 0 -> 21711 bytes vv/icons/editgrid.png | Bin 0 -> 751 bytes vv/icons/exit.png | Bin 0 -> 1731 bytes vv/icons/fileopen.png | Bin 0 -> 1662 bytes vv/icons/filesave.png | Bin 0 -> 1205 bytes vv/icons/fusion.png | Bin 0 -> 835 bytes vv/icons/invertcolor.png | Bin 0 -> 3215 bytes vv/icons/open.png | Bin 0 -> 2073 bytes vv/icons/player_pause.png | Bin 0 -> 690 bytes vv/icons/player_play.png | Bin 0 -> 900 bytes vv/icons/player_stop.png | Bin 0 -> 627 bytes vv/icons/rotateright.png | Bin 0 -> 1732 bytes vv/icons/splashscreen.PNG | Bin 0 -> 281367 bytes vv/icons/splashscreen.odp | Bin 0 -> 799924 bytes vv/icons/splashscreen.ppt | Bin 0 -> 1637888 bytes vv/icons/splashscreen2.png | Bin 0 -> 255612 bytes vv/icons/standardbutton-apply-16.png | Bin 0 -> 611 bytes vv/icons/standardbutton-cancel-16.png | Bin 0 -> 689 bytes vv/icons/undo.png | Bin 0 -> 962 bytes vv/make_vv_class.sh | 15 + vv/nkitkXDRImageIO.h | 75 + vv/nkitkXDRImageIOFactory.cxx | 28 + vv/nkitkXDRImageIOFactory.h | 69 + vv/nkitkXDRImageIOReader.cxx | 1676 +++++++++ vv/old/cmake/FindROOT.cmake1 | 229 ++ vv/old/cmake/FindROOT.cmake2 | 225 ++ vv/old/cmake/common.cmake | 42 + vv/qt_ui/vvCropDialog.ui | 382 +++ vv/qt_ui/vvDeformationDialog.ui | 215 ++ vv/qt_ui/vvDicomSeriesSelector.ui | 366 ++ vv/qt_ui/vvDocumentation.ui | 110 + vv/qt_ui/vvDummyWindow.ui | 65 + vv/qt_ui/vvHelpDialog.ui | 166 + vv/qt_ui/vvInfoPanel.ui | 497 +++ vv/qt_ui/vvLandmarksPanel.ui | 143 + vv/qt_ui/vvLinkPanel.ui | 116 + vv/qt_ui/vvMainWindow.ui | 1119 ++++++ vv/qt_ui/vvOverlayPanel.ui | 472 +++ vv/qt_ui/vvProgressDialog.ui | 58 + vv/qt_ui/vvResamplerDialog.ui | 1259 +++++++ vv/qt_ui/vvSegmentationDialog.ui | 159 + vv/qt_ui/vvStructSelector.ui | 81 + vv/qt_ui/vvSurfaceViewerDialog.ui | 74 + vv/scripts/create_mhd_4D.sh | 26 + vv/scripts/create_sequence.sh | 15 + vv/scripts/dcm_sort_by_field.sh | 32 + vv/scripts/dicom_info.sh | 3 + vv/scripts/transfer_patients.sh | 8 + vv/vtkVOXImageWriter.cxx | 158 + vv/vtkVOXImageWriter.h | 36 + vv/vv.cxx | 100 + vv/vvConstants.h | 43 + vv/vvCropDialog.cxx | 97 + vv/vvCropDialog.h | 51 + vv/vvDeformableRegistration.cxx | 180 + vv/vvDeformableRegistration.h | 39 + vv/vvDeformationDialog.cxx | 144 + vv/vvDeformationDialog.h | 43 + vv/vvDocumentation.h | 51 + vv/vvGlyph2D.cxx | 647 ++++ vv/vvGlyph2D.h | 67 + vv/vvGlyphSource.cxx | 178 + vv/vvGlyphSource.h | 57 + vv/vvHelpDialog.h | 51 + vv/vvIcon.rc | 4 + vv/vvIcons.qrc | 29 + vv/vvImageMapToWLColors.cxx | 325 ++ vv/vvImageMapToWLColors.h | 50 + vv/vvImageReader.cxx | 114 + vv/vvImageReader.h | 92 + vv/vvImageReader.txx | 163 + vv/vvImageWarp.cxx | 159 + vv/vvImageWarp.h | 61 + vv/vvImageWriter.cxx | 69 + vv/vvImageWriter.h | 89 + vv/vvImageWriter.txx | 100 + vv/vvInfoPanel.cxx | 149 + vv/vvInfoPanel.h | 61 + vv/vvInit.cxx | 46 + vv/vvInit.h | 35 + vv/vvInteractorStyleNavigator.cxx | 623 ++++ vv/vvInteractorStyleNavigator.h | 109 + vv/vvLandmarks.cxx | 285 ++ vv/vvLandmarks.h | 85 + vv/vvLandmarksGlyph.cxx | 568 ++++ vv/vvLandmarksGlyph.h | 60 + vv/vvLandmarksPanel.cxx | 166 + vv/vvLandmarksPanel.h | 70 + vv/vvLinkPanel.cxx | 193 ++ vv/vvLinkPanel.h | 71 + vv/vvMainWindow.cxx | 2686 +++++++++++++++ vv/vvMainWindow.h | 188 + vv/vvMaximumIntensityProjection.cxx | 77 + vv/vvMaximumIntensityProjection.h | 45 + vv/vvMesh.cxx | 225 ++ vv/vvMesh.h | 91 + vv/vvMeshActor.cxx | 130 + vv/vvMeshActor.h | 69 + vv/vvMeshReader.cxx | 201 ++ vv/vvMeshReader.h | 70 + vv/vvMidPosition.cxx | 206 ++ vv/vvMidPosition.h | 56 + vv/vvOverlayPanel.cxx | 224 ++ vv/vvOverlayPanel.h | 76 + vv/vvProgressDialog.h | 62 + vv/vvQDicomSeriesSelector.cxx | 310 ++ vv/vvQDicomSeriesSelector.h | 76 + vv/vvQProgressDialogITKCommand.cxx | 68 + vv/vvQProgressDialogITKCommand.h | 59 + vv/vvResamplerDialog.cxx | 481 +++ vv/vvResamplerDialog.h | 114 + vv/vvSegmentationDialog.cxx | 626 ++++ vv/vvSegmentationDialog.h | 99 + vv/vvSlicer.cxx | 1185 +++++++ vv/vvSlicer.h | 221 ++ vv/vvSlicerManager.cxx | 994 ++++++ vv/vvSlicerManager.h | 258 ++ vv/vvSlicerManagerCommand.cxx | 566 +++ vv/vvSlicerManagerCommand.h | 74 + vv/vvStructSelector.cxx | 55 + vv/vvStructSelector.h | 52 + vv/vvSurfaceViewerDialog.cxx | 175 + vv/vvSurfaceViewerDialog.h | 66 + vv/vvTemplateFile.cxx | 25 + vv/vvTemplateFile.h | 36 + vv/vvUtils.cxx | 65 + vv/vvUtils.h | 39 + vv/vvs.cxx | 63 + vv/vvs.h | 19 + 328 files changed, 51702 insertions(+) create mode 100644 .cvsignore create mode 100644 .gitignore create mode 100644 .vimrc create mode 100644 CMakeLists.txt create mode 100644 clitk.doxygen create mode 100644 cmake/FindROOT.cmake1 create mode 100644 cmake/FindROOT.cmake2 create mode 100644 cmake/FindRoot.cmake create mode 100644 cmake/common.cmake create mode 100644 common/CMakeLists.txt create mode 100644 common/clitkCommon.cxx create mode 100644 common/clitkCommon.h create mode 100644 common/clitkCommon.txx create mode 100644 common/clitkIO.h create mode 100644 common/clitkIOCommon.cxx create mode 100644 common/clitkIOCommon.h create mode 100644 common/clitkIOCommon.txx create mode 100644 common/clitkImageCommon.cxx create mode 100644 common/clitkImageCommon.h create mode 100644 common/clitkImageCommon.txx create mode 100644 common/clitkImageToImageGenericFilter.cxx create mode 100644 common/clitkImageToImageGenericFilter.h create mode 100644 common/clitkImageUtilities.cxx create mode 100644 common/clitkImageUtilities.h create mode 100644 common/clitkImageUtilities.txx create mode 100644 common/clitkListOfPair.cxx create mode 100644 common/clitkListOfPair.h create mode 100644 common/clitkListOfPair.txx create mode 100644 common/clitkOrientation.cxx create mode 100644 common/clitkOrientation.h create mode 100644 common/clitkSignal.cxx create mode 100644 common/clitkSignal.h create mode 100644 common/clitkTimer.cxx create mode 100644 common/clitkTimer.h create mode 100644 common/clitkTransformUtilities.h create mode 100644 common/clitkVfImageIO.cxx create mode 100644 common/clitkVfImageIO.h create mode 100644 common/clitkVfImageIOFactory.cxx create mode 100644 common/clitkVfImageIOFactory.h create mode 100644 common/clitkVoxImageIO.cxx create mode 100644 common/clitkVoxImageIO.h create mode 100644 common/clitkVoxImageIOFactory.cxx create mode 100644 common/clitkVoxImageIOFactory.h create mode 100644 common/vvFromITK.h create mode 100644 common/vvImage.cxx create mode 100644 common/vvImage.h create mode 100644 common/vvToITK.h create mode 100755 fast_make.sh create mode 100644 filters/CMakeLists.txt create mode 100644 filters/clitkGuerreroVentilationGenericFilter.cxx create mode 100644 filters/clitkGuerreroVentilationGenericFilter.h create mode 100644 filters/clitkImageArithmGenericFilter.cxx create mode 100644 filters/clitkImageArithmGenericFilter.h create mode 100644 filters/clitkImageArithmGenericFilter.txx create mode 100644 filters/clitkImageConvertGenericFilter.cxx create mode 100644 filters/clitkImageConvertGenericFilter.h create mode 100644 filters/clitkImageConvertGenericFilter.txx create mode 100644 filters/clitkImageFillRegionGenericFilter.cxx create mode 100644 filters/clitkImageFillRegionGenericFilter.h create mode 100644 filters/clitkImageFillRegionGenericFilter.txx create mode 100644 filters/clitkImageResampleGenericFilter.cxx create mode 100644 filters/clitkImageResampleGenericFilter.h create mode 100644 filters/clitkImageResampleGenericFilter.txx create mode 100644 filters/clitkSplitImageGenericFilter.cxx create mode 100644 filters/clitkSplitImageGenericFilter.h create mode 100644 filters/clitkSplitImageGenericFilter.txx create mode 100644 filters/clitkVFResampleGenericFilter.cxx create mode 100644 filters/clitkVFResampleGenericFilter.h create mode 100644 filters/clitkVFResampleGenericFilter.txx create mode 100644 itk/clitkForwardWarpImageFilter.h create mode 100644 itk/clitkForwardWarpImageFilter.txx create mode 100644 itk/clitkGenericInterpolator.h create mode 100644 itk/clitkGenericInterpolator.txx create mode 100644 itk/clitkGenericVectorInterpolator.h create mode 100644 itk/clitkGenericVectorInterpolator.txx create mode 100644 itk/clitkInvertVFFilter.h create mode 100644 itk/clitkInvertVFFilter.txx create mode 100644 itk/clitkSetBackgroundImageFilter.h create mode 100644 itk/clitkVectorBSplineDecompositionImageFilter.h create mode 100644 itk/clitkVectorBSplineDecompositionImageFilter.txx create mode 100644 itk/clitkVectorBSplineDecompositionImageFilterWithOBD.h create mode 100644 itk/clitkVectorBSplineDecompositionImageFilterWithOBD.txx create mode 100644 itk/clitkVectorBSplineInterpolateImageFunction.h create mode 100644 itk/clitkVectorBSplineInterpolateImageFunction.txx create mode 100644 itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.h create mode 100644 itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.txx create mode 100644 itk/clitkVectorBSplineResampleImageFunction.h create mode 100644 itk/clitkVectorBSplineResampleImageFunctionWithLUT.h create mode 100644 itk/itkBSplineDecompositionImageFilterWithOBD.h create mode 100644 itk/itkBSplineDecompositionImageFilterWithOBD.txx create mode 100644 itk/itkBSplineInterpolateImageFunctionWithLUT.h create mode 100644 itk/itkBSplineInterpolateImageFunctionWithLUT.h.original create mode 100644 itk/itkBSplineInterpolateImageFunctionWithLUT.txx create mode 100644 itk/itkBSplineInterpolateImageFunctionWithLUT.txx.original create mode 100755 itk/itkBSplineResampleImageFunctionWithLUT.h create mode 100644 itk/itkBSplineWeightsCalculator.h create mode 100644 itk/itkBSplineWeightsCalculator.txx create mode 100644 itk/itkBinaryGuerreroFilter.h create mode 100644 itk/itkImageToVTKImageFilter.h create mode 100644 itk/itkImageToVTKImageFilter.txx create mode 100644 itk/itkRayCastInterpolateImageFunctionWithOrigin.h create mode 100644 itk/itkRayCastInterpolateImageFunctionWithOrigin.txx create mode 100644 itk/itkVTKImageToImageFilter.h create mode 100644 itk/itkVTKImageToImageFilter.txx create mode 100755 make_meta.sh create mode 100644 tools/.cvsignore create mode 100644 tools/CMakeLists.txt create mode 100644 tools/clitkAffineTransform.cxx create mode 100644 tools/clitkAffineTransform.ggo create mode 100644 tools/clitkAffineTransformGenericFilter.cxx create mode 100644 tools/clitkAffineTransformGenericFilter.h create mode 100644 tools/clitkAffineTransformGenericFilter.txx create mode 100644 tools/clitkAverageTemporalDimension.cxx create mode 100644 tools/clitkAverageTemporalDimension.ggo create mode 100644 tools/clitkAverageTemporalDimensionGenericFilter.cxx create mode 100644 tools/clitkAverageTemporalDimensionGenericFilter.h create mode 100644 tools/clitkAverageTemporalDimensionGenericFilter.txx create mode 100644 tools/clitkCorrelationRatioImageToImageMetric.h create mode 100644 tools/clitkCorrelationRatioImageToImageMetric.txx create mode 100644 tools/clitkDicomInfo.cxx create mode 100644 tools/clitkDicomInfo.ggo create mode 100644 tools/clitkEllipse.cxx create mode 100644 tools/clitkEllipse.h create mode 100644 tools/clitkGuerreroVentilation.cxx create mode 100644 tools/clitkGuerreroVentilation.ggo create mode 100644 tools/clitkImageArithm.cxx create mode 100644 tools/clitkImageArithm.ggo create mode 100644 tools/clitkImageConvert.cxx create mode 100644 tools/clitkImageConvert.ggo create mode 100644 tools/clitkImageCreate.cxx create mode 100644 tools/clitkImageCreate.ggo create mode 100644 tools/clitkImageExtractLine.cxx create mode 100644 tools/clitkImageExtractLine.ggo create mode 100644 tools/clitkImageFillRegion.cxx create mode 100644 tools/clitkImageFillRegion.ggo create mode 100644 tools/clitkImageInfo.cxx create mode 100644 tools/clitkImageInfo.ggo create mode 100644 tools/clitkImageResample.cxx create mode 100644 tools/clitkImageResample.ggo create mode 100644 tools/clitkImageWarp.ggo create mode 100644 tools/clitkInvertVF.cxx create mode 100644 tools/clitkInvertVF.ggo create mode 100644 tools/clitkInvertVFGenericFilter.cxx create mode 100644 tools/clitkInvertVFGenericFilter.h create mode 100644 tools/clitkInvertVFGenericFilter.txx create mode 100644 tools/clitkRigidRegistration.cxx create mode 100644 tools/clitkRigidRegistration.ggo create mode 100644 tools/clitkSetBackground.cxx create mode 100644 tools/clitkSetBackground.ggo create mode 100644 tools/clitkSetBackgroundGenericFilter.cxx create mode 100644 tools/clitkSetBackgroundGenericFilter.h create mode 100644 tools/clitkSetBackgroundGenericFilter.txx create mode 100644 tools/clitkSignalFilter.cxx create mode 100644 tools/clitkSignalFilter.ggo create mode 100644 tools/clitkSignalMeanPositionFilter.cxx create mode 100644 tools/clitkSignalMeanPositionFilter.h create mode 100644 tools/clitkSignalMeanPositionTracking.cxx create mode 100644 tools/clitkSignalMeanPositionTracking.ggo create mode 100644 tools/clitkSplitImage.cxx create mode 100644 tools/clitkSplitImage.ggo create mode 100644 tools/clitkVFMerge.cxx create mode 100644 tools/clitkVFMerge.ggo create mode 100644 tools/clitkVFResample.cxx create mode 100644 tools/clitkWarpImage.cxx create mode 100644 tools/clitkWarpImage.ggo create mode 100644 tools/clitkWarpImageGenericFilter.cxx create mode 100644 tools/clitkWarpImageGenericFilter.h create mode 100644 tools/clitkWarpImageGenericFilter.txx create mode 100644 tools/clitkWriteDicomSeries.cxx create mode 100644 tools/clitkWriteDicomSeries.ggo create mode 100644 tools/clitkWriteDicomSeriesGenericFilter.cxx create mode 100644 tools/clitkWriteDicomSeriesGenericFilter.h create mode 100644 tools/clitkWriteDicomSeriesGenericFilter.txx create mode 100644 tools/clitkZeroVF.cxx create mode 100644 tools/clitkZeroVF.ggo create mode 100644 tools/clitkZeroVFGenericFilter.cxx create mode 100644 tools/clitkZeroVFGenericFilter.h create mode 100644 tools/clitkZeroVFGenericFilter.txx create mode 100755 tools/make_new_tool.sh create mode 100644 vv/.gitignore create mode 100644 vv/CMakeLists.txt create mode 100644 vv/License.txt create mode 100644 vv/QTreePushButton.cxx create mode 100644 vv/QTreePushButton.h create mode 100644 vv/QVTKWidget.cxx create mode 100644 vv/QVTKWidget.h create mode 100644 vv/ReadMe.txt create mode 100644 vv/icons/GPSup.png create mode 100644 vv/icons/NEgrid.png create mode 100644 vv/icons/NOgrid.png create mode 100644 vv/icons/SEgrid.png create mode 100644 vv/icons/SOgrid.png create mode 100644 vv/icons/adjustsize.png create mode 100644 vv/icons/crop.png create mode 100644 vv/icons/cross.png create mode 100644 vv/icons/cursor-uparrow.png create mode 100644 vv/icons/cut.png create mode 100755 vv/icons/ducky.bmp create mode 100755 vv/icons/ducky.ico create mode 100644 vv/icons/ducky.png create mode 100644 vv/icons/editgrid.png create mode 100644 vv/icons/exit.png create mode 100644 vv/icons/fileopen.png create mode 100644 vv/icons/filesave.png create mode 100644 vv/icons/fusion.png create mode 100644 vv/icons/invertcolor.png create mode 100644 vv/icons/open.png create mode 100644 vv/icons/player_pause.png create mode 100644 vv/icons/player_play.png create mode 100644 vv/icons/player_stop.png create mode 100644 vv/icons/rotateright.png create mode 100755 vv/icons/splashscreen.PNG create mode 100644 vv/icons/splashscreen.odp create mode 100755 vv/icons/splashscreen.ppt create mode 100644 vv/icons/splashscreen2.png create mode 100644 vv/icons/standardbutton-apply-16.png create mode 100644 vv/icons/standardbutton-cancel-16.png create mode 100644 vv/icons/undo.png create mode 100755 vv/make_vv_class.sh create mode 100644 vv/nkitkXDRImageIO.h create mode 100644 vv/nkitkXDRImageIOFactory.cxx create mode 100644 vv/nkitkXDRImageIOFactory.h create mode 100644 vv/nkitkXDRImageIOReader.cxx create mode 100644 vv/old/cmake/FindROOT.cmake1 create mode 100644 vv/old/cmake/FindROOT.cmake2 create mode 100644 vv/old/cmake/common.cmake create mode 100644 vv/qt_ui/vvCropDialog.ui create mode 100644 vv/qt_ui/vvDeformationDialog.ui create mode 100644 vv/qt_ui/vvDicomSeriesSelector.ui create mode 100644 vv/qt_ui/vvDocumentation.ui create mode 100644 vv/qt_ui/vvDummyWindow.ui create mode 100644 vv/qt_ui/vvHelpDialog.ui create mode 100644 vv/qt_ui/vvInfoPanel.ui create mode 100644 vv/qt_ui/vvLandmarksPanel.ui create mode 100644 vv/qt_ui/vvLinkPanel.ui create mode 100644 vv/qt_ui/vvMainWindow.ui create mode 100644 vv/qt_ui/vvOverlayPanel.ui create mode 100644 vv/qt_ui/vvProgressDialog.ui create mode 100644 vv/qt_ui/vvResamplerDialog.ui create mode 100755 vv/qt_ui/vvSegmentationDialog.ui create mode 100644 vv/qt_ui/vvStructSelector.ui create mode 100644 vv/qt_ui/vvSurfaceViewerDialog.ui create mode 100755 vv/scripts/create_mhd_4D.sh create mode 100755 vv/scripts/create_sequence.sh create mode 100755 vv/scripts/dcm_sort_by_field.sh create mode 100755 vv/scripts/dicom_info.sh create mode 100755 vv/scripts/transfer_patients.sh create mode 100644 vv/vtkVOXImageWriter.cxx create mode 100644 vv/vtkVOXImageWriter.h create mode 100644 vv/vv.cxx create mode 100644 vv/vvConstants.h create mode 100644 vv/vvCropDialog.cxx create mode 100644 vv/vvCropDialog.h create mode 100644 vv/vvDeformableRegistration.cxx create mode 100644 vv/vvDeformableRegistration.h create mode 100644 vv/vvDeformationDialog.cxx create mode 100644 vv/vvDeformationDialog.h create mode 100644 vv/vvDocumentation.h create mode 100644 vv/vvGlyph2D.cxx create mode 100644 vv/vvGlyph2D.h create mode 100644 vv/vvGlyphSource.cxx create mode 100644 vv/vvGlyphSource.h create mode 100644 vv/vvHelpDialog.h create mode 100755 vv/vvIcon.rc create mode 100644 vv/vvIcons.qrc create mode 100644 vv/vvImageMapToWLColors.cxx create mode 100644 vv/vvImageMapToWLColors.h create mode 100644 vv/vvImageReader.cxx create mode 100644 vv/vvImageReader.h create mode 100644 vv/vvImageReader.txx create mode 100644 vv/vvImageWarp.cxx create mode 100644 vv/vvImageWarp.h create mode 100644 vv/vvImageWriter.cxx create mode 100644 vv/vvImageWriter.h create mode 100644 vv/vvImageWriter.txx create mode 100644 vv/vvInfoPanel.cxx create mode 100644 vv/vvInfoPanel.h create mode 100644 vv/vvInit.cxx create mode 100644 vv/vvInit.h create mode 100644 vv/vvInteractorStyleNavigator.cxx create mode 100644 vv/vvInteractorStyleNavigator.h create mode 100644 vv/vvLandmarks.cxx create mode 100644 vv/vvLandmarks.h create mode 100644 vv/vvLandmarksGlyph.cxx create mode 100644 vv/vvLandmarksGlyph.h create mode 100644 vv/vvLandmarksPanel.cxx create mode 100644 vv/vvLandmarksPanel.h create mode 100644 vv/vvLinkPanel.cxx create mode 100644 vv/vvLinkPanel.h create mode 100644 vv/vvMainWindow.cxx create mode 100644 vv/vvMainWindow.h create mode 100644 vv/vvMaximumIntensityProjection.cxx create mode 100644 vv/vvMaximumIntensityProjection.h create mode 100644 vv/vvMesh.cxx create mode 100644 vv/vvMesh.h create mode 100644 vv/vvMeshActor.cxx create mode 100644 vv/vvMeshActor.h create mode 100644 vv/vvMeshReader.cxx create mode 100644 vv/vvMeshReader.h create mode 100644 vv/vvMidPosition.cxx create mode 100644 vv/vvMidPosition.h create mode 100644 vv/vvOverlayPanel.cxx create mode 100644 vv/vvOverlayPanel.h create mode 100644 vv/vvProgressDialog.h create mode 100644 vv/vvQDicomSeriesSelector.cxx create mode 100644 vv/vvQDicomSeriesSelector.h create mode 100644 vv/vvQProgressDialogITKCommand.cxx create mode 100644 vv/vvQProgressDialogITKCommand.h create mode 100644 vv/vvResamplerDialog.cxx create mode 100644 vv/vvResamplerDialog.h create mode 100644 vv/vvSegmentationDialog.cxx create mode 100644 vv/vvSegmentationDialog.h create mode 100644 vv/vvSlicer.cxx create mode 100644 vv/vvSlicer.h create mode 100644 vv/vvSlicerManager.cxx create mode 100644 vv/vvSlicerManager.h create mode 100644 vv/vvSlicerManagerCommand.cxx create mode 100644 vv/vvSlicerManagerCommand.h create mode 100644 vv/vvStructSelector.cxx create mode 100644 vv/vvStructSelector.h create mode 100644 vv/vvSurfaceViewerDialog.cxx create mode 100644 vv/vvSurfaceViewerDialog.h create mode 100644 vv/vvTemplateFile.cxx create mode 100644 vv/vvTemplateFile.h create mode 100644 vv/vvUtils.cxx create mode 100644 vv/vvUtils.h create mode 100644 vv/vvs.cxx create mode 100644 vv/vvs.h diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..6fc3a25 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,14 @@ +CVS +tests_jef +mctools +*.swp +Makefile +tags +doc +CVS +CMakeFiles +CMakeCache.txt +*_ggo.* +*.directory +build/* +*/.vimrc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6fc3a25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +CVS +tests_jef +mctools +*.swp +Makefile +tags +doc +CVS +CMakeFiles +CMakeCache.txt +*_ggo.* +*.directory +build/* +*/.vimrc diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..4bdc3aa --- /dev/null +++ b/.vimrc @@ -0,0 +1,4 @@ +"clitk related standards +" +set makeprg=/home/jschaerer/workspace/cvs/clitk2-new/fast_make.sh +set grepprg=clgrep diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8476152 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,80 @@ +#========================================================= +# CLITK = Command Line ITK +cmake_minimum_required(VERSION 2.4) +cmake_policy(VERSION 2.4) +if(COMMAND cmake_policy) + cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) +PROJECT(clitk) +#========================================================= +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") +#========================================================= +# Find ITK (required) +FIND_PACKAGE(ITK) +IF(ITK_FOUND) + INCLUDE(${ITK_USE_FILE}) + LINK_LIBRARIES(ITKBasicFilters) +ELSE(ITK_FOUND) + MESSAGE(FATAL_ERROR + "Cannot build without ITK. Please set ITK_DIR.") +ENDIF(ITK_FOUND) +#========================================================= +IF(CLITK_BUILD_VV) + FIND_PACKAGE(VTK) + IF(VTK_FOUND) + INCLUDE(${VTK_USE_FILE}) + LINK_LIBRARIES ( + vtkCommon + vtkRendering + vtkIO + vtkFiltering + vtkGraphics + vtkWidgets + vtkImaging + ) + ELSE(VTK_FOUND) + MESSAGE(FATAL_ERROR + "Please set VTK_DIR.") + ENDIF(VTK_FOUND) +ENDIF(CLITK_BUILD_VV) + +#========================================================= +# Find gengetopt +FIND_PATH(CLITK_GENGETOPT gengetopt) +IF (CLITK_GENGETOPT STREQUAL "CLITK_GENGETOPT-NOTFOUND") + MESSAGE("gengetopt not found, please install it (see http://www.gnu.org/software/gengetopt/gengetopt.html)") +ENDIF (CLITK_GENGETOPT STREQUAL "CLITK_GENGETOPT-NOTFOUND") +#========================================================= + +#========================================================= +INCLUDE(cmake/common.cmake) +#========================================================= + +#========================================================= +# Building in the source tree is forbidden +IF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR}) + MESSAGE(FATAL_ERROR "Building in the source tree is not allowed ! Quit; remove the file 'CMakeCache.txt' and the folder 'CMakeFiles' an +d build outside the sources (for example 'mkdir build ; cmake '.") +ENDIF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR}) +#========================================================= + +#========================================================= +OPTION(CLITK_BUILD_VV "Build vv the 4D visualizer (requires VTK and QT)" ON) +OPTION(CLITK_BUILD_TOOLS "Build command-line tools" OFF) +#========================================================= + +include_directories(itk filters) + +#========================================================= +add_subdirectory(common) +add_subdirectory(filters) + +IF (CLITK_BUILD_VV) + add_subdirectory(vv) +ENDIF(CLITK_BUILD_VV) + +IF (CLITK_BUILD_TOOLS) + add_subdirectory(tools) +ENDIF(CLITK_BUILD_TOOLS) + +#========================================================= diff --git a/clitk.doxygen b/clitk.doxygen new file mode 100644 index 0000000..c83ff98 --- /dev/null +++ b/clitk.doxygen @@ -0,0 +1,1294 @@ +# Doxyfile 1.5.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = CLITK + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = common vv + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = YES diff --git a/cmake/FindROOT.cmake1 b/cmake/FindROOT.cmake1 new file mode 100644 index 0000000..4fdc250 --- /dev/null +++ b/cmake/FindROOT.cmake1 @@ -0,0 +1,229 @@ +# - Find ROOT instalation +# This module tries to find the ROOT installation on your system. +# It tries to find the root-config script which gives you all the needed information. +# If the system variable ROOTSYS is set this is straight forward. +# If not the module uses the pathes given in ROOT_CONFIG_SEARCHPATH. +# If you need an other path you should add this path to this varaible. +# The root-config script is then used to detect basically everything else. +# This module defines a number of key variables and macros. + + +MESSAGE("Looking for Root...") +MESSAGE(STATUS "Looking for Root...") + +SET(ROOT_CONFIG_SEARCHPATH + ${SIMPATH}/tools/root/bin + $ENV{ROOTSYS}/bin +) + +SET(ROOT_DEFINITIONS "") + +SET(ROOT_INSTALLED_VERSION_TOO_OLD FALSE) + +SET(ROOT_CONFIG_EXECUTABLE ROOT_CONFIG_EXECUTABLE-NOTFOUND) + +FIND_PROGRAM(ROOT_CONFIG_EXECUTABLE NAMES root-config PATHS + ${ROOT_CONFIG_SEARCHPATH} + NO_SYSTEM_ENVIRONMENT_PATH) + +IF (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + MESSAGE( FATAL_ERROR "ROOT not installed in the searchpath and ROOTSYS is not set. Please + set ROOTSYS or add the path to your ROOT installation in the Macro FindROOT.cmake in the + subdirectory cmake/modules.") +ELSE (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + MESSAGE("root-config found") + STRING(REGEX REPLACE "(^.*)/bin/root-config" "\\1" test ${ROOT_CONFIG_EXECUTABLE}) + SET( ENV{ROOTSYS} ${test}) + set( ROOTSYS ${test}) +ENDIF (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + + +IF (ROOT_CONFIG_EXECUTABLE) + + SET(ROOT_FOUND FALSE) + + EXEC_PROGRAM(${ROOT_CONFIG_EXECUTABLE} ARGS "--version" OUTPUT_VARIABLE ROOTVERSION) + + MESSAGE(STATUS "Looking for Root... - found $ENV{ROOTSYS}/bin/root") + MESSAGE(STATUS "Looking for Root... - version ${ROOTVERSION} ") + + MESSAGE( "Looking for Root... - found $ENV{ROOTSYS}/bin/root") + MESSAGE( "Looking for Root... - version ${ROOTVERSION} ") + + # we need at least version 5.00/00 + IF (NOT ROOT_MIN_VERSION) + SET(ROOT_MIN_VERSION "5.00/00") + ENDIF (NOT ROOT_MIN_VERSION) + + # now parse the parts of the user given version string into variables + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+" "\\1" req_root_major_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" req_root_minor_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+)" "\\1" req_root_patch_vers "${ROOT_MIN_VERSION}") + + # and now the version string given by qmake + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+.*" "\\1" found_root_major_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" found_root_minor_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+).*" "\\1" found_root_patch_vers "${ROOTVERSION}") + + IF (found_root_major_vers LESS 5) + MESSAGE( FATAL_ERROR "Invalid ROOT version \"${ROOTERSION}\", at least major version 4 is required, e.g. \"5.00/00\"") + ENDIF (found_root_major_vers LESS 5) + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers "${req_root_major_vers}*10000 + ${req_root_minor_vers}*100 + ${req_root_patch_vers}") + MATH(EXPR found_vers "${found_root_major_vers}*10000 + ${found_root_minor_vers}*100 + ${found_root_patch_vers}") + + IF (found_vers LESS req_vers) + SET(ROOT_FOUND FALSE) + SET(ROOT_INSTALLED_VERSION_TOO_OLD TRUE) + ELSE (found_vers LESS req_vers) + SET(ROOT_FOUND TRUE) + ENDIF (found_vers LESS req_vers) + +ENDIF (ROOT_CONFIG_EXECUTABLE) + +MESSAGE("root found = "${ROOT_FOUND}) + +IF (ROOT_FOUND) + + # ask root-config for the library dir + # Set ROOT_LIBRARY_DIR + + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--libdir" + OUTPUT_VARIABLE ROOT_LIBRARY_DIR_TMP ) + + IF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + SET(ROOT_LIBRARY_DIR ${ROOT_LIBRARY_DIR_TMP} ) + ELSE(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + MESSAGE("Warning: ROOT_CONFIG_EXECUTABLE reported ${ROOT_LIBRARY_DIR_TMP} as library path,") + MESSAGE("Warning: but ${ROOT_LIBRARY_DIR_TMP} does NOT exist, ROOT must NOT be installed correctly.") + ENDIF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + + # ask root-config for the binary dir + EXEC_PROGRAM(${ROOT_CONFIG_EXECUTABLE} + ARGS "--bindir" + OUTPUT_VARIABLE root_bins ) + SET(ROOT_BINARY_DIR ${root_bins}) + + # ask root-config for the include dir + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--incdir" + OUTPUT_VARIABLE root_headers ) + SET(ROOT_INCLUDE_DIR ${root_headers}) + # CACHE INTERNAL "") + + # ask root-config for the library varaibles + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} +# ARGS "--noldflags --noauxlibs --libs" + ARGS "--glibs" + OUTPUT_VARIABLE root_flags ) + +# STRING(REGEX MATCHALL "([^ ])+" root_libs_all ${root_flags}) +# STRING(REGEX MATCHALL "-L([^ ])+" root_library ${root_flags}) +# REMOVE_FROM_LIST(root_flags "${root_libs_all}" "${root_library}") + + SET(ROOT_LIBRARIES ${root_flags}) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( ROOT_LIBRARY_DIR ROOT_INCLUDE_DIR ROOT_DEFINITIONS) + + # Set ROOT_INCLUDES + SET( ROOT_INCLUDES ${ROOT_INCLUDE_DIR}) + + SET(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${ROOT_LIBRARY_DIR}) + + ####################################### + # + # Check the executables of ROOT + # ( rootcint ) + # + ####################################### + + FIND_PROGRAM(ROOT_CINT_EXECUTABLE + NAMES rootcint + PATHS ${ROOT_BINARY_DIR} + NO_DEFAULT_PATH + ) + +ENDIF (ROOT_FOUND) + + +MESSAGE("icici") + + ########################################### + # + # Macros for building ROOT dictionary + # + ########################################### + +MACRO (ROOT_GENERATE_DICTIONARY_OLD ) + + set(INFILES "") + + foreach (_current_FILE ${ARGN}) + + IF (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*Link.*$") + set(LINKDEF_FILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*Link.*$") + set(INFILES ${INFILES} ${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*Link.*$") + ELSE (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*\\.cxx$") + set(OUTFILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*\\.cxx$") + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*\\.cxx$") + ENDIF (${_current_FILE} MATCHES "^.*\\.h$") + + endforeach (_current_FILE ${ARGN}) + +# MESSAGE("INFILES: ${INFILES}") +# MESSAGE("OutFILE: ${OUTFILE}") +# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") +# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "(^.*).cxx" "\\1.h" bla "${OUTFILE}") +# MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + +# MESSAGE("ROOT_CINT_EXECUTABLE has created the dictionary ${OUTFILE}") + +ENDMACRO (ROOT_GENERATE_DICTIONARY_OLD) + + ########################################### + # + # Macros for building ROOT dictionary + # + ########################################### + +MACRO (ROOT_GENERATE_DICTIONARY INFILES LINKDEF_FILE OUTFILE INCLUDE_DIRS_IN) + + set(INCLUDE_DIRS) + + foreach (_current_FILE ${INCLUDE_DIRS_IN}) + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + endforeach (_current_FILE ${INCLUDE_DIRS_IN}) + + +# MESSAGE("INFILES: ${INFILES}") +# MESSAGE("OutFILE: ${OUTFILE}") +# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") +# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" bla "${OUTFILE}") +# MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + +ENDMACRO (ROOT_GENERATE_DICTIONARY) + +MESSAGE("la") \ No newline at end of file diff --git a/cmake/FindROOT.cmake2 b/cmake/FindROOT.cmake2 new file mode 100644 index 0000000..02b456a --- /dev/null +++ b/cmake/FindROOT.cmake2 @@ -0,0 +1,225 @@ +# - Find ROOT instalation # This module tries to find the ROOT installation on your system. +# It tries to find the root-config script which gives you all the needed information. +# If the system variable ROOTSYS is set this is straight forward. +# If not the module uses the pathes given in ROOT_CONFIG_SEARCHPATH. +# If you need an other path you should add this path to this varaible. +# The root-config script is then used to detect basically everything else. +# This module defines a number of key variables and macros. + + +MESSAGE(STATUS "Looking for Root...") + +SET(ROOT_CONFIG_SEARCHPATH + $ENV{ROOTSYS}/bin + ) + +SET(ROOT_DEFINITIONS "") + +SET(ROOT_INSTALLED_VERSION_TOO_OLD FALSE) + +SET(ROOT_CONFIG_EXECUTABLE ROOT_CONFIG_EXECUTABLE-NOTFOUND) + +FIND_PROGRAM(ROOT_CONFIG_EXECUTABLE NAMES root-config PATHS + ${ROOT_CONFIG_SEARCHPATH} + NO_SYSTEM_ENVIRONMENT_PATH) + +FIND_FILE( RVERSION_H NAMES RVersion.h PATHS $ENV{ROOTSYS}/include ) + +IF ( RVERSION_H ) + FILE( READ ${RVERSION_H} RVERS_CONTENT ) + STRING( REGEX MATCH "#define ROOT_RELEASE \"[^\n]+\"\n" _line "${RVERS_CONTENT}" ) + STRING( REGEX REPLACE "#define ROOT_RELEASE \"([^\n]+)\"\n" "\\1" _match "${_line}") + IF(_match) + SET( ROOTVERSION ${_match}) + ENDIF(_match) +ENDIF( RVERSION_H ) + + +IF (ROOTVERSION) + + SET(ROOT_FOUND FALSE) + + MESSAGE(STATUS "Looking for Root... - found $ENV{ROOTSYS}/bin/root") + MESSAGE(STATUS "Looking for Root... - version ${ROOTVERSION} ") + + # we need at least version 5.00/00 + IF (NOT ROOT_MIN_VERSION) + SET(ROOT_MIN_VERSION "5.00/00") + ENDIF (NOT ROOT_MIN_VERSION) + + # now parse the parts of the user given version string into variables + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+" "\\1" req_root_major_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" req_root_minor_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+)" "\\1" req_root_patch_vers "${ROOT_MIN_VERSION}") + + # and now the version string given by qmake + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+.*" "\\1" found_root_major_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" found_root_minor_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+).*" "\\1" found_root_patch_vers "${ROOTVERSION}") + + IF (found_root_major_vers LESS 5) + MESSAGE( FATAL_ERROR "Invalid ROOT version \"${ROOTERSION}\", at least major version 4 is required, e.g. \"5.00/00\"") + ENDIF (found_root_major_vers LESS 5) + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers "${req_root_major_vers}*10000 + ${req_root_minor_vers}*100 + ${req_root_patch_vers}") + MATH(EXPR found_vers "${found_root_major_vers}*10000 + ${found_root_minor_vers}*100 + ${found_root_patch_vers}") + + IF (found_vers LESS req_vers) + SET(ROOT_FOUND FALSE) + SET(ROOT_INSTALLED_VERSION_TOO_OLD TRUE) + ELSE (found_vers LESS req_vers) + SET(ROOT_FOUND TRUE) + ENDIF (found_vers LESS req_vers) + +ENDIF (ROOTVERSION) + + +IF (ROOT_FOUND) + + # ask root-config for the library dir + # Set ROOT_LIBRARY_DIR + IF( WIN32 ) + SET( ROOT_LIBRARY_DIR $ENV{ROOTSYS}/lib ) + SET( ROOT_INCLUDE_DIR $ENV{ROOTSYS}/include ) + SET( ROOT_BINARY_DIR $ENV{ROOTSYS}/bin ) + + ELSE( WIN32 ) + + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--libdir" + OUTPUT_VARIABLE ROOT_LIBRARY_DIR_TMP ) + + IF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + SET(ROOT_LIBRARY_DIR ${ROOT_LIBRARY_DIR_TMP} ) + ELSE(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + MESSAGE("Warning: ROOT_CONFIG_EXECUTABLE reported ${ROOT_LIBRARY_DIR_TMP} as library path,") + MESSAGE("Warning: but ${ROOT_LIBRARY_DIR_TMP} does NOT exist, ROOT must NOT be installed correctly.") + ENDIF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + + # ask root-config for the binary dir + EXEC_PROGRAM(${ROOT_CONFIG_EXECUTABLE} + ARGS "--bindir" + OUTPUT_VARIABLE root_bins ) + SET(ROOT_BINARY_DIR ${root_bins}) + + # ask root-config for the include dir + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--incdir" + OUTPUT_VARIABLE root_headers ) + SET(ROOT_INCLUDE_DIR ${root_headers}) + # CACHE INTERNAL "") + + # ask root-config for the library varaibles + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--noldflags --noauxlibs --libs" + OUTPUT_VARIABLE root_flags ) + + # STRING(REGEX MATCHALL "([^ ])+" root_libs_all ${root_flags}) + # STRING(REGEX MATCHALL "-L([^ ])+" root_library ${root_flags}) + # REMOVE_FROM_LIST(root_flags "${root_libs_all}" "${root_library}") + + SET(ROOT_LIBRARIES ${root_flags}) + + ENDIF( WIN32 ) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( ROOT_LIBRARY_DIR ROOT_INCLUDE_DIR ROOT_DEFINITIONS) + + # Set ROOT_INCLUDES + SET( ROOT_INCLUDES ${ROOT_INCLUDE_DIR}) + + SET(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${ROOT_LIBRARY_DIR}) + + ####################################### + # + # Check the executables of ROOT + # ( rootcint ) + # + ####################################### + + FIND_PROGRAM(ROOT_CINT_EXECUTABLE + NAMES rootcint + PATHS ${ROOT_BINARY_DIR} + NO_DEFAULT_PATH + ) + +ENDIF (ROOT_FOUND) + + + +########################################### +# +# Macros for building ROOT dictionary +# +########################################### + +MACRO (ROOT_GENERATE_DICTIONARY_OLD ) + + set(INFILES "") + + foreach (_current_FILE ${ARGN}) + + IF (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*Link.*$") + set(LINKDEF_FILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*Link.*$") + set(INFILES ${INFILES} ${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*Link.*$") + ELSE (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*\\.cxx$") + set(OUTFILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*\\.cxx$") + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*\\.cxx$") + ENDIF (${_current_FILE} MATCHES "^.*\\.h$") + + endforeach (_current_FILE ${ARGN}) + + # MESSAGE("INFILES: ${INFILES}") + # MESSAGE("OutFILE: ${OUTFILE}") + # MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") + # MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "(^.*).cxx" "\\1.h" bla "${OUTFILE}") + # MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + + # MESSAGE("ROOT_CINT_EXECUTABLE has created the dictionary ${OUTFILE}") + +ENDMACRO (ROOT_GENERATE_DICTIONARY_OLD) + +########################################### +# +# Macros for building ROOT dictionary +# +########################################### + +MACRO (ROOT_GENERATE_DICTIONARY INFILES LINKDEF_FILE OUTFILE INCLUDE_DIRS_IN) + + set(INCLUDE_DIRS) + + foreach (_current_FILE ${INCLUDE_DIRS_IN}) + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + endforeach (_current_FILE ${INCLUDE_DIRS_IN}) + + + # MESSAGE("INFILES: ${INFILES}") + # MESSAGE("OutFILE: ${OUTFILE}") + # MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") + # MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" bla "${OUTFILE}") + # MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + +ENDMACRO (ROOT_GENERATE_DICTIONARY) + diff --git a/cmake/FindRoot.cmake b/cmake/FindRoot.cmake new file mode 100644 index 0000000..2e3d19e --- /dev/null +++ b/cmake/FindRoot.cmake @@ -0,0 +1,220 @@ +# - Find ROOT instalation +# This module tries to find the ROOT installation on your system. +# It tries to find the root-config script which gives you all the needed information. +# If the system variable ROOTSYS is set this is straight forward. +# If not the module uses the pathes given in ROOT_CONFIG_SEARCHPATH. +# If you need an other path you should add this path to this varaible. +# The root-config script is then used to detect basically everything else. +# This module defines a number of key variables and macros. + + +MESSAGE(STATUS "Looking for Root...") + +SET(ROOT_CONFIG_SEARCHPATH + ${SIMPATH}/tools/root/bin + $ENV{ROOTSYS}/bin +) + +SET(ROOT_DEFINITIONS "") + +SET(ROOT_INSTALLED_VERSION_TOO_OLD FALSE) + +SET(ROOT_CONFIG_EXECUTABLE ROOT_CONFIG_EXECUTABLE-NOTFOUND) + +FIND_PROGRAM(ROOT_CONFIG_EXECUTABLE NAMES root-config PATHS + ${ROOT_CONFIG_SEARCHPATH} + NO_SYSTEM_ENVIRONMENT_PATH) + +IF (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + MESSAGE( FATAL_ERROR "ROOT not installed in the searchpath and ROOTSYS is not set. Please + set ROOTSYS or add the path to your ROOT installation in the Macro FindROOT.cmake in the + subdirectory cmake/modules.") +ELSE (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + STRING(REGEX REPLACE "(^.*)/bin/root-config" "\\1" test ${ROOT_CONFIG_EXECUTABLE}) + SET( ENV{ROOTSYS} ${test}) + set( ROOTSYS ${test}) +ENDIF (${ROOT_CONFIG_EXECUTABLE} MATCHES "ROOT_CONFIG_EXECUTABLE-NOTFOUND") + + +IF (ROOT_CONFIG_EXECUTABLE) + + SET(ROOT_FOUND FALSE) + + EXEC_PROGRAM(${ROOT_CONFIG_EXECUTABLE} ARGS "--version" OUTPUT_VARIABLE ROOTVERSION) + + MESSAGE(STATUS "Looking for Root... - found $ENV{ROOTSYS}/bin/root") + MESSAGE(STATUS "Looking for Root... - version ${ROOTVERSION} ") + + # we need at least version 5.00/00 + IF (NOT ROOT_MIN_VERSION) + SET(ROOT_MIN_VERSION "5.00/00") + ENDIF (NOT ROOT_MIN_VERSION) + + # now parse the parts of the user given version string into variables + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+" "\\1" req_root_major_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" req_root_minor_vers "${ROOT_MIN_VERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+)" "\\1" req_root_patch_vers "${ROOT_MIN_VERSION}") + + # and now the version string given by qmake + STRING(REGEX REPLACE "^([0-9]+)\\.[0-9][0-9]+\\/[0-9][0-9]+.*" "\\1" found_root_major_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.([0-9][0-9])+\\/[0-9][0-9]+.*" "\\1" found_root_minor_vers "${ROOTVERSION}") + STRING(REGEX REPLACE "^[0-9]+\\.[0-9][0-9]+\\/([0-9][0-9]+).*" "\\1" found_root_patch_vers "${ROOTVERSION}") + + IF (found_root_major_vers LESS 5) + MESSAGE( FATAL_ERROR "Invalid ROOT version \"${ROOTERSION}\", at least major version 4 is required, e.g. \"5.00/00\"") + ENDIF (found_root_major_vers LESS 5) + + # compute an overall version number which can be compared at once + MATH(EXPR req_vers "${req_root_major_vers}*10000 + ${req_root_minor_vers}*100 + ${req_root_patch_vers}") + MATH(EXPR found_vers "${found_root_major_vers}*10000 + ${found_root_minor_vers}*100 + ${found_root_patch_vers}") + + IF (found_vers LESS req_vers) + SET(ROOT_FOUND FALSE) + SET(ROOT_INSTALLED_VERSION_TOO_OLD TRUE) + ELSE (found_vers LESS req_vers) + SET(ROOT_FOUND TRUE) + ENDIF (found_vers LESS req_vers) + +ENDIF (ROOT_CONFIG_EXECUTABLE) + + +IF (ROOT_FOUND) + + # ask root-config for the library dir + # Set ROOT_LIBRARY_DIR + + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--libdir" + OUTPUT_VARIABLE ROOT_LIBRARY_DIR_TMP ) + + IF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + SET(ROOT_LIBRARY_DIR ${ROOT_LIBRARY_DIR_TMP} ) + ELSE(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + MESSAGE("Warning: ROOT_CONFIG_EXECUTABLE reported ${ROOT_LIBRARY_DIR_TMP} as library path,") + MESSAGE("Warning: but ${ROOT_LIBRARY_DIR_TMP} does NOT exist, ROOT must NOT be installed correctly.") + ENDIF(EXISTS "${ROOT_LIBRARY_DIR_TMP}") + + # ask root-config for the binary dir + EXEC_PROGRAM(${ROOT_CONFIG_EXECUTABLE} + ARGS "--bindir" + OUTPUT_VARIABLE root_bins ) + SET(ROOT_BINARY_DIR ${root_bins}) + + # ask root-config for the include dir + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} + ARGS "--incdir" + OUTPUT_VARIABLE root_headers ) + SET(ROOT_INCLUDE_DIR ${root_headers}) + # CACHE INTERNAL "") + + # ask root-config for the library varaibles + EXEC_PROGRAM( ${ROOT_CONFIG_EXECUTABLE} +# ARGS "--noldflags --noauxlibs --libs" + ARGS "--glibs" + OUTPUT_VARIABLE root_flags ) + +# STRING(REGEX MATCHALL "([^ ])+" root_libs_all ${root_flags}) +# STRING(REGEX MATCHALL "-L([^ ])+" root_library ${root_flags}) +# REMOVE_FROM_LIST(root_flags "${root_libs_all}" "${root_library}") + + SET(ROOT_LIBRARIES ${root_flags}) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( ROOT_LIBRARY_DIR ROOT_INCLUDE_DIR ROOT_DEFINITIONS) + + # Set ROOT_INCLUDES + SET( ROOT_INCLUDES ${ROOT_INCLUDE_DIR}) + + SET(LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ${ROOT_LIBRARY_DIR}) + + ####################################### + # + # Check the executables of ROOT + # ( rootcint ) + # + ####################################### + + FIND_PROGRAM(ROOT_CINT_EXECUTABLE + NAMES rootcint + PATHS ${ROOT_BINARY_DIR} + NO_DEFAULT_PATH + ) + +ENDIF (ROOT_FOUND) + + + + ########################################### + # + # Macros for building ROOT dictionary + # + ########################################### + +MACRO (ROOT_GENERATE_DICTIONARY_OLD ) + + set(INFILES "") + + foreach (_current_FILE ${ARGN}) + + IF (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*Link.*$") + set(LINKDEF_FILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*Link.*$") + set(INFILES ${INFILES} ${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*Link.*$") + ELSE (${_current_FILE} MATCHES "^.*\\.h$") + IF (${_current_FILE} MATCHES "^.*\\.cxx$") + set(OUTFILE ${_current_FILE}) + ELSE (${_current_FILE} MATCHES "^.*\\.cxx$") + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + ENDIF (${_current_FILE} MATCHES "^.*\\.cxx$") + ENDIF (${_current_FILE} MATCHES "^.*\\.h$") + + endforeach (_current_FILE ${ARGN}) + +# MESSAGE("INFILES: ${INFILES}") +# MESSAGE("OutFILE: ${OUTFILE}") +# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") +# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "(^.*).cxx" "\\1.h" bla "${OUTFILE}") +# MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + +# MESSAGE("ROOT_CINT_EXECUTABLE has created the dictionary ${OUTFILE}") + +ENDMACRO (ROOT_GENERATE_DICTIONARY_OLD) + + ########################################### + # + # Macros for building ROOT dictionary + # + ########################################### + +MACRO (ROOT_GENERATE_DICTIONARY INFILES LINKDEF_FILE OUTFILE INCLUDE_DIRS_IN) + + set(INCLUDE_DIRS) + + foreach (_current_FILE ${INCLUDE_DIRS_IN}) + set(INCLUDE_DIRS ${INCLUDE_DIRS} -I${_current_FILE}) + endforeach (_current_FILE ${INCLUDE_DIRS_IN}) + + +# MESSAGE("INFILES: ${INFILES}") +# MESSAGE("OutFILE: ${OUTFILE}") +# MESSAGE("LINKDEF_FILE: ${LINKDEF_FILE}") +# MESSAGE("INCLUDE_DIRS: ${INCLUDE_DIRS}") + + STRING(REGEX REPLACE "^(.*)\\.(.*)$" "\\1.h" bla "${OUTFILE}") +# MESSAGE("BLA: ${bla}") + SET (OUTFILES ${OUTFILE} ${bla}) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUTFILES} + COMMAND ${ROOT_CINT_EXECUTABLE} + ARGS -f ${OUTFILE} -c -DHAVE_CONFIG_H ${INCLUDE_DIRS} ${INFILES} ${LINKDEF_FILE} DEPENDS ${INFILES}) + +ENDMACRO (ROOT_GENERATE_DICTIONARY) diff --git a/cmake/common.cmake b/cmake/common.cmake new file mode 100644 index 0000000..d2496d0 --- /dev/null +++ b/cmake/common.cmake @@ -0,0 +1,51 @@ +#========================================================= +# Find ggo (gengetopt) files (http://www.gnu.org/software/gengetopt/) +FILE(GLOB ALL_GGO_FILES *.ggo) +#MESSAGE(${ALL_GGO_FILES}) + +FOREACH(GGO_FILE ${ALL_GGO_FILES}) + # MESSAGE(input=${GGO_FILE}) + STRING(REGEX REPLACE "(.*).ggo" + "\\1" GGO_BASEFILENAME + "${GGO_FILE}") + #GET_FILENAME_COMPONENT(GGO_BASEFILENAME ${GGO_FILE} NAME_WE) + GET_FILENAME_COMPONENT(GGO_NAME ${GGO_BASEFILENAME} NAME) + # MESSAGE( base= ${GGO_BASEFILENAME}) + # MESSAGE( name= ${GGO_NAME}) + SET(GGO_H ${GGO_BASEFILENAME}_ggo.h) + #MESSAGE(${GGO_H}) + SET(GGO_C ${GGO_BASEFILENAME}_ggo.c) + #MESSAGE(${GGO_C}) + SET(GGO_OUTPUT ${GGO_H} ${GGO_C}) + ADD_CUSTOM_COMMAND(OUTPUT ${GGO_OUTPUT} + COMMAND gengetopt + ARGS < ${GGO_FILE} --arg-struct-name=gengetopt_args_info_${GGO_NAME} --file-name=${GGO_BASEFILENAME}_ggo -u --conf-parser + DEPENDS ${GGO_FILE} + ) + ENDFOREACH(GGO_FILE) + +#========================================================= +#Set a reasonable build mode default if the user hasn't set any +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif (NOT CMAKE_BUILD_TYPE) + +#========================================================= +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/) +SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/lib) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/base) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/grid) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/gridtools) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/signal) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/pose) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/shearwarp) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/synergy) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/reconstruction) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/register) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/deformableregistration) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/ilr/optim) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/common) +#INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/tests) +#INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/tools) +#========================================================= diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt new file mode 100644 index 0000000..a51a929 --- /dev/null +++ b/common/CMakeLists.txt @@ -0,0 +1,50 @@ +#========================================================= +# Compiled Image types +# Comment/uncomment desired image types + +#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_CHAR") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_UCHAR") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_SHORT") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_USHORT") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_INT") +#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_UINT") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_FLOAT") +#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGETYPE_DOUBLE") + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${ITK_DIR}/gdcm/src/") + +#========================================================= +# Compiled Image Dimension +# Comment/uncomment desired image dimensions + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGEDIM_1") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGEDIM_2") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGEDIM_3") +#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMAGEDIM_4") + +#========================================================= +INCLUDE(${PROJECT_SOURCE_DIR}/cmake/common.cmake) +#========================================================= + +#========================================================= +# make clitk libraries + +SET(clitkCommon_SRC + clitkCommon.cxx + clitkListOfPair.cxx + clitkTimer.cxx + clitkImageCommon.cxx + clitkVoxImageIO.cxx + clitkVoxImageIOFactory.cxx + clitkVfImageIO.cxx + clitkVfImageIOFactory.cxx + clitkOrientation.cxx + clitkSignal.cxx + vvImage.cxx + clitkImageToImageGenericFilter.cxx + ) + +ADD_LIBRARY(clitkCommon STATIC ${clitkCommon_SRC}) + +#ADD_LIBRARY(clitkCommonShared SHARED ${clitkCommon_SRC}) +#SET_TARGET_PROPERTIES(clitkCommonShared PROPERTIES COMPILE_FLAGS -fPIC) diff --git a/common/clitkCommon.cxx b/common/clitkCommon.cxx new file mode 100644 index 0000000..d7ca47a --- /dev/null +++ b/common/clitkCommon.cxx @@ -0,0 +1,317 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef CLITKCOMMON_CXX +#define CLITKCOMMON_CXX + +/** + ------------------------------------------------- + * @file clitkCommon.cxx + * @author David Sarrut + * @date 17 May 2006 07:59:06 + * + * @brief + * + * + -------------------------------------------------*/ + +#include "clitkCommon.h" +#include "itkMacro.h" + +//------------------------------------------------------------------ +// skip line which begin with a sharp '#' +void clitk::skipComment(std::istream & is) +{ + char c; + char line[1024]; + if (is.eof()) return; + is >> c ; + while (is && (c == '#')) { + is.getline (line, 1024); + is >> c; + if (is.eof()) return; + } + is.unget(); +} //// +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +// linear (rough) conversion from Hounsfield Unit to density +double clitk::HU2density(double HU) +{ + return (HU+1000.0)/1000.0; +} //// +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +// Return filename extension +std::string clitk::GetExtension(const std::string& filename) +{ + // This assumes that the final '.' in a file name is the delimiter + // for the file's extension type + const std::string::size_type it = filename.find_last_of( "." ); + // This determines the file's type by creating a new string + // who's value is the extension of the input filename + // eg. "myimage.gif" has an extension of "gif" + std::string fileExt( filename, it+1, filename.length() ); + return( fileExt ); +} //// +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +// Display progression +void clitk::VerboseInProgress(const int nb, const int current, const int percentage) +{ +int stage = current; + int number_of_stages = nb; + + static int exp = -1; + int prec = 4; + int p = (int)(stage*pow(10.0,prec)*1./number_of_stages); + if (p==exp) return; + exp = p; + float s = p * 100. / pow(10.0,prec); + char fmt[128]; + sprintf(fmt,"%%%i.%if%%%%",prec<4?prec:prec+1,prec>3?prec-3:0); + char ch[128]; + + snprintf(ch,2,fmt,s); + //sxsVSCU_MESSAGE(2,ch); + std::cout << ch << std::flush; + for (int i=0;i<(prec>3?prec+2:prec+1);++i) + std::cout << "\b" << std::flush;//sxsVSCU_MESSAGE(2,"\b"); + + /* + + if ((current % (nb/percentage)) == 0) { + std::cout.width(15); + std::cout << "\r" << current << "/" << nb << std::flush; + } + */ +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +// Display progression +void clitk::VerboseInProgressInPercentage(const int nb, const int current, const int percentage) +{ + int stage = current; + int number_of_stages = nb; + + static int exp = -1; + int prec = 4; + int p = (int)(stage*pow(10.0,prec)*1./number_of_stages); + if (p==exp) return; + exp = p; + float s = p * 100. / pow(10.0,prec); + char fmt[128]; + sprintf(fmt,"%%%i.%if%%%%",prec<4?prec:prec+1,prec>3?prec-3:0); + char ch[128]; + + snprintf(ch,2,fmt,s); + //sxsVSCU_MESSAGE(2,ch); + std::cout << ch << std::flush; + for (int i=0;i<(prec>3?prec+2:prec+1);++i) + std::cout << "\b" << std::flush;//sxsVSCU_MESSAGE(2,"\b"); + + /* + if (nb/percentage != 0) { + if ((current % (nb/percentage)) == 0) { + std::cout.width(2); + std::cout << "\r" << (nb/current)*100 << "/100% " << std::flush; + } + } + */ +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +// Convert a pixel type to another (downcast) +template<> +float clitk::PixelTypeDownCast(const double & x) +{ + return (float)x; +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +double clitk::rad2deg(const double anglerad) { + return (anglerad/M_PI*180.0); +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +double clitk::deg2rad(const double angledeg) { + return (angledeg*(M_PI/180.0)); +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +int clitk::GetTypeSizeFromString(const std::string & type) { +#define RETURN_SIZEOF_PIXEL(TYPENAME, TYPE) \ + if (type == #TYPENAME) return sizeof(TYPE); + RETURN_SIZEOF_PIXEL(char, char); + RETURN_SIZEOF_PIXEL(uchar, uchar); + RETURN_SIZEOF_PIXEL(unsigned char, uchar); + RETURN_SIZEOF_PIXEL(unsigned_char, uchar); + RETURN_SIZEOF_PIXEL(short, short); + RETURN_SIZEOF_PIXEL(ushort, ushort); + RETURN_SIZEOF_PIXEL(unsigned_short, ushort); + RETURN_SIZEOF_PIXEL(int, int); + RETURN_SIZEOF_PIXEL(uint, uint); + RETURN_SIZEOF_PIXEL(unsigned_int, uint); + RETURN_SIZEOF_PIXEL(float, float); + RETURN_SIZEOF_PIXEL(double, double); + return 0; +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +template<> +bool clitk::IsSameType(std::string t) { + if ((t==GetTypeAsString()) || (t == "schar")) return true; else return false; +} + +template<> +bool clitk::IsSameType(std::string t) { + if ((t==GetTypeAsString()) || (t == "char")) return true; else return false; +} + +template<> +bool clitk::IsSameType(std::string t) { + if ((t==GetTypeAsString()) || (t == "uchar")) return true; else return false; +} + +template<> +bool clitk::IsSameType(std::string t) { + if ((t==GetTypeAsString()) || (t == "ushort")) return true; else return false; +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +void clitk::FindAndReplace(std::string & line, + const std::string & tofind, + const std::string & replacement) { + int pos = line.find(tofind); + while (pos!= (int)std::string::npos) { + line.replace(pos, tofind.size(), replacement); + pos = line.find(tofind, pos+tofind.size()+1); + } +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +void clitk::FindAndReplace(std::string & line, + const std::vector & tofind, + const std::vector & toreplace) { + for(unsigned int i=0; i & tofind, + const std::vector & toreplace, + std::ofstream & out) { + std::string line; + if (tofind.size() != toreplace.size()) { + std::cerr << "Error' tofind' is size=" << tofind.size() << std::endl; + std::cerr << "... while 'toreplace' is size=" << toreplace.size() << std::endl; + exit(0); + } + while (std::getline(in,line)) { + FindAndReplace(line, tofind, toreplace); + out << line << std::endl; + } +} +//------------------------------------------------------------------ + +//------------------------------------------------------------------ +double clitk::ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, + const itk::ContinuousIndex pointInPlane, + const itk::ContinuousIndex normalPlane) { + // http://mathworld.wolfram.com/Plane.html + // http://mathworld.wolfram.com/Point-PlaneDistance.html + double a = normalPlane[0]; + double b = normalPlane[1]; + double c = normalPlane[2]; + double x0 = pointInPlane[0]; + double y0 = pointInPlane[1]; + double z0 = pointInPlane[2]; + double x = point[0]; + double y = point[1]; + double z = point[2]; + + double norm = sqrt(x0*x0 + y0*y0 + z0*z0); + DD(norm); + double d = -a*x0 - b*y0 - c*z0; + DD(d); + double distance = (a*x + b*y + c*z + d) / norm; + + return distance; +} +//------------------------------------------------------------------ + +//-------------------------------------------------------------------- +// Open a file for reading +void clitk::openFileForReading(std::ifstream & is, const std::string & filename) { + is.open(filename.c_str(), std::ios::in); + if ( is.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for reading): " << filename); + } +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Open a file for writing +void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) { + os.open(filename.c_str(), std::ios::out); + if ( os.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for writing): " << filename); + } +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +double clitk::cotan(double i) { return(1.0 / tan(i)); } +double clitk::invcotan(double x) { + // http://mathworld.wolfram.com/InverseCotangent.html + double y; + if (x<0) { + y = -0.5*M_PI-atan(x); + } + else { + y = 0.5*M_PI-atan(x); + } + return y; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +std::streambuf * clitk_stdcerr_backup; +void clitk::disableStdCerr() { + clitk_stdcerr_backup = std::cerr.rdbuf(); + std::stringstream oss; + std::cerr.rdbuf( oss.rdbuf() ); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::enableStdCerr() { + std::cerr.rdbuf(clitk_stdcerr_backup); +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKCOMMON_CXX */ + diff --git a/common/clitkCommon.h b/common/clitkCommon.h new file mode 100644 index 0000000..1c5f9a0 --- /dev/null +++ b/common/clitkCommon.h @@ -0,0 +1,203 @@ +#ifndef CLITKCOMMON_H +#define CLITKCOMMON_H + +/** + ------------------------------------------------------------------- + * @file clitkCommon.h + * @author David Sarrut + * @date 17 May 2006 07:57:56 + + * @brief + + -------------------------------------------------------------------*/ + +// std include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "itkMacro.h" +#include + +//-------------------------------------------------------------------- +namespace clitk { + +#if defined(WIN32) +#define lrint(x) (floor(x+(x>0) ? 0.5 : -0.5)) +#endif + + typedef unsigned char uchar; + typedef unsigned short ushort; + typedef unsigned int uint; + + //-------------------------------------------------------------------- + // display +#define DD(a) std::cout << #a " = [ " << a << " ]" << std::endl; +#define DDV(a,n) { std::cout << #a " = [ "; for(unsigned int _i_=0; _i_ std::string toString(const T & t); + template std::string toStringVector(const T * t, const int n); + template std::string toStringVector(const T & t, const int n); + template std::string toStringVector(const std::vector & t); + + //-------------------------------------------------------------------- + // Display a progress % + void VerboseInProgress(const int nb, const int current, const int percentage); + void VerboseInProgressInPercentage(const int nb, const int current, const int percentage); + + //-------------------------------------------------------------------- + // Convert a pixel type to another (downcast) + template + TPixelDown PixelTypeDownCast(const TPixelUp & x); + template<> + float PixelTypeDownCast(const double & x); + + //-------------------------------------------------------------------- + // Return the indexes of sorted values in a vector + template struct vectorComparisonLowerThan; + template struct vectorComparisonGreaterThan; + template + void GetSortedIndex(const std::vector & toSort, std::vector & index, bool increasing=true); + + //-------------------------------------------------------------------- + // Return the name of a type as a string + template + std::string GetTypeAsString(); + + //-------------------------------------------------------------------- + // Convert radian / degree + double rad2deg(double anglerad); + double deg2rad(double anglerad); + + //-------------------------------------------------------------------- + int GetTypeSizeFromString(const std::string & type); + + //-------------------------------------------------------------------- + // Special case to handle "signed_char = schar" ... + template + bool IsSameType(std::string t) { return (t==GetTypeAsString()); } + template<> bool IsSameType(std::string t); + template<> bool IsSameType(std::string t); + template<> bool IsSameType(std::string t); + template<> bool IsSameType(std::string t); + + //-------------------------------------------------------------------- + template + std::string CreateListOfTypes(bool last=true) { + return GetTypeAsString(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes()+" and "+CreateListOfTypes(); + else return CreateListOfTypes()+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + + template + std::string CreateListOfTypes(bool last=true) { + if (last) return CreateListOfTypes(false)+" and "+CreateListOfTypes(); + else return CreateListOfTypes(false)+", "+CreateListOfTypes(); + } + //-------------------------------------------------------------------- + + //-------------------------------------------------------------------- + void FindAndReplace(std::string & line, const std::string & tofind, const std::string & replacement); + void FindAndReplace(std::string & line, const std::vector & tofind, const std::vector & toreplace); + void FindAndReplace(std::ifstream & in, const std::vector & tofind, const std::vector & toreplace, std::ofstream & out); + //-------------------------------------------------------------------- + + //-------------------------------------------------------------------- + double ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousIndex point, + const itk::ContinuousIndex pointInPlane, + const itk::ContinuousIndex normalPlane); + + //-------------------------------------------------------------------- + // Open a File for reading/writing + void openFileForReading(std::ifstream & is, const std::string & filename); + void openFileForWriting(std::ofstream & os, const std::string & filename); + + //-------------------------------------------------------------------- + double cotan(double i); + double invcotan(double i); + + //-------------------------------------------------------------------- + void disableStdCerr(); + void enableStdCerr(); + +#include "clitkCommon.txx" + +} // end namespace + +#endif /* end #define CLITKCOMMON_H */ + diff --git a/common/clitkCommon.txx b/common/clitkCommon.txx new file mode 100644 index 0000000..984ef76 --- /dev/null +++ b/common/clitkCommon.txx @@ -0,0 +1,132 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef CLITKCOMMON_TXX +#define CLITKCOMMON_TXX + +/** + ------------------------------------------------- + * @file clitkCommon.txx + * @author David Sarrut + * @date 18 May 2006 + * + -------------------------------------------------*/ + +//-------------------------------------------------------------------- +// Convert float, double ... to string +template +std::string toString(const T & t) { + std::ostringstream myStream; + myStream << t << std::flush; + return(myStream.str()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Convert float*, double* ... to string +template +std::string toStringVector(const T * t, const int n) { + std::ostringstream myStream; + for(int i=0; i(t[i]) << " "; + myStream << clitk::toString(t[n-1]) << std::flush; + return(myStream.str()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Convert float*, double* ... to string +template +std::string toStringVector(const T & t, const int n) { + std::ostringstream myStream; + for(int i=0; i +std::string toStringVector(const std::vector & t) { + return toStringVector(&t[0], t.size()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Convert a pixel type to another (downcast) +template +TPixelDown PixelTypeDownCast(const TPixelUp & x) { + return (TPixelDown)lrint(x); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +struct vectorComparisonLowerThan: public std::binary_function { + vectorComparisonLowerThan(const std::vector & v):vect(v) {}; + bool operator()(int x, int y) { + return (vect[x] < vect[y]); + } + const std::vector & vect; +}; +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +struct vectorComparisonGreaterThan: public std::binary_function { + vectorComparisonGreaterThan(const std::vector & v):vect(v) {}; + bool operator()(int x, int y) { + return (vect[x] > vect[y]); + } + const std::vector & vect; +}; +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void GetSortedIndex(const std::vector & toSort, std::vector & index, bool increasing) { + index.resize(toSort.size()); + for(unsigned int i=0; i(toSort)); + else + std::sort(index.begin(), + index.end(), + vectorComparisonGreaterThan(toSort)); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +std::string GetTypeAsString() { + const std::type_info & PixType = typeid(TPixel); + std::string pixelName; + if (PixType == typeid(char)) pixelName = "char"; // 'plain" char is different from signed char and unsigned char ... + else if (PixType == typeid(signed char)) pixelName = "signed_char"; + else if (PixType == typeid(unsigned char)) pixelName = "unsigned_char"; + else if (PixType == typeid(short)) pixelName = "short"; + else if (PixType == typeid(unsigned short)) pixelName = "unsigned_short"; + else if (PixType == typeid(int)) pixelName = "int"; + else if (PixType == typeid(unsigned int)) pixelName = "unsigned_int"; + else if (PixType == typeid(float)) pixelName = "float"; + else if (PixType == typeid(double)) pixelName = "double"; + else pixelName = PixType.name(); + return pixelName; +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKCOMMON_TXX */ + diff --git a/common/clitkIO.h b/common/clitkIO.h new file mode 100644 index 0000000..cabf00e --- /dev/null +++ b/common/clitkIO.h @@ -0,0 +1,34 @@ +#ifndef CLITKIO_H +#define CLITKIO_H + +/** + ------------------------------------------------------------------- + * @file clitkIO.h + * @author David Sarrut + * @date 17 May 2006 07:57:56 + + * @brief + + -------------------------------------------------------------------*/ + +// std include +#include +#include + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkVoxImageIO.h" +#include "clitkVoxImageIOFactory.h" +#include "clitkVfImageIO.h" +#include "clitkVfImageIOFactory.h" + +//-------------------------------------------------------------------- +// CLITK_INIT +#define CLITK_INIT \ + itk::ImageIOFactory::RegisterBuiltInFactories(); \ + clitk::VoxImageIOFactory::RegisterOneFactory(); \ + clitk::VfImageIOFactory::RegisterOneFactory(); + +#endif /* end #define CLITKIO_H */ + diff --git a/common/clitkIOCommon.cxx b/common/clitkIOCommon.cxx new file mode 100644 index 0000000..7344cb0 --- /dev/null +++ b/common/clitkIOCommon.cxx @@ -0,0 +1,160 @@ +/*========================================================================= + +Program: clitk +Module: $RCSfile: clitkIOCommon.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:32:01 $ +Version: $Revision: 1.1 $ + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKIOCOMMON_CXX +#define CLITKIOCOMMON_CXX + +/** + ================================================= + * @file clitkIOCommon.cxx + * @author David Sarrut + * @date 18 May 2006 11:42:37 + * + * @brief + * + * + =================================================*/ + +// clitk include +#include "clitkIOCommon.h" + +//==================================================================== +// Open a file for reading +void clitk::openFileForReading(std::ifstream & is, const std::string & filename) { + is.open(filename.c_str(), std::ios::in); + if ( is.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for reading): " << filename); + } +} +//==================================================================== + +//==================================================================== +// Open a file for writing +void clitk::openFileForWriting(std::ofstream & os, const std::string & filename) { + os.open(filename.c_str(), std::ios::out); + if ( os.fail() ) { + itkGenericExceptionMacro(<< "Could not open file (for writing): " << filename); + } +} +//==================================================================== + +//==================================================================== +// Read a dicom header +gdcm::File * clitk::readDicomHeader(const std::string & filename, + const bool verbose) { + if (verbose) { + std::cout << "Reading DICOM <" << filename << ">" << std::endl; + } + gdcm::File *header = new gdcm::File(); + header->SetFileName(filename); + header->SetMaxSizeLoadEntry(16384); // required ? + header->Load(); + return header; +} +//==================================================================== + +//==================================================================== +itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename) { + itk::ImageIOBase::Pointer reader = + itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode); + if (!reader) return NULL; + reader->SetFileName(filename); + reader->ReadImageInformation(); + return reader; +} +//==================================================================== + +//==================================================================== +void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level) { + unsigned int dim = header->GetNumberOfDimensions(); + std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + std::vector inputSize; + std::vector inputSpacing; + inputSize.resize(dim); + inputSpacing.resize(dim); + for(unsigned int i=0; iGetSpacing(i); + inputSize[i] = header->GetDimensions(i); + } + int pixelSize = + clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType())); + unsigned int nbOfComponents = header->GetNumberOfComponents(); + if (level == 0) { + os << dim << "D "; + if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName; + else os << pixelTypeName; + os << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSize[i] << "x"; + os << inputSize[dim-1] + << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSpacing[i] << "x"; + os << inputSpacing[dim-1]; + } + else { + os << "Dim = " << dim << "D" << std::endl; + os << "PixelType = " << pixelTypeName << std::endl; + if (nbOfComponents > 1) + os << "Vector = " << nbOfComponents << std::endl; + os << "Size = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i] << " "; + } + os << std::endl; + os << "Spacing = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSpacing[i] << " "; + } + os << std::endl; + if (level > 1) { + os << "# voxels = " << header->GetImageSizeInPixels() << std::endl; + os << "Size (mm) = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i]*inputSpacing[i] << " "; + } + os << "mm" << std::endl; + os << "Volume = "; + double vol=1.0; + for(unsigned int i=0; i< dim; i++) { + vol *= inputSize[i]*inputSpacing[i]/10.0; + } + os << vol << " cc" << std::endl; + int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents; + double memKb = (double)mem/1024.0; + double memMb = (double)mem/1024.0/1024.0; + double memGb = (double)mem/1024.0/1024.0/1024.0; + if (lrint(memKb) <= 0) + os << "Memory = " << mem << " bytes" << std::endl; + else { + if (lrint(memMb) <= 0) + os << "Memory = " << memKb << " Kb (" << mem << " bytes)" << std::endl; + else { + if (lrint(memGb) <= 0) + os << "Memory = " << memMb << " Mb (" << mem << " bytes)" << std::endl; + else + os << "Memory = " << memGb << " Gb (" << mem << " bytes)" << std::endl; + } + } + } + } +} +//==================================================================== + +#endif /* end #define CLITKIO_CXX */ + diff --git a/common/clitkIOCommon.h b/common/clitkIOCommon.h new file mode 100644 index 0000000..69717a6 --- /dev/null +++ b/common/clitkIOCommon.h @@ -0,0 +1,3 @@ + +#include "clitkImageCommon.h" + diff --git a/common/clitkIOCommon.txx b/common/clitkIOCommon.txx new file mode 100644 index 0000000..65ad771 --- /dev/null +++ b/common/clitkIOCommon.txx @@ -0,0 +1,86 @@ +#ifndef CLITKIOCOMMON_TXX +#define CLITKIOCOMMON_TXX + +/** + ================================================= + * @file clitkIOCommon.txx + * @author David Sarrut + * @date 04 Jul 2006 08:34:11 + * + * @brief + * + * + =================================================*/ + +//==================================================================== +// To short the code for reading an image +template +typename ImageType::Pointer readImage(const std::string & filename, const bool verbose) { + typedef itk::ImageFileReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(filename.c_str()); + if (verbose) { + std::cout << "Reading " << filename << " ..." << std::endl; + } + try { + reader->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while reading " << filename + << " " << err << std::endl; + exit(0); + } + return reader->GetOutput(); +} +//==================================================================== + +//==================================================================== +// To short the code for reading an image from several files +template +typename ImageType::Pointer readImage(const std::vector & filenames, + const bool verbose) { + if (filenames.size() == 1) return readImage(filenames[0], verbose); + typedef itk::ImageSeriesReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileNames(filenames); + if (verbose) { + std::cout << "Reading " << filenames[0] << " and others ..." << std::endl; + } + try { + reader->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while reading " << filenames[0] + << " or other files ..." << err << std::endl; + exit(0); + } + return reader->GetOutput(); +} +//==================================================================== + +//==================================================================== +// To short the code for writing an image +template +void writeImage(const typename ImageType::Pointer image, + const std::string & filename, + const bool verbose) { + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(filename.c_str()); + writer->SetInput(image); + if (verbose) { + std::cout << "Writing " << filename << "." << std::endl; + } + try { + writer->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while writing " << filename + << ", the error is : " << err << std::endl; + exit(0); + } +} +//==================================================================== + +#endif /* end #define CLITKIOCOMMON_TXX */ + diff --git a/common/clitkImageCommon.cxx b/common/clitkImageCommon.cxx new file mode 100644 index 0000000..056df94 --- /dev/null +++ b/common/clitkImageCommon.cxx @@ -0,0 +1,178 @@ +/*------------------------------------------------------------------------= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------=*/ + +#ifndef CLITKIMAGECOMMON_CXX +#define CLITKIMAGECOMMON_CXX + +/** + ------------------------------------------------= + * @file clitkImageCommon.cxx + * @author David Sarrut + * @date 02 Oct 2007 14:30:47 + * + * @brief + * + * + ------------------------------------------------=*/ + +#include "clitkImageCommon.h" + +//-------------------------------------------------------------------- +void clitk::ReadImageDimensionAndPixelType(const std::string & filename, + int & dimension, + std::string & pixeType) { + itk::ImageIOBase::Pointer genericReader = + itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode); + if (!genericReader) { + std::cerr << "Image file format unknown while reading " << filename << std::endl; + exit(0); + } + genericReader->SetFileName(filename.c_str()); + genericReader->ReadImageInformation(); + pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType()); + dimension = genericReader->GetNumberOfDimensions(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::ReadImageDimensionAndPixelType(const std::string & filename, + int & dimension, + std::string & pixeType, int & components) { + itk::ImageIOBase::Pointer genericReader = + itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode); + if (!genericReader) { + std::cerr << "Image file format unknown while reading " << filename << std::endl; + exit(0); + } + genericReader->SetFileName(filename.c_str()); + genericReader->ReadImageInformation(); + pixeType = genericReader->GetComponentTypeAsString(genericReader->GetComponentType()); + dimension = genericReader->GetNumberOfDimensions(); + components= genericReader->GetNumberOfComponents(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Read a dicom header +gdcm::File * clitk::readDicomHeader(const std::string & filename, + const bool verbose) { + if (verbose) { + std::cout << "Reading DICOM <" << filename << ">" << std::endl; + } + gdcm::File *header = new gdcm::File(); + header->SetFileName(filename); + header->SetMaxSizeLoadEntry(16384); // required ? + header->Load(); + return header; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +itk::ImageIOBase::Pointer clitk::readImageHeader(const std::string & filename) { + itk::ImageIOBase::Pointer reader = + itk::ImageIOFactory::CreateImageIO(filename.c_str(), itk::ImageIOFactory::ReadMode); + if (!reader) return NULL; + reader->SetFileName(filename); + reader->ReadImageInformation(); + return reader; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level) { + unsigned int dim = header->GetNumberOfDimensions(); + std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + std::vector inputSize; + std::vector inputSpacing; + std::vector inputOrigin; + inputSize.resize(dim); + inputSpacing.resize(dim); + inputOrigin.resize(dim); + for(unsigned int i=0; iGetSpacing(i); + inputSize[i] = header->GetDimensions(i); + inputOrigin[i] = header->GetOrigin(i); + } + int pixelSize = + clitk::GetTypeSizeFromString(header->GetComponentTypeAsString(header->GetComponentType())); + unsigned int nbOfComponents = header->GetNumberOfComponents(); + if (level == 0) { + os << dim << "D "; + if (nbOfComponents !=1) os << nbOfComponents << "x" << pixelTypeName; + else os << pixelTypeName; + os << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSize[i] << "x"; + os << inputSize[dim-1] + << " "; + for(unsigned int i=0; i< dim-1; i++) + os << inputSpacing[i] << "x"; + os << inputSpacing[dim-1]; + } + else { + os << "Dim = " << dim << "D" << std::endl; + os << "PixelType = " << pixelTypeName << std::endl; + if (nbOfComponents > 1) + os << "Vector = " << nbOfComponents << std::endl; + os << "Size = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i] << " "; + } + os << std::endl; + os << "Spacing = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSpacing[i] << " "; + } + os << std::endl; + if (level > 1) { + os << "# voxels = " << header->GetImageSizeInPixels() << std::endl; + os << "Size (mm) = "; + for(unsigned int i=0; i< dim; i++) { + os << inputSize[i]*inputSpacing[i] << " "; + } + os << "mm" << std::endl; + os << "Origin (mm)= "; + for(unsigned int i=0; i< dim; i++) { + os << inputOrigin[i] << " "; + } + os << "mm" << std::endl; + + os << "Volume = "; + double vol=1.0; + for(unsigned int i=0; i< dim; i++) { + vol *= inputSize[i]*inputSpacing[i]/10.0; + } + os << vol << " cc" << std::endl; + int mem = header->GetImageSizeInPixels()*pixelSize*nbOfComponents; + double memKb = (double)mem/1024.0; + double memMb = (double)mem/1024.0/1024.0; + double memGb = (double)mem/1024.0/1024.0/1024.0; + if (lrint(memKb) <= 0) + os << "Memory = " << mem << " bytes" << std::endl; + else { + if (lrint(memMb) <= 0) + os << "Memory = " << memKb << " Kb (" << mem << " bytes)" << std::endl; + else { + if (lrint(memGb) <= 0) + os << "Memory = " << memMb << " Mb (" << mem << " bytes)" << std::endl; + else + os << "Memory = " << memGb << " Gb (" << mem << " bytes)" << std::endl; + } + } + } + } +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGECOMMON_CXX */ + diff --git a/common/clitkImageCommon.h b/common/clitkImageCommon.h new file mode 100644 index 0000000..53e1be6 --- /dev/null +++ b/common/clitkImageCommon.h @@ -0,0 +1,90 @@ +#ifndef CLITKIMAGECOMMON_H +#define CLITKIMAGECOMMON_H + +/** + ------------------------------------------------------------------- + * @file clitkImageCommon.h + * @author David Sarrut + * @date 07 Sep 2007 11:30:10 + + * @brief + + -------------------------------------------------------------------*/ + +// clitk +#include "clitkCommon.h" + +// itk +#include "itkImage.h" +#include "itkImageFileReader.h" +#include "itkImageSeriesReader.h" +#include "itkImageFileWriter.h" +#include "gdcmFile.h" +#include "gdcmFileHelper.h" + + +namespace clitk { + + //-------------------------------------------------------------------- + // New Image creation (no allocation) + template + typename itk::Image::Pointer NewImage1D(int size, double spacing=1.0); + template + typename itk::Image::Pointer NewImage2D(int sx, int sy, double dx=1.0, double dy=1.0); + template + typename itk::Image::Pointer NewImage3D(int sx, int sy, int sz, double dx=1.0, double dy=1.0, double dz=1.0); + template + typename itk::Image::Pointer NewImage4D(int sx, int sy, int sz, int st, double dx=1.0, double dy=1.0, double dz=1.0, double dt=1.0); + + //-------------------------------------------------------------------- + // New Image creation (with allocation) + + //-------------------------------------------------------------------- + // Read an Write image + // template + // typename ImageType::Pointer ReadImage(const std::string & filename, const bool verbose=false); + template + typename ImageType::Pointer readImage(const std::string & filename, const bool verbose=false); + template + typename ImageType::Pointer readImage(const std::vector & filenames, const bool verbose=false); + template + void writeImage(const typename ImageType::Pointer image, const std::string & filename, const bool verbose=false); +// template +// void writeConstImage(const typename ImageType::ConstPointer image, const std::string & filename, const bool verbose=false); + template + void writeImage(const ImageType* image, const std::string & filename, const bool verbose=false); + + //-------------------------------------------------------------------- + // Read/print image header + itk::ImageIOBase::Pointer readImageHeader(const std::string & filename); + void printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level=0); + + //-------------------------------------------------------------------- + // Determine pixetype and dimension of an image file + void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType); + + //-------------------------------------------------------------------- + // Determine pixetype, dimension and number of pixel components of an image file + void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType, int & components); + + //-------------------------------------------------------------------- + // Read a dicom header + gdcm::File * readDicomHeader(const std::string & filename, const bool verbose=false); + + //-------------------------------------------------------------------- + template + int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, + std::vector & listOfIntensities); + template + void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, + const typename MaskImageType::Pointer & mask, + const std::vector & listOfIntensities, + std::map > & mapOfLabelsAndWeights); + +#include "clitkImageCommon.txx" + +} // end namespace + +#endif /* end #define CLITKIMAGECOMMON_H */ + diff --git a/common/clitkImageCommon.txx b/common/clitkImageCommon.txx new file mode 100644 index 0000000..45e8c2e --- /dev/null +++ b/common/clitkImageCommon.txx @@ -0,0 +1,259 @@ +#ifndef CLITKIMAGECOMMON_TXX +#define CLITKIMAGECOMMON_TXX + +/** + ------------------------------------------------- + * @file clitkImageCommon.txx + * @author David Sarrut + * @date 07 Sep 2007 11:34:19 + * + * @brief + * + * + -------------------------------------------------*/ + +//-------------------------------------------------------------------- +template +typename itk::Image::Pointer NewImage1D(int vsize, double vspacing) { + typedef itk::Image ImageType; + typename ImageType::Pointer g = ImageType::New(); + typename ImageType::SizeType size; + size[0] = vsize; + typename ImageType::RegionType region; + region.SetSize(size); + g->SetRegions(region); + typename ImageType::SpacingType spacing; + spacing[0] = vspacing; + g->SetSpacing(spacing); + return g; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename itk::Image::Pointer NewImage2D(int sx, int sy, double dx, double dy) { + typedef itk::Image ImageType; + typename ImageType::Pointer g = ImageType::New(); + typename ImageType::SizeType size; + size[0] = sx; size[1] = sy; + typename ImageType::RegionType region; + region.SetSize(size); + g->SetRegions(region); + typename ImageType::SpacingType spacing; + spacing[0] = dx; spacing[1] = dy; + g->SetSpacing(spacing); + return g; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename itk::Image::Pointer NewImage3D(int sx, int sy, int sz, double dx, double dy, double dz) { + typedef itk::Image ImageType; + typename ImageType::Pointer g = ImageType::New(); + typename ImageType::SizeType size; + size[0] = sx; size[1] = sy; size[2] = sz; + typename ImageType::RegionType region; + region.SetSize(size); + g->SetRegions(region); + typename ImageType::SpacingType spacing; + spacing[0] = dx; spacing[1] = dy; spacing[2] = dz; + g->SetSpacing(spacing); + return g; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename itk::Image::Pointer NewImage4D(int sx, int sy, int sz, int st, double dx, double dy, double dz, double dt) { + typedef itk::Image ImageType; + typename ImageType::Pointer g = ImageType::New(); + typename ImageType::SizeType size; + size[0] = sx; size[1] = sy; size[2] = sz; size[3] = st; + typename ImageType::RegionType region; + region.SetSize(size); + g->SetRegions(region); + typename ImageType::SpacingType spacing; + spacing[0] = dx; spacing[1] = dy; spacing[2] = dz; spacing[3] = dt; + g->SetSpacing(spacing); + return g; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType::Pointer readImage(const std::string & filename, const bool verbose) { + typedef itk::ImageFileReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileName(filename.c_str()); + if (verbose) { + std::cout << "Reading [" << filename << "] ... " << std::endl; + } + try { + reader->Update(); + } + catch(itk::ExceptionObject & err) { + std::cerr << "Exception while reading image [" << filename << "]" << std::endl; + std::cerr << err << std::endl; + exit(0); + } + return reader->GetOutput(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType::Pointer readImage(const std::vector & filenames, + const bool verbose) { + if (filenames.size() == 1) return readImage(filenames[0], verbose); + typedef itk::ImageSeriesReader ReaderType; + typename ReaderType::Pointer reader = ReaderType::New(); + reader->SetFileNames(filenames); + if (verbose) { + std::cout << "Reading " << filenames[0] << " and others ..." << std::endl; + } + try { + reader->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while reading " << filenames[0] + << " or other files ..." << err << std::endl; + exit(0); + } + return reader->GetOutput(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void writeImage(const typename ImageType::Pointer image, const std::string & filename, const bool verbose=false) { + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(filename.c_str()); + writer->SetInput(image); + if (verbose) { + std::cout << "Writing [" << filename << "] ... " << std::endl; + } + try { + writer->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Exception while writing image [" << filename << "]" << std::endl; + std::cerr << err << std::endl; + exit(-1); + } +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void writeImage(const ImageType* image, const std::string & filename, const bool verbose=false) { + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(filename.c_str()); + writer->SetInput(image); + if (verbose) { + std::cout << "Writing [" << filename << "] ... " << std::endl; + } + try { + writer->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Exception while writing image [" << filename << "]" << std::endl; + std::cerr << err << std::endl; + exit(-1); + } +} +// //-------------------------------------------------------------------- + +// //-------------------------------------------------------------------- +// template +// void writeImage(const typename ImageType::ConstPointer image, const std::string & filename, const bool verbose=false) { +// typedef itk::ImageFileWriter WriterType; +// typename WriterType::Pointer writer = WriterType::New(); +// writer->SetFileName(filename.c_str()); +// writer->SetInput(image); +// if (verbose) { +// std::cout << "Writing [" << filename << "] ... " << std::endl; +// } +// try { +// writer->Update(); +// } +// catch( itk::ExceptionObject & err ) { +// std::cerr << "Exception while writing image [" << filename << "]" << std::endl; +// std::cerr << err << std::endl; +// exit(-1); +// } +// } + +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Compute the number of different intensities in an image +template +int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, + std::vector & l) +{ + //std::set listOfIntensities; + std::map listOfIntensities; + // listOfIntensities.resize(0); + typedef itk::ImageRegionConstIterator ConstIteratorType; + ConstIteratorType pi(image, image->GetLargestPossibleRegion()); + pi.Begin(); + while (!pi.IsAtEnd()) { + if (!listOfIntensities[pi.Get()]) listOfIntensities[pi.Get()] = true; + // if (std::find(listOfIntensities.begin(), + // listOfIntensities.end(), + // pi.Get()) == listOfIntensities.end()) { + // listOfIntensities.insert(pi.Get()); + // } + ++pi; + } + + //typename std::set::const_iterator ppi = listOfIntensities.begin(); + typename std::map::const_iterator ppi = listOfIntensities.begin(); + while (ppi != listOfIntensities.end()) { + l.push_back(ppi->first); + ++ppi; + } + + return listOfIntensities.size(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, + const typename MaskImageType::Pointer & mask, + const std::vector & listOfIntensities, + std::map > & mapOfLabelsAndWeights) { + // Check size + if (input->GetLargestPossibleRegion() != mask->GetLargestPossibleRegion()) { + itkGenericExceptionMacro(<< "Input and mask images have not the same size" + << std::endl + << "Input = " << input->GetLargestPossibleRegion() + << std::endl + << "Mask = " << mask->GetLargestPossibleRegion()); + } + + // reset weights list + mapOfLabelsAndWeights.clear(); + + // loop + typedef itk::ImageRegionConstIterator ConstInputIteratorType; + ConstInputIteratorType pi(input, input->GetLargestPossibleRegion()); + typedef itk::ImageRegionConstIterator ConstMaskIteratorType; + ConstMaskIteratorType pm(mask, mask->GetLargestPossibleRegion()); + pi.Begin(); + pm.Begin(); + while (!pi.IsAtEnd()) { + mapOfLabelsAndWeights[pm.Get()][pi.Get()]++; + ++pi; + ++pm; + } +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGECOMMON_TXX */ + diff --git a/common/clitkImageToImageGenericFilter.cxx b/common/clitkImageToImageGenericFilter.cxx new file mode 100644 index 0000000..0428c70 --- /dev/null +++ b/common/clitkImageToImageGenericFilter.cxx @@ -0,0 +1,90 @@ +#include "clitkImageToImageGenericFilter.h" +#include "clitkImageCommon.h" + +//-------------------------------------------------------------------- +clitk::ImageToImageGenericFilter::ImageToImageGenericFilter() : + mIOVerbose(false) +{} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageToImageGenericFilter::SetInputFilenames(const std::vector & filenames) { + mInputFilenames.resize(filenames.size()); + std::copy(filenames.begin(), filenames.end(), mInputFilenames.begin()); +} + +void clitk::ImageToImageGenericFilter::SetInputFilename(const std::string & filename) { + std::vector f; + f.push_back(filename); + SetInputFilenames(f); +} + +void clitk::ImageToImageGenericFilter::AddInputFilename(const std::string & filename) { + mInputFilenames.push_back(filename); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageToImageGenericFilter::SetOutputFilename(const std::string & filename) { + mOutputFilenames.clear(); + mOutputFilenames.push_back(filename); +} +void clitk::ImageToImageGenericFilter::AddOutputFilename(const std::string & filename) +{ + mOutputFilenames.push_back(filename); +} +void clitk::ImageToImageGenericFilter::SetOutputFilenames(const std::vector & filenames) +{ + std::copy(filenames.begin(), filenames.end(), mOutputFilenames.begin()); +} +std::string clitk::ImageToImageGenericFilter::GetOutputFilename() +{ + assert(mOutputFilenames.size() == 1); + return mOutputFilenames.front(); +} +//-------------------------------------------------------------------- +void clitk::ImageToImageGenericFilter::GetInputImageDimensionAndPixelType(unsigned int& dim,\ + std::string& pixeltype,unsigned int& components) +{ + if (mInputFilenames.size()) + { + int comp_temp,dim_temp; //clitkCommonImage takes ints + ReadImageDimensionAndPixelType(mInputFilenames[0], dim_temp, pixeltype,comp_temp); + components=comp_temp; dim=dim_temp; + } + else if (mInputVVImages.size()) + { + pixeltype=mInputVVImages[0]->GetScalarTypeAsString(); + dim=mInputVVImages[0]->GetNumberOfDimensions(); + components=mInputVVImages[0]->GetNumberOfScalarComponents(); + } + else + assert(false); //No input image, shouldn't happen +} +vvImage::Pointer clitk::ImageToImageGenericFilter::GetOutputVVImage () +{ + assert(mOutputVVImages.size()); + return mOutputVVImages[0]; +} + +std::vector clitk::ImageToImageGenericFilter::GetOutputVVImages() +{ + return mOutputVVImages; +} + +void clitk::ImageToImageGenericFilter::SetInputVVImage (vvImage::Pointer input) +{ + mInputVVImages.clear(); + mInputVVImages.push_back(input); +} + +void clitk::ImageToImageGenericFilter::AddInputVVImage (vvImage::Pointer input) +{ + mInputVVImages.push_back(input); +} + +void clitk::ImageToImageGenericFilter::SetInputVVImages (std::vector input) +{ + mInputVVImages=input; +} + diff --git a/common/clitkImageToImageGenericFilter.h b/common/clitkImageToImageGenericFilter.h new file mode 100644 index 0000000..43a62df --- /dev/null +++ b/common/clitkImageToImageGenericFilter.h @@ -0,0 +1,107 @@ +#ifndef CLITKIMAGETOIMAGEGENERICFILTER_H +#define CLITKIMAGETOIMAGEGENERICFILTER_H + +/** + =================================================================== + * @file clitkImageToImageGenericFilter.h + * @author David Sarrut + * @date 05 May 2008 14:40:51 + + * @brief + + ===================================================================*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include + +#include +#include +#include +#include + +namespace clitk { + + class ImageToImageGenericFilter: public itk::Object { + + public: + // constructor - destructor + ImageToImageGenericFilter(); + + // Types + typedef ImageToImageGenericFilter Self; + typedef Object Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // Generic IO + /// Returns the dimension and pixel type of the *first* input + void GetInputImageDimensionAndPixelType(unsigned int& dim, std::string& pixeltype,unsigned int & components); + + // File IO + void SetInputFilename(const std::string & filename); + void AddInputFilename(const std::string & filename); + void SetInputFilenames(const std::vector & filenames); + void SetOutputFilename(const std::string & filename); + void AddOutputFilename(const std::string & filename); + void SetOutputFilenames(const std::vector & filenames); + std::string GetOutputFilename(); + void SetIOVerbose(bool b) { mIOVerbose = b; } + + // VVImage IO + void SetInputVVImage (vvImage::Pointer input); + void SetInputVVImages (std::vector input); + void AddInputVVImage (vvImage::Pointer input); + vvImage::Pointer GetOutputVVImage (); + std::vector GetOutputVVImages (); + + /// Main function to implement + virtual void Update() = 0; + + protected: + /// Call this function to dispatch an output towards the correct sink + template + void SetNextOutput(typename ImageType::Pointer output); + /// Call this function to get the nth itk input image, regardless of input source + template + typename ImageType::Pointer GetInput(unsigned int n); + + std::vector mInputFilenames; + std::list mOutputFilenames; + + bool mIOVerbose; + unsigned int mDim; + std::string mPixelTypeName; + unsigned int mNbOfComponents; + + std::vector mInputVVImages; + std::vector mOutputVVImages; + + }; // end class clitk::ImageToImageGenericFilter + +} // end namespace + +template +void clitk::ImageToImageGenericFilter::SetNextOutput(typename ImageType::Pointer output) +{ + if (mOutputFilenames.size()) + { + clitk::writeImage(output, mOutputFilenames.front(), mIOVerbose); + mOutputFilenames.pop_front(); + } + if (mInputVVImages.size()) //We assume that if a vv image is set as input, we want one as the output + mOutputVVImages.push_back(vvImageFromITK(output)); +} +template +typename ImageType::Pointer clitk::ImageToImageGenericFilter::GetInput(unsigned int n) +{ + if (mInputFilenames.size() > n) + return clitk::readImage(mInputFilenames[n], mIOVerbose); + else if (mInputVVImages.size() > n) + return typename ImageType::Pointer(const_cast(vvImageToITK(mInputVVImages[n]).GetPointer())); + else + assert(false); //No input, this shouldn't happen +} +#endif /* end #define CLITKIMAGETOIMAGEGENERICFILTER_H */ + diff --git a/common/clitkImageUtilities.cxx b/common/clitkImageUtilities.cxx new file mode 100644 index 0000000..4c8a576 --- /dev/null +++ b/common/clitkImageUtilities.cxx @@ -0,0 +1,36 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkImageUtilities.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKIMAGEUTILITIES_CXX +#define CLITKIMAGEUTILITIES_CXX + +/** + ================================================= + * @file clitkImageUtilities.cxx + * @author David Sarrut + * @date 22 Sep 2006 10:39:40 + * + * @brief + * + * + =================================================*/ + +#include "clitkImageUtilities.h" + +#endif /* end #define CLITKIMAGEUTILITIES_CXX */ + diff --git a/common/clitkImageUtilities.h b/common/clitkImageUtilities.h new file mode 100644 index 0000000..74c5b54 --- /dev/null +++ b/common/clitkImageUtilities.h @@ -0,0 +1,36 @@ +#ifndef CLITKIMAGEUTILITIES_H +#define CLITKIMAGEUTILITIES_H + +/** + =================================================================== + * @file clitkImageUtilities.h + * @author David Sarrut + * @date 22 Sep 2006 10:38:36 + + * @brief + + ===================================================================*/ + +// clitk +#include "clitkCommon.h" +#include "clitkImageCommon.h" + +// std +#include +#include +#include + +// itk +#include "itkImageRegionConstIterator.h" + +namespace clitk { + + template + int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, + std::vector & listOfIntensities); + #include "clitkImageUtilities.txx" + +} // end namespace + +#endif /* end #define CLITKIMAGEUTILITIES_H */ + diff --git a/common/clitkImageUtilities.txx b/common/clitkImageUtilities.txx new file mode 100644 index 0000000..884dab9 --- /dev/null +++ b/common/clitkImageUtilities.txx @@ -0,0 +1,105 @@ +#ifndef CLITKIMAGEUTILITIES_TXX +#define CLITKIMAGEUTILITIES_TXX + +/** + ================================================= + * @file clitkImageUtilities.txx + * @author David Sarrut + * @date 22 Sep 2006 10:39:48 + * + * @brief + * + * + =================================================*/ + +//==================================================================== +// Compute the number of different intensities in an image +template +int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, + std::vector & l) +{ + //std::set listOfIntensities; + std::map listOfIntensities; + // listOfIntensities.resize(0); + typedef itk::ImageRegionConstIterator ConstIteratorType; + ConstIteratorType pi(image, image->GetLargestPossibleRegion()); + pi.Begin(); + while (!pi.IsAtEnd()) { + if (!listOfIntensities[pi.Get()]) listOfIntensities[pi.Get()] = true; + // if (std::find(listOfIntensities.begin(), +// listOfIntensities.end(), +// pi.Get()) == listOfIntensities.end()) { +// listOfIntensities.insert(pi.Get()); +// } + ++pi; + } + + //typename std::set::const_iterator ppi = listOfIntensities.begin(); + typename std::map::const_iterator ppi = listOfIntensities.begin(); + while (ppi != listOfIntensities.end()) { + l.push_back(ppi->first); + ++ppi; + } + + return listOfIntensities.size(); +} +//==================================================================== + +//==================================================================== +template +void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, + const typename MaskImageType::Pointer & mask, + const std::vector & listOfIntensities, + std::map > & mapOfLabelsAndWeights) { + // Check size + if (input->GetLargestPossibleRegion() != mask->GetLargestPossibleRegion()) { + itkGenericExceptionMacro(<< "Input and mask images have not the same size" + << std::endl + << "Input = " << input->GetLargestPossibleRegion() + << std::endl + << "Mask = " << mask->GetLargestPossibleRegion()); + } + + // reset weights list + mapOfLabelsAndWeights.clear(); + + // loop + typedef itk::ImageRegionConstIterator ConstInputIteratorType; + ConstInputIteratorType pi(input, input->GetLargestPossibleRegion()); + typedef itk::ImageRegionConstIterator ConstMaskIteratorType; + ConstMaskIteratorType pm(mask, mask->GetLargestPossibleRegion()); + pi.Begin(); + pm.Begin(); + while (!pi.IsAtEnd()) { + mapOfLabelsAndWeights[pm.Get()][pi.Get()]++; + ++pi; + ++pm; + } +} +//==================================================================== + +// //==================================================================== +// template +// typename ImageType::Pointer NewImage3D(int x, int y, int z, float dx, float dy, float dz) { +// typename ImageType::Pointer output = ImageType::New(); +// typename ImageType::RegionType region; +// typename ImageType::SizeType size; +// size[0] = x; +// size[1] = y; +// size[2] = z; +// region.SetSize(size); +// output->SetRegions(region); +// output->Allocate(); +// typename ImageType::SpacingType spacing; +// spacing[0] = dx; +// spacing[1] = dy; +// spacing[2] = dz; +// output->SetSpacing(spacing); +// return output; +// } +// //==================================================================== + + +#endif /* end #define CLITKIMAGEUTILITIES_TXX */ + diff --git a/common/clitkListOfPair.cxx b/common/clitkListOfPair.cxx new file mode 100644 index 0000000..a240985 --- /dev/null +++ b/common/clitkListOfPair.cxx @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------= + + Program: clitk + Module: $RCSfile: clitkListOfPair.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +------------------------------------------------------------------------=*/ + + +#ifndef CLITKLISTOFPAIR_CXX +#define CLITKLISTOFPAIR_CXX + +/** + ------------------------------------------------= + * @file clitkListOfPair.cxx + * @author David Sarrut + * @date 27 Feb 2007 09:55:56 + * + * @brief + * + * + ------------------------------------------------=*/ + +#include "clitkListOfPair.h" + +//-------------------------------------------------------------------- +double clitk::convertValue(double v, + const std::multimap & conversionTable, + bool linear) { + std::map::const_iterator i; + i = conversionTable.lower_bound(v); + if (i == conversionTable.end()) { + std::cerr << "The value " << v << " is out of the table" << std::endl; + exit(0); + } + + double v2 = i->first; + double p2 = i->second; + if (i != conversionTable.begin()) i--; + double v1 = i->first; + double p1 = i->second; + + // interpol + if (!linear) { + if ((v-v1) > (v2-v)) return p2; + else return p1; + } + else { + double w = (v-v1)/(v2-v1); + return p1*(1.0-w)+w*p2; + } +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKLISTOFPAIR_CXX */ + diff --git a/common/clitkListOfPair.h b/common/clitkListOfPair.h new file mode 100644 index 0000000..4e9502f --- /dev/null +++ b/common/clitkListOfPair.h @@ -0,0 +1,32 @@ +#ifndef CLITKLISTOFPAIR_H +#define CLITKLISTOFPAIR_H + +/** + =================================================================== + * @file clitkListOfPair.h + * @author David Sarrut + * @date 27 Feb 2007 09:44:18 + + * @brief + + ===================================================================*/ + +#include "clitkCommon.h" + +namespace clitk { + + //==================================================================== + template + void ReadMap(const std::string & filename, MapType & list, bool inverse=false); + + //==================================================================== + double convertValue(double v, + const std::multimap & conversionTable, + bool linear); + +#include "clitkListOfPair.txx" + +} // end namespace + +#endif /* end #define CLITKLISTOFPAIR_H */ + diff --git a/common/clitkListOfPair.txx b/common/clitkListOfPair.txx new file mode 100644 index 0000000..d711cc5 --- /dev/null +++ b/common/clitkListOfPair.txx @@ -0,0 +1,39 @@ +#ifndef CLITKLISTOFPAIR_TXX +#define CLITKLISTOFPAIR_TXX + +/** + ================================================= + * @file clitkListOfPair.txx + * @author David Sarrut + * @date 27 Feb 2007 09:44:48 + * + * @brief + * + * + =================================================*/ + +//==================================================================== +template +void ReadMap(const std::string & filename, MapType & list, bool inverse) { + std::ifstream is; + clitk::openFileForReading(is, filename); + clitk::skipComment(is); + typedef typename MapType::key_type KType; + KType v1; + typedef typename MapType::mapped_type MType; + MType v2; + while (is) { + is >> v1; + is >> v2; + if (is) { + if (!inverse) list.insert(std::pair(v1,v2)); + else list.insert(std::pair(v2,v1)); + } + clitk::skipComment(is); + } + is.close(); +} +//==================================================================== + +#endif /* end #define CLITKLISTOFPAIR_TXX */ + diff --git a/common/clitkOrientation.cxx b/common/clitkOrientation.cxx new file mode 100644 index 0000000..c887eb7 --- /dev/null +++ b/common/clitkOrientation.cxx @@ -0,0 +1,184 @@ +/*========================================================================= + +Program: clitk +Module: $RCSfile: clitkOrientation.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:32:01 $ +Version: $Revision: 1.1 $ + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKORIENTATION_CXX +#define CLITKORIENTATION_CXX + +/** + ================================================= + * @file clitkOrientation.cxx + * @author David Sarrut + * @date 01 Nov 2006 18:02:49 + * + * @brief + * + * + =================================================*/ + +#include "clitkOrientation.h" + +//==================================================================== +itk::SpatialOrientation::CoordinateTerms clitk::GetOrientation(char c) +{ + if ((c == 'R') || (c == 'r')) return itk::SpatialOrientation::ITK_COORDINATE_Right; + if ((c == 'L') || (c == 'l')) return itk::SpatialOrientation::ITK_COORDINATE_Left; + if ((c == 'P') || (c == 'p')) return itk::SpatialOrientation::ITK_COORDINATE_Posterior; + if ((c == 'A') || (c == 'a')) return itk::SpatialOrientation::ITK_COORDINATE_Anterior; + if ((c == 'I') || (c == 'i')) return itk::SpatialOrientation::ITK_COORDINATE_Inferior; + if ((c == 'S') || (c == 's')) return itk::SpatialOrientation::ITK_COORDINATE_Superior; + std::cerr <<"I don't know the orientation '" << c + << "'. Valid letters are LR/AP/IS (or in lowercase)" << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +bool clitk::CheckOrientation(itk::SpatialOrientation::CoordinateTerms a, + itk::SpatialOrientation::CoordinateTerms b) +{ + if ((a==itk::SpatialOrientation::ITK_COORDINATE_Right) || + (a==itk::SpatialOrientation::ITK_COORDINATE_Left)) { + if ((b==itk::SpatialOrientation::ITK_COORDINATE_Right) || + (b==itk::SpatialOrientation::ITK_COORDINATE_Left)) { + return false; + } + } + if ((a==itk::SpatialOrientation::ITK_COORDINATE_Posterior) || + (a==itk::SpatialOrientation::ITK_COORDINATE_Anterior)) { + if ((b==itk::SpatialOrientation::ITK_COORDINATE_Posterior) || + (b==itk::SpatialOrientation::ITK_COORDINATE_Anterior)) { + return false; + } + } + if ((a==itk::SpatialOrientation::ITK_COORDINATE_Inferior) || + (a==itk::SpatialOrientation::ITK_COORDINATE_Superior)) { + if ((b==itk::SpatialOrientation::ITK_COORDINATE_Inferior) || + (b==itk::SpatialOrientation::ITK_COORDINATE_Superior)) { + return false; + } + } + return true; +} +//==================================================================== + +//==================================================================== +itk::SpatialOrientation::ValidCoordinateOrientationFlags clitk::GetOrientation(char a, char b, char c) +{ + itk::SpatialOrientation::CoordinateTerms f1 = clitk::GetOrientation(a); + itk::SpatialOrientation::CoordinateTerms f2 = clitk::GetOrientation(b); + itk::SpatialOrientation::CoordinateTerms f3 = clitk::GetOrientation(c); + + if (CheckOrientation(f1, f2) && CheckOrientation(f2,f3) && CheckOrientation(f1,f3)) { + return static_cast( + (f1 << itk::SpatialOrientation::ITK_COORDINATE_PrimaryMinor) + + (f2 << itk::SpatialOrientation::ITK_COORDINATE_SecondaryMinor) + + (f3 << itk::SpatialOrientation::ITK_COORDINATE_TertiaryMinor)); + } + std::cerr <<"I don't know the orientation '" << a << b << c + << "'. Valid letters are LR/AP/IS (or in lowercase)" << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +itk::SpatialOrientation::ValidCoordinateOrientationFlags clitk::GetOrientation(const std::string & orient) +{ + if (orient.size() >= 3) return GetOrientation(orient[0], orient[1], orient[2]); + std::cerr <<"I don't know the orientation '" << orient + << "'. Valid string are three letters LR/AP/IS (or in lowercase)" << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +itk::SpatialOrientation::CoordinateTerms clitk::GetOrientation(const int i, const itk::SpatialOrientation::ValidCoordinateOrientationFlags orient) +{ + if (i==0) return static_cast((orient << 24) >> 24); + if (i==1) return static_cast((orient << 16) >> 24); + if (i==2) return static_cast(orient >> 16); + std::cerr <<"Invalid index = " << i << " in GetOrientation" << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +int clitk::WhereIsDimInThisOrientation(const int dim, const itk::SpatialOrientation::ValidCoordinateOrientationFlags flag) { + if (dim ==0) { + for(int i=0; i<3; i++) { + int j = GetOrientation(i, flag); + if ((j == itk::SpatialOrientation::ITK_COORDINATE_Right) || + (j == itk::SpatialOrientation::ITK_COORDINATE_Left)) return i; + } + } + if (dim ==1) { + for(int i=0; i<3; i++) { + int j = GetOrientation(i, flag); + if ((j == itk::SpatialOrientation::ITK_COORDINATE_Anterior) || + (j == itk::SpatialOrientation::ITK_COORDINATE_Posterior)) return i; + } + } + if (dim ==2) { + for(int i=0; i<3; i++) { + int j = GetOrientation(i, flag); + if ((j == itk::SpatialOrientation::ITK_COORDINATE_Superior) || + (j == itk::SpatialOrientation::ITK_COORDINATE_Inferior)) return i; + } + } + return 0; // just to avoid warning +} +//==================================================================== + +//==================================================================== +int clitk::GetDim(const itk::SpatialOrientation::CoordinateTerms t) +{ + if ((t == itk::SpatialOrientation::ITK_COORDINATE_Right) || + (t == itk::SpatialOrientation::ITK_COORDINATE_Left)) return 0; + if ((t == itk::SpatialOrientation::ITK_COORDINATE_Anterior) || + (t == itk::SpatialOrientation::ITK_COORDINATE_Posterior)) return 1; + if ((t == itk::SpatialOrientation::ITK_COORDINATE_Inferior) || + (t == itk::SpatialOrientation::ITK_COORDINATE_Superior)) return 2; + std::cerr <<"Invalid CoordinateTerms = " << t << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +void clitk::FlipPoint(const itk::Point in, + const itk::SpatialOrientation::ValidCoordinateOrientationFlags inFlag, + const itk::SpatialOrientation::ValidCoordinateOrientationFlags outFlag, + const itk::Point & imageSize, + itk::Point & out) +{ + for(int i=0; i<3; i++) { + // DD(i); + itk::SpatialOrientation::CoordinateTerms inT = GetOrientation(i, inFlag); + // DD(inT); + int inDim = GetDim(inT); + // DD(inDim); + int outDim = WhereIsDimInThisOrientation(inDim, outFlag); + // DD(outDim); + // DD(in[i]); + if (inT == GetOrientation(outDim, outFlag)) out[outDim] = in[i]; + else out[outDim] = imageSize[i]-in[i]; + // DD(out[outDim]); + } +} +//==================================================================== + +#endif /* end #define CLITKORIENTATION_CXX */ + diff --git a/common/clitkOrientation.h b/common/clitkOrientation.h new file mode 100644 index 0000000..250e6fe --- /dev/null +++ b/common/clitkOrientation.h @@ -0,0 +1,56 @@ +#ifndef CLITKORIENTATION_H +#define CLITKORIENTATION_H + +/** + =================================================================== + * @file clitkOrientation.h + * @author David Sarrut + * @date 01 Nov 2006 18:00:32 + + * @brief + + ===================================================================*/ + +// itk include +#include "itkSpatialOrientation.h" +#include "itkPoint.h" + +namespace clitk { + + //==================================================================== + // From a letter to an SpatialOrientation::CoordinateTerms + itk::SpatialOrientation::CoordinateTerms GetOrientation(char c); + + //==================================================================== + // From three letters to an SpatialOrientation + itk::SpatialOrientation::ValidCoordinateOrientationFlags GetOrientation(char a, char b, char c); + itk::SpatialOrientation::ValidCoordinateOrientationFlags GetOrientation(const std::string & orient); + + //==================================================================== + // Check that the orientations are differents + bool CheckOrientation(itk::SpatialOrientation::CoordinateTerms a, itk::SpatialOrientation::CoordinateTerms b); + + //==================================================================== + // Get orientation at position i + itk::SpatialOrientation::CoordinateTerms GetOrientation(const int i, const itk::SpatialOrientation::ValidCoordinateOrientationFlags orient); + + //==================================================================== + // Find where is the dimension Dim in this orientaof orientation + int WhereIsDimInThisOrientation(const int dim, const itk::SpatialOrientation::ValidCoordinateOrientationFlags flag); + + //==================================================================== + // Flip point coordinate + void FlipPoint(const itk::Point in, + const itk::SpatialOrientation::ValidCoordinateOrientationFlags inFlag, + const itk::SpatialOrientation::ValidCoordinateOrientationFlags outFlag, + const itk::Point & imageSize, + itk::Point & out); + + //==================================================================== + // Get the dimension of this term + int GetDim(const itk::SpatialOrientation::CoordinateTerms t); + +} // end namespace + +#endif /* end #define CLITKORIENTATION_H */ + diff --git a/common/clitkSignal.cxx b/common/clitkSignal.cxx new file mode 100644 index 0000000..9f65bbf --- /dev/null +++ b/common/clitkSignal.cxx @@ -0,0 +1,1095 @@ +#ifndef CLITKSIGNAL_CXX +#define CLITKSIGNAL_CXX + +#include "clitkSignal.h" + +namespace clitk { + + //--------------------------------------------------------------------- + void Signal::Read(string fileName){ + ifstream signalStream(fileName.c_str()); + SignalValueType point; + if(!signalStream.is_open()){ + std::cerr << "ERROR: Couldn't open file " << fileName << " in Signal::Read" << std::endl; + return; + } + skipComment(signalStream); + while(!signalStream.eof()) { + skipComment(signalStream); + signalStream >> point; + skipComment(signalStream); + m_Data.push_back(point); + // cout << point << endl; + } + signalStream.close(); + SetSamplingPeriod(1.); + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + void Signal::Read(string fileName, int col){ + ifstream signalStream(fileName.c_str()); + SignalValueType point; + if(!signalStream.is_open()){ + std::cerr << "ERROR: Couldn't open file " << fileName << " in Signal::Read" << std::endl; + return; + } + skipComment(signalStream); + while(!signalStream.eof()) { + skipComment(signalStream); + + // Read one line + std::string line; + std::getline(signalStream, line); + + // Get column nb col + istringstream iss(line); + for(int i=0; i> sub; + } + iss >> point; + if (!iss) { + std::cerr << "ERROR: no col n" << col << " in the line '" << line << "' ?" << std::endl; + exit(0); + } + skipComment(signalStream); + m_Data.push_back(point); + // cout << point << endl; + } + signalStream.close(); + SetSamplingPeriod(1.); + } + //--------------------------------------------------------------------- + + + + //--------------------------------------------------------------------- + //Convert 1D image to signal + Signal Signal::ConvertImageToSignal( Signal::ImageType::Pointer image) + { + //empty signal + Signal signal; + + //make an image iterator + itk::ImageRegionConstIterator it(image,image->GetLargestPossibleRegion()); + it.Begin(); + + //copy + while(!it.IsAtEnd()) + { + signal.push_back(it.Get()); + ++it; + } + + //Spacing + signal.SetSamplingPeriod(image->GetSpacing()[0]); + + return signal; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + //Convert 1D signal to image + Signal::ImageType::Pointer Signal::ConvertSignalToImage(Signal signal) + { + //empty image + ImageType::Pointer image =ImageType::New(); + ImageType::RegionType region; + ImageType::RegionType::IndexType index; + index[0]=0; + ImageType::RegionType::SizeType size; + size[0]=signal.size(); + + region.SetIndex(index); + region.SetSize(size); + + image->SetRegions(region); + image->Allocate(); + + //make an image iterator + itk::ImageRegionIterator mIt(image,image->GetLargestPossibleRegion()); + mIt.Begin(); + + //make a signal iterator + Signal::const_iterator sIt=signal.begin(); + + //copy + while(sIt!=signal.end()) + { + mIt.Set(*sIt); + sIt++;++mIt; + } + + + //spacing + ImageType::SpacingType spacing; + spacing[0]=signal.GetSamplingPeriod(); + image->SetSpacing(spacing); + + return image; + + } + //--------------------------------------------------------------------- + + + + //--------------------------------------------------------------------- + void Signal::Write(const string fileName){ + ofstream signalStream(fileName.c_str()); + if(!signalStream.is_open()){ + cerr << "ERROR: Couldn't open file " << fileName << " in Signal::Write" << endl; + return; + } + + iterator it=begin(); + while(it!=end()) { + signalStream << *it << endl; + it++; + } + signalStream.close(); + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal & Signal::operator/=(Signal & div){ + if(size()!= div.size()) + { + std::cerr << "Error: signal size must be the same!" << std::endl; + return *this; + } + iterator it=begin(); + iterator itD; + itD=div.begin(); + while(it!=end()) + { + if(*itD!=0) + *it/=*itD; + else + cerr << "Division by 0 in operator/= skipped" << endl; + it++;itD++; + } + return *this; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal & Signal::operator*=(Signal & mul){ + if(size()!= mul.size()) + { + std::cerr << "Error: signal size must be the same!" << std::endl; + return *this; + } + iterator it=begin(); + iterator itD; + itD=mul.begin(); + while(it!=end()){ + *it *= *itD; + it++;itD++; + } + return *this; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::Normalize(double newMin,double newMax){ + Signal temp (m_SamplingPeriod); + vector extrema=GetGlobalMinMax(); + iterator itSig=begin(); + while(itSig!=end()){ + temp.push_back( ((*itSig)-extrema[0])*(newMax-newMin)/(extrema[1]-extrema[0]) + newMin ); + itSig++; + } + return temp; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + vector Signal::GetGlobalMinMax() const { + vector extrema(2); + if(size()==0){ + cerr << "ERROR: GetExtrema / No signal" << endl; + return extrema; + } + extrema[0]=m_Data[0]; + extrema[1]=m_Data[0]; + for(unsigned int i=1;im_Data[i]) extrema[0]=m_Data[i]; + if(extrema[1](i)-static_cast(length)); j<=min(size(), i+length); j++) + { + accumulator+=m_Data[j]; + scale++; + } + temp.push_back(accumulator/scale); + } + return temp; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::GaussLikeFilter ( ) { + + Signal temp(m_SamplingPeriod); + if (size()<2) + return *this; + else + { + //first sample: mirrorring BC + temp.push_back((2.*m_Data[0]+2*m_Data[1])/4.); + + //middle samples + for (unsigned int i=1; i (size())*sampPeriod); + + //forward fft with empty fft + if(fft.size()==0) OneDForwardFourier(*this, fft); + + //remove the frequencies + for(unsigned int i=0;i(0.,0.); + + //backward with remaining frequencies + OneDBackwardFourier(fft,temp); + return temp; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::LowPassFilter (double sampPeriod, double cutOffFrequency ) + { + //output + Signal temp(m_SamplingPeriod); + temp.resize(size()); + + //the fft + SIGNAL_FFT_TYPE fft; + + //calculate the cut off frequency + unsigned int samp=lrint(cutOffFrequency*static_cast(size())*sampPeriod); + + //forward fft with empty fft + if(fft.size()==0) OneDForwardFourier(*this, fft); + unsigned int fsize=fft.size(); + + //remove the frequencies + unsigned int limit=min (samp, fsize); + for(unsigned int i=limit;i(0.,0.); + + //backward with remaining frequencies + OneDBackwardFourier(fft,temp); + return temp; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + void Signal::OneDForwardFourier(const Signal& input, SIGNAL_FFT_TYPE & fft) + { + //Create output array + fft.resize(input.size()/2+1); + //Temp copy + double *tempCopy=new double[size()]; + copy(begin(), end(), tempCopy); + + //Forward Fourier Transform + fftw_plan p; + p=fftw_plan_dft_r2c_1d(size(),tempCopy,reinterpret_cast(&(fft[0])),FFTW_ESTIMATE); + fftw_execute(p); + fftw_destroy_plan(p); + //delete tempCopy; + return; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + void Signal::OneDBackwardFourier(SIGNAL_FFT_TYPE & fft, Signal &output) + { + + //Backward + fftw_plan p; + p=fftw_plan_dft_c2r_1d(output.size(),reinterpret_cast(&(fft[0])),&(output[0]),FFTW_ESTIMATE); + fftw_execute(p); + fftw_destroy_plan(p); + + vector::iterator it=output.begin(); + while(it!=output.end()){ + *it /= (double)output.size(); + it++; + } + return; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + double Signal::MaxFreq(const Signal &sig,SIGNAL_FFT_TYPE & fft) + { + + if(fft.size()==0) OneDForwardFourier(sig,fft); + int posMax=1; + double amplitude, amplitudeMax=abs(fft[1]); + for(unsigned int i=1;iamplitudeMax){ + posMax=i; + amplitudeMax=amplitude; + } + } + return ((double)(posMax)/((double)sig.size()*sig.GetSamplingPeriod())); + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::DetectLocalExtrema(unsigned int width) + { + Signal temp(m_SamplingPeriod); + bool isMin, isMax; + unsigned int upper, lower; + + //has to be at least 1 + width=max(static_cast(width), 1); + + for(unsigned int i=0 ; i < size() ; i++){ + isMax=true; + isMin=true; + + for(unsigned int j=1; j< width+1; j++) + { + //set the boundaries + upper = min( size(), i+j); + lower = max( static_cast(0), (int)i-(int)j); + + //check if max + if( ! (m_Data[i] >= m_Data[lower] && m_Data[i] >= m_Data[upper]))isMax=false; + + //check if min + if( ! (m_Data[i]<= m_Data[lower] && m_Data[i] <= m_Data[upper])) isMin=false; + + //if neither, go to the next value + if( (!isMax) && (!isMin)) break; + } + + if (isMax) temp.push_back(1); + else if (isMin) temp.push_back(0); + else temp.push_back(0.5); + } + return temp; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::LimPhase() + { + + //phase is defined as going from 0 to 1 linearly between end expiration + Signal phase(m_SamplingPeriod); + phase.resize(size()); + + unsigned int firstBeginCycle=0; + unsigned int firstEndCycle=0; + unsigned int beginCycle=0; + + //========================================= + //Search the first value in extrema not 0.5 + while(m_Data[beginCycle]!=1) + { + beginCycle++; + } + + //We search the corresponding end + unsigned int endCycle=beginCycle+1; + while(endCycle != size() && m_Data[endCycle]!=1){ + endCycle++; + + } + + //============================================================ + //Calculate phase at the beginning (before the first extremum) + for(unsigned int i=0 ; i 1) + { + phase[i] = (double)(i-0)/(double)(beginCycle-0); + } + //copy the phase values later + else + { + firstBeginCycle=beginCycle; + firstEndCycle=endCycle; + } + + } + + //=================================================================== + //Middle part + while(endCycle != size()){ + + //fill between extrema + for(unsigned int i=beginCycle ; i 1){ + + //make the last part go till 1 + phase[i] = (double)(i-endCycle)/(double)(size()-endCycle); + } + + //the last part is shorter, copy the last cycle values + else{ + phase[i] = phase[i -(endCycle-beginCycle)]; + } + } + + //=================================================================== + //check it some remains to be copied in the beginning + if (firstBeginCycle!=0) + { + for(unsigned int i=0 ; i 1) + { + phase[i] = (double)(i-0)/(double)(beginCycle-0); + } + //copy the phase values later + else + { + firstBeginCycle=beginCycle; + firstEndCycle=endCycle; + } + + } + + //=================================================================== + //Middle part + while(endCycle != size()){ + + cycleCounter++; + //fill between extrema + for(unsigned int i=beginCycle ; i 1){ + + //make the last part go till 1 + phase[i] = (double)cycleCounter+(double)(i-endCycle)/(double)(size()-endCycle); + } + + //the last part is shorter, copy the last cycle values + else{ + phase[i] = phase[i -(endCycle-beginCycle)]+1; + } + } + + //=================================================================== + //check it some remains to be copied in the beginning + if (firstBeginCycle!=0) + { + for(unsigned int i=0 ; iMonPhase(); + + //Create an empty signal + Signal phase(size(), -1); + phase.SetSamplingPeriod(m_SamplingPeriod); + + //Fill in the values at the extrema position + iterator phaseIt=phase.begin(); + iterator monPhaseIt=monPhase.begin(); + iterator extremaIt =begin(); + while (extremaIt!= end()) + { + if (*extremaIt==0.) *phaseIt=eIPhaseValue+floor(*monPhaseIt); + else if (*extremaIt==1.) *phaseIt=eEPhaseValue+floor(*monPhaseIt); + extremaIt++; phaseIt++;monPhaseIt++; + } + + return phase; + + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::LinearlyInterpolateScatteredValues() + { + //Linearly interpolate the values in between + unsigned int i=0; + unsigned int beginCycle=0; + unsigned int endCycle=0; + + //Create a new signal + Signal temp(size(),-1); + temp.SetSamplingPeriod(m_SamplingPeriod); + + //start from the first value + while (m_Data[i]==-1)i++; + beginCycle=i; + i++; + + //Go to the next + while ( (m_Data[i]==-1) && (i PointSetType; +// PointSetType::Pointer pointSet=PointSetType::New(); +// typedef PointSetType::PointType PointType; + +// unsigned int i=0; +// unsigned int pointIndex=0; +// while (i< size()) +// { +// if(m_Data[i]!=-1) +// { +// PointType p; +// p[0]= i;//JV spacing is allways 1 +// pointSet->SetPoint( pointIndex, p ); +// pointSet->SetPointData( pointIndex, m_Data[i] ); +// pointIndex++; +// } +// i++; +// } + +// //define the output signal properties +// ImageType::RegionType::SizeType outputSize; +// outputSize[0]= size(); +// ImageType::PointType outputOrigin; +// outputOrigin[0]=0.0;//JV may need to be changed +// ImageType::SpacingType outputSpacing; +// outputSpacing[0]=1; //JV add relation to the original signal spacing + +// //Convert +// typedef itk::BSplineScatteredDataPointSetToImageFilter< PointSetType, VectorImageType > PointSetToImageFilterType; +// PointSetToImageFilterType::Pointer pointSetToImageFilter= PointSetToImageFilterType::New(); +// pointSetToImageFilter->SetInput(pointSet); +// pointSetToImageFilter->SetSplineOrder(splineOrder);//JV +// pointSetToImageFilter->SetSize(outputSize); +// pointSetToImageFilter->SetOrigin(outputOrigin); +// pointSetToImageFilter->SetSpacing(outputSpacing); + +// //Convert to +// itk::FixedArray num; +// num[0]=numberOfControlPoints; +// pointSetToImageFilter->SetNumberOfControlPoints(num);//JV +// pointSetToImageFilter->Update(); +// VectorImageType::Pointer approximatedSignal=pointSetToImageFilter->GetOutput(); + +// //Convert and return +// return ConvertVectorImageToSignal(approximatedSignal); +// } +// //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::ConvertVectorImageToSignal(VectorImageType::Pointer image) + { + //empty signal + Signal signal; + + //make an image iterator + itk::ImageRegionConstIterator it(image,image->GetLargestPossibleRegion()); + it.Begin(); + + //copy + while(!it.IsAtEnd()) + { + signal.push_back(it.Get()[0]); + ++it; + } + + //Spacing + signal.SetSamplingPeriod(image->GetSpacing()[0]); + + return signal; + } + //--------------------------------------------------------------------- + + + //--------------------------------------------------------------------- + Signal Signal::LimitSignalRange() + { + //empty signal + Signal signal(m_SamplingPeriod); + iterator it=begin(); + while(it != end()) + { + signal.push_back(*it-floor(*it)); + it++; + } + return signal; + } + + + //--------------------------------------------------------------------- + double Signal::SSD(const Signal &sig2) const{ + if(sig2.size() != size()){ + cerr << "ERROR in Signal::SSD: signals don't have the same size" << endl; + return -1; + } + double result=0.; + for(unsigned int i=0;i(*(it+pos))) + // return -1*pos; + // } + + // void Signal::CenteredFiniteDifferences(Signal & result,int order,int* weights){ + // const_iterator itSig=begin()+order; + // result.resize(size()); + // iterator itDer=result.begin()+order; + // while(itSig!=end()-order){ + // (*itDer)=0.; + // for(int i=-order;i<=order;i++){ + // *itDer+=*(itSig-i)*weights[i+order]; + // } + // itSig++;itDer++; + // } + // } + + // void Signal::FirstDerivate(Signal & result,int order){ + // if(order==1){ + // int weights[3]={-1,0,1}; + // CenteredFiniteDifferences(result,order,weights); + // } + // else if(order==2){ + // int weights[5]={1,-8,0,8,-1}; + // CenteredFiniteDifferences(result,order,weights); + // } + // } + + // void Signal::SecondDerivate(Signal & result,int order){ + // if(order==1){ + // int weights[3]={1,-2,1}; + // CenteredFiniteDifferences(result,order,weights); + // } + // else if(order==2){ + // int weights[5]={-1,16,-30,16,-1}; + // CenteredFiniteDifferences(result,order,weights); + // } + // } + + + + // void Signal::NormalizeMeanStdDev(double newMean,double newStdDev){ + // iterator itSig=begin(); + // double sum=0, sum2=0; + // while(itSig!=end()){ + // sum += *itSig; + // sum2 += (*itSig) * (*itSig); + // itSig++; + // } + // double oldMean=sum/size(); + // double oldStdDev=sqrt(sum2/size()-oldMean*oldMean); + + // double a = newStdDev/oldStdDev; + // double b = newMean - a * oldMean; + // itSig=begin(); + // while(itSig!=end()){ + // *itSig = a *(*itSig) + b; + // itSig++; + // } + // } + + + + // void Signal::print(ostream & os, const int level) const { + // os << "Size:" << m_Data.size() << endl; + // const_iterator it=m_Data.begin(); + // while(it!=m_Data.end()){ + // os << *it << endl; + // it++; + // } + // } + + + // // } + + // // istream& Signal::get(istream& is) { + // // ERROR << "Signal::get NOT IMPLEMENTED"; + // // FATAL(); + // // return is; + // // } //// + + // // /** @b GridBase::put os + // // * @param os + // // * @return + // // ***************************************************/ + // // ostream& Signal::put(ostream& os) const { + // // print(os); + // // return os; + // // } //// + + + + // void Signal::Crop(unsigned int posmin, unsigned int posmax){ + // if(posmin >= m_Data.size()) return; + // if(posmax >= m_Data.size()) posmax=m_Data.size(); + // m_Data.erase(m_Data.begin()+posmax+1,m_Data.end()); + // m_Data.erase(m_Data.begin(),m_Data.begin()+posmin); + // } + + // void Signal::LinearResample(const unsigned int newSize){ + // SIGNAL newData; + // newData.push_back(front()); + // double posInOld,leftWeight,rightWeight; + // int leftPos, rightPos; + // for(unsigned int i=1 ; i < newSize-1 ; i++){ + // posInOld = (double)(i * (size()-1)) / (double)(newSize-1); + // leftPos = (int)floor(posInOld); + // rightPos = leftPos+1; + // leftWeight = (double)rightPos - posInOld; + // rightWeight = posInOld - (double)leftPos; + // newData.push_back(m_Data[leftPos] * leftWeight + m_Data[rightPos] * rightWeight ); + // } + + // newData.push_back(back()); + // m_Data=newData; + // } + + + // int Signal::FreqToSamp(double freq){ + // if(m_SamplingPeriod==-1.) + // cerr << "ERROR: you did not initialize the sampling period" << endl; + // return lrint(freq*(double)size()*m_SamplingPeriod); + // } + // double Signal::SampToFreq(int samp){ + // if(m_SamplingPeriod==-1.) + // cerr << "ERROR: you did not initialize the sampling period" << endl; + // return ((double)(samp)/((double)size()*m_SamplingPeriod)); + // } + +// //--------------------------------------------------------------------- +// Signal Signal::limPhaseDE(eIPhaseValue, eEPhaseValue) +// { + +// //Create an empty signal +// phase.resize(size()); + +// iterator phaseIt=initialPhaseValues.begin(); +// iterator monPhaseIt=monPhase.begin(); +// iterator extremaIt =begin(); + +// while (extremaIt!= end()) +// { +// if (*extremaIt==0.) *phaseIt=eIPhaseValue+floor(*monPhaseIt); +// else if (*extremaIt==1.) *phaseIt=eEPhaseValue+floor(*monPhaseIt); +// extremaIt++; phaseIt++;monPhaseIt++; +// } + +// } + + +} + +#endif //#define CLITKSIGNAL diff --git a/common/clitkSignal.h b/common/clitkSignal.h new file mode 100644 index 0000000..c955936 --- /dev/null +++ b/common/clitkSignal.h @@ -0,0 +1,130 @@ +#ifndef CLITKSIGNAL_H +#define CLITKSIGNAL_H + +//Adapted from Signal.hh in ilr (Simon) + +#include "clitkCommon.h" +#include "clitkIO.h" + +//include external library +#include +#include + +//itk include +#include "itkImage.h" +#include "itkImageRegionConstIterator.h" +#include "itkPointSet.h" +// #include "itkBSplineScatteredDataPointSetToImageFilter.h" + +using namespace std; + +namespace clitk{ + +class Signal{ + public: + + //===================================================================================== + //Typedefs + typedef double SignalValueType; + typedef vector< SignalValueType > SignalType; + typedef SignalType::iterator iterator; + typedef SignalType::const_iterator const_iterator; + typedef vector< complex > SIGNAL_FFT_TYPE; + + typedef itk::Image ImageType; + typedef itk::Vector VectorType; + typedef itk::Image VectorImageType; + + //===================================================================================== + //Constructors - Destructors + Signal(){SetSamplingPeriod(1.);} + Signal(double sp):m_SamplingPeriod(sp){;} + Signal(const string fileName){Read(fileName);} + Signal(unsigned int size, SignalValueType voidValue=0.) + { + m_Data.resize(size,voidValue); + SetSamplingPeriod(1); + }; + + ~Signal(){} + + //===================================================================================== + //IO + void Read(string fileName); + void Read(string fileName, int col); + void ReadXDR(string fileName); + void Write(const string fileName); + + //===================================================================================== + //Common vector properties for signals + unsigned int size() const {return m_Data.size();} + iterator begin(){return m_Data.begin();} + iterator end() {return m_Data.end();} + const_iterator begin() const {return m_Data.begin();} + const_iterator end() const {return m_Data.end();} + SignalValueType front() {return m_Data.front();} + SignalValueType back() {return m_Data.back();} + void push_back(SignalValueType value){return m_Data.push_back(value);} + void resize(unsigned int newSize){return m_Data.resize(newSize);} + void clear(){m_Data.clear();} + + void print(ostream & os = cout, const int level = 0) const; + + //===================================================================================== + //Operators + SignalValueType& operator[](int index){return m_Data[index];} + const SignalValueType& operator[](int index) const {return m_Data[index];} + Signal & operator/=(Signal & d); + Signal & operator*=(Signal & d); + + //Functions + Signal Normalize(double newMin=0.,double newMax=1.); + vector GetGlobalMinMax() const; + double GetGlobalMean() const; + Signal MovingAverageFilter ( unsigned int length); + Signal GaussLikeFilter (); + Signal NormalizeMeanStdDev(double newMean=0.5,double newStdDev=0.5); + Signal HighPassFilter (double sampPeriod, double cutOffFrequency ); + Signal LowPassFilter (double sampPeriod, double cutOffFrequency ); + double MaxFreq(const Signal &sig,SIGNAL_FFT_TYPE & fft); + void OneDForwardFourier(const Signal& input,SIGNAL_FFT_TYPE & fft); + void OneDBackwardFourier(SIGNAL_FFT_TYPE & fft, Signal &output); + Signal DetectLocalExtrema(unsigned int width); + Signal LimPhase(); + Signal MonPhase(); + Signal MonPhaseDE(double ee, double ei); + double SSD(const Signal &sig2) const; + Signal LinearlyInterpolateScatteredValues(); + // Signal ApproximateScatteredValuesWithBSplines (unsigned int splineOrder, unsigned int numberOfControlPoints); + Signal LimitSignalRange(); + + void AddValue(double v); + void ComputeAugmentedSpace(Signal & outputX, Signal & outputY, unsigned int delay) const; + + // double Compare(Signal & sigRef); + // int DerivateSigne( const_iterator & it) const; + // void CenteredFiniteDifferences(Signal & result,int order,int* weights); + // void FirstDerivate(Signal & result,int order); + // void SecondDerivate(Signal & result,int order); + + // void Crop(unsigned int posmin, unsigned int posmax); + // void LinearResample(const unsigned int newSize); + + + //===================================================================================== + // Get and Set function + double GetSamplingPeriod() const {return m_SamplingPeriod;} + void SetSamplingPeriod(double sp){m_SamplingPeriod=sp;} + + //===================================================================================== + //Conversion for using itk filters + Signal ConvertImageToSignal(ImageType::Pointer image); + ImageType::Pointer ConvertSignalToImage( Signal); + Signal ConvertVectorImageToSignal (VectorImageType::Pointer m); + +protected: + SignalType m_Data; + double m_SamplingPeriod; +}; +} +#endif diff --git a/common/clitkTimer.cxx b/common/clitkTimer.cxx new file mode 100644 index 0000000..85b65fd --- /dev/null +++ b/common/clitkTimer.cxx @@ -0,0 +1,81 @@ +#ifndef CLITKTIMER_CXX +#define CLITKTIMER_CXX + +/** + ================================================= + * @file clitkTimer.cxx + * @author David Sarrut + * @date 18 Jul 2007 16:27:45 + * + * @brief + * + * + =================================================*/ + +// #ifdef UNIX + +#include "clitkTimer.h" + +//==================================================================== +/// Constructs the class +clitk::Timer::Timer() { + Reset(); +} +//==================================================================== + +//==================================================================== +void clitk::Timer::Start() { + getrusage(RUSAGE_SELF, &mBegin); + mNumberOfCall++; +} +//==================================================================== + +//==================================================================== +void clitk::Timer::Stop(bool accumulate) { + getrusage(RUSAGE_SELF, &mEnd); + if (accumulate) { + mElapsed += (mEnd.ru_utime.tv_usec - mBegin.ru_utime.tv_usec)+ + (mEnd.ru_utime.tv_sec - mBegin.ru_utime.tv_sec)*1000000; + } + else { + mNumberOfCall--; + } +} +//==================================================================== + +//==================================================================== +void clitk::Timer::Print(std::ostream & os) const { + if (mNumberOfCall != 1) { + os << "Timer # = " << mNumberOfCall << std::endl; + os << "Timer total = " << mElapsed << " usec \t" << mElapsed/1000000.0 << " sec." << mElapsed/1000000.0/60 << " min." + << mElapsed/1000000.0/60/60 << " hours." << std::endl; + } + long double tus = mElapsed/mNumberOfCall; + long double ts = tus/1000000.0; + long double tm = ts/60.0; + long double th = tm/60.0; + os << "Timer = " << tus << " usec\t" << ts << " sec.\t" << tm << " min.\t" << th << " hours." << std::endl; + // os << "\tmBegin.ru_utime.tv_sec = " << mBegin.ru_utime.tv_sec << std::endl; +// os << "\tmEnd.ru_utime.tv_sec = " << mEnd.ru_utime.tv_sec << std::endl; +// os << "\tmBegin.ru_utime.tv_usec = " << mBegin.ru_utime.tv_usec << std::endl; +// os << "\tmEnd.ru_utime.tv_usec = " << mEnd.ru_utime.tv_usec << std::endl; +} +//==================================================================== + +//==================================================================== +void clitk::Timer::Print(std::string text, std::ostream & os) const { + os << text; + Print(os); +} +//==================================================================== + +//==================================================================== +void clitk::Timer::Reset() { + mNumberOfCall = 0; + mElapsed = 0; +} +//==================================================================== + +// #endif // If UNIX +#endif /* end #define CLITKTIMER_CXX */ + diff --git a/common/clitkTimer.h b/common/clitkTimer.h new file mode 100644 index 0000000..5f16a8e --- /dev/null +++ b/common/clitkTimer.h @@ -0,0 +1,53 @@ +#ifndef CLITKTIMER_H +#define CLITKTIMER_H + +/** + =================================================================== + * @file clitkTimer.h + * @author David Sarrut + * @date 18 Jul 2007 16:26:08 + + * @brief + + ===================================================================*/ + +// #ifdef UNIX + +#include "clitkCommon.h" +#include +#include +#include +#include + +namespace clitk { + + class Timer { + public: + + //==================================================================== + Timer(); + void Start(); + void Stop(bool accumulate=true); + void Reset(); + void Print(std::ostream & os=std::cout) const; + void Print(std::string text, std::ostream & os=std::cout) const; + //==================================================================== + + //==================================================================== + long double GetTimeInMicroSecond() const { return mElapsed; } + long double GetMeanTimeInMicroSecond() const { return mElapsed/mNumberOfCall; } + long int GetNumberOfCall() const { return mNumberOfCall; } + //==================================================================== + + protected: + rusage mBegin; + rusage mEnd; + long double mElapsed; + long int mNumberOfCall; + }; + +} // end namespace + +// #endif +#endif /* end #define CLITKTIMER_H */ + diff --git a/common/clitkTransformUtilities.h b/common/clitkTransformUtilities.h new file mode 100644 index 0000000..c8d100c --- /dev/null +++ b/common/clitkTransformUtilities.h @@ -0,0 +1,432 @@ +#ifndef CLITKTRANSFORMUTILITIES_H +#define CLITKTRANSFORMUTILITIES_H + +#include "itkMatrix.h" +#include "itkArray.h" +#include "itkPoint.h" +#include "clitkIOCommon.h" +#include "clitkCommon.h" + + +namespace clitk +{ + //============================================================================ + //Declarations + //============================================================================ + itk::Matrix GetForwardAffineMatrix2D(itk::Array transformParameters); + itk::Matrix GetBackwardAffineMatrix2D(itk::Array transformParameters); + itk::Matrix GetForwardAffineMatrix3D(itk::Array transformParameters); + itk::Matrix GetBackwardAffineMatrix3D(itk::Array transformParameters); + itk::Matrix GetRotationMatrix3D(itk::Array rotationParameters); + itk::Point GetRotatedPoint3D(itk::Array rotationParameters, itk::Point input); + itk::Matrix GetCenteredRotationMatrix3D(itk::Array rotationParameters,itk::Point centerOfRotation); + // itk::Matrix GetComposedMatrix3D(itk::Matrix firstTransform, itk::Matrix secondTransform); + + itk::Matrix ReadMatrix4D(std::string fileName); + itk::Matrix ReadMatrix3D(std::string fileName); + itk::Matrix ReadMatrix2D(std::string fileName); + template itk::Matrix ReadMatrix(std::string fileName); + + itk::Matrix GetRotationalPartMatrix3D(itk::Matrix input); + itk::Matrix GetRotationalPartMatrix(itk::Matrix input); + itk::Matrix GetRotationalPartMatrix2D(itk::Matrix input); + itk::Matrix GetRotationalPartMatrix(itk::Matrix input); + + itk::Vector GetTranslationPartMatrix3D(itk::Matrix input); + itk::Vector GetTranslationPartMatrix(itk::Matrix input); + itk::Vector GetTranslationPartMatrix2D(itk::Matrix input); + itk::Vector GetTranslationPartMatrix(itk::Matrix input); + + + //============================================================================ + //Inline functions definition in header file, otherwise linker errors + //============================================================================ + + //======================================================================================== + inline itk::Matrix GetForwardAffineMatrix2D(itk::Array transformParameters) + { + itk::Matrix matrix; + //rotation part + matrix[0][0]=cos(transformParameters[0]); + matrix[0][1]=-sin(transformParameters[0]); + matrix[1][0]=sin(transformParameters[0]); + matrix[1][1]=cos(transformParameters[0]); + //translation part + matrix[0][2]=transformParameters[1]; + matrix[1][2]=transformParameters[2]; + //homogenize + matrix[2][0]=0.; + matrix[2][1]=0.; + matrix[2][2]=1.; + return matrix; + } + + inline itk::Matrix GetBackwardAffineMatrix2D(itk::Array transformParameters) + { + itk::Matrix matrix; + //rotation part + matrix[0][0]=cos(transformParameters[0]); + matrix[0][1]=sin(transformParameters[0]); + matrix[1][0]=-sin(transformParameters[0]); + matrix[1][1]=cos(transformParameters[0]); + //translation part + matrix[0][2]=transformParameters[1]; + matrix[1][2]=transformParameters[2]; + //homogenize + matrix[2][0]=0.; + matrix[2][1]=0.; + matrix[2][2]=1.; + return matrix; + } + + + inline itk::Matrix GetForwardAffineMatrix3D(itk::Array transformParameters) + { + itk::Matrix matrix; + //rotational part + matrix[0][0]= cos(transformParameters[1])*cos(transformParameters[2]); + matrix[0][1]= sin(transformParameters[0])*sin(transformParameters[1])*cos(transformParameters[2])+ sin(transformParameters[2])*cos(transformParameters[0]); + matrix[0][2]= -cos(transformParameters[0])*sin(transformParameters[1])*cos(transformParameters[2])+sin(transformParameters[0])*sin(transformParameters[2]); + matrix[1][0]= -cos(transformParameters[1])*sin(transformParameters[2]); + matrix[1][1]= -sin(transformParameters[0])*sin(transformParameters[1])*sin(transformParameters[2])+cos(transformParameters[0])*cos(transformParameters[2]); + matrix[1][2]= cos(transformParameters[0])*sin(transformParameters[1])*sin(transformParameters[2])+sin(transformParameters[0])*cos(transformParameters[2]); + matrix[2][0]= sin(transformParameters[1]); + matrix[2][1]= -sin(transformParameters[0])*cos(transformParameters[1]); + matrix[2][2]= cos(transformParameters[0])*cos(transformParameters[1]); + //translational part + matrix[0][3]=transformParameters[3]; + matrix[1][3]=transformParameters[4]; + matrix[2][3]=transformParameters[5]; + //homogenize + matrix[3][0]=0.; + matrix[3][1]=0.; + matrix[3][2]=0.; + matrix[3][3]=1.; + return matrix; + } + + + inline itk::Matrix GetBackwardAffineMatrix3D(itk::Array transformParameters) + { + itk::Matrix matrix; + //rotational part + matrix[0][0]= cos(transformParameters[1])*cos(transformParameters[2]); + matrix[0][1]= sin(transformParameters[0])*sin(transformParameters[1])*cos(transformParameters[2])- sin(transformParameters[2])*cos(transformParameters[0]); + matrix[0][2]= cos(transformParameters[0])*sin(transformParameters[1])*cos(transformParameters[2])+sin(transformParameters[0])*sin(transformParameters[2]); + matrix[1][0]= cos(transformParameters[1])*sin(transformParameters[2]); + matrix[1][1]= sin(transformParameters[0])*sin(transformParameters[1])*sin(transformParameters[2])+cos(transformParameters[0])*cos(transformParameters[2]); + matrix[1][2]= cos(transformParameters[0])*sin(transformParameters[1])*sin(transformParameters[2])-sin(transformParameters[0])*cos(transformParameters[2]); + matrix[2][0]= -sin(transformParameters[1]); + matrix[2][1]= sin(transformParameters[0])*cos(transformParameters[1]); + matrix[2][2]= cos(transformParameters[0])*cos(transformParameters[1]); + //translational part + matrix[0][3]=transformParameters[3]; + matrix[1][3]=transformParameters[4]; + matrix[2][3]=transformParameters[5]; + //homogenize + matrix[3][0]=0.; + matrix[3][1]=0.; + matrix[3][2]=0.; + matrix[3][3]=1.; + return matrix; + } + + inline itk::Matrix GetRotationMatrix3D(itk::Array rotationParameters) + { + itk::Matrix matrix; + //rotational part + matrix[0][0]= cos(rotationParameters[1])*cos(rotationParameters[2]); + matrix[0][1]= sin(rotationParameters[0])*sin(rotationParameters[1])*cos(rotationParameters[2])+ sin(rotationParameters[2])*cos(rotationParameters[0]); + matrix[0][2]= -cos(rotationParameters[0])*sin(rotationParameters[1])*cos(rotationParameters[2])+sin(rotationParameters[0])*sin(rotationParameters[2]); + matrix[1][0]= -cos(rotationParameters[1])*sin(rotationParameters[2]); + matrix[1][1]= -sin(rotationParameters[0])*sin(rotationParameters[1])*sin(rotationParameters[2])+cos(rotationParameters[0])*cos(rotationParameters[2]); + matrix[1][2]= cos(rotationParameters[0])*sin(rotationParameters[1])*sin(rotationParameters[2])+sin(rotationParameters[0])*cos(rotationParameters[2]); + matrix[2][0]= sin(rotationParameters[1]); + matrix[2][1]= -sin(rotationParameters[0])*cos(rotationParameters[1]); + matrix[2][2]= cos(rotationParameters[0])*cos(rotationParameters[1]); + return matrix; + } + + + + //======================================================================================== + inline itk::Point GetRotatedPoint3D(itk::Array rotationParameters, itk::Point input) + { + itk::Matrix matrix = GetRotationMatrix3D(rotationParameters); + itk::Point output; + for (unsigned int i=0;i<3;i++) + { + output[i]=0.0; + for (unsigned int j=0;j<3;j++) + output[i]+=matrix(i,j)*input[j]; + } + return output; + } + + + inline itk::Matrix GetCenteredRotationMatrix3D(itk::Array rotationParameters,itk::Point centerOfRotation ) + { + //rotational part is identical as affine matrix, translations change + itk::Array parameters(6); + for(unsigned int i=0; i<3;i++) parameters[i]=rotationParameters[i]; + for(unsigned int i=3; i<6;i++) parameters[i]=centerOfRotation[i-3]; + itk::Matrix matrix=GetForwardAffineMatrix3D(parameters); + + //Get the rotation of the centerOfRotation + itk::Matrix rotation = GetRotationalPartMatrix3D(matrix); + itk::Point rotatedCenter=rotation*centerOfRotation; //GetRotatedPoint3D(rotationParameters, centerOfRotation); + + //Substract this point to the translational part + matrix(0,3)-=rotatedCenter[0]; + matrix(1,3)-=rotatedCenter[1]; + matrix(2,3)-=rotatedCenter[2]; + return matrix; + } + + + // inline itk::Matrix GetComposedMatrix3D(itk::Matrix firstAppliedTransform, itk::Matrix secondAppliedTransform) + // { + // itk::Matrix matrix; + // for (unsigned int i=0;i<4;i++) + // for (unsigned int j=0;j<4;j++) + // { + // matrix[i][j]=0.0; + // for (unsigned int k=0;k<4;k++) + // matrix[i][j]+=firstAppliedTransform[i][k]*secondAppliedTransform[k][j]; + // } + // return matrix; + // } + + + //======================================================================================== + inline itk::Matrix ReadMatrix4D(std::string fileName) + { + // read input matrix + std::ifstream is; + openFileForReading(is, fileName); + std::vector nb; + double x; + skipComment(is); + is >> x; + while (!is.eof()) { + nb.push_back(x); + skipComment(is); + is >> x; + } + + //copy it to the matrix + itk::Matrix matrix; + unsigned int index=0; + for (unsigned int i=0;i<5;i++) + for (unsigned int j=0;j<5;j++) + matrix[i][j]=nb[index++]; + return matrix; + } + + inline itk::Matrix ReadMatrix3D(std::string fileName) + { + // read input matrix + std::ifstream is; + openFileForReading(is, fileName); + std::vector nb; + double x; + skipComment(is); + is >> x; + while (!is.eof()) { + nb.push_back(x); + skipComment(is); + is >> x; + } + + //copy it to the matrix + itk::Matrix matrix; + unsigned int index=0; + for (unsigned int i=0;i<4;i++) + for (unsigned int j=0;j<4;j++) + matrix[i][j]=nb[index++]; + return matrix; + } + + inline itk::Matrix ReadMatrix2D(std::string fileName) + { + // read input matrix + std::ifstream is; + openFileForReading(is, fileName); + std::vector nb; + double x; + skipComment(is); + is >> x; + while (!is.eof()) { + nb.push_back(x); + skipComment(is); + is >> x; + } + + //copy it to the matrix + itk::Matrix matrix; + unsigned int index=0; + for (unsigned int i=0;i<3;i++) + for (unsigned int j=0;j<3;j++) + matrix[i][j]=nb[index++]; + return matrix; + } + + template inline itk::Matrix ReadMatrix(std::string fileName) + { + + // read input matrix + std::ifstream is; + openFileForReading(is, fileName); + std::vector nb; + double x; + skipComment(is); + is >> x; + while (!is.eof()) { + nb.push_back(x); + skipComment(is); + is >> x; + } + + //copy it to the matrix + itk::Matrix matrix; + unsigned int index=0; + for (unsigned int i=0;i inline itk::Matrix ReadMatrix<2> (std::string fileName) + // { + // return ReadMatrix2D(fileName); + // } + // template<> inline itk::Matrix ReadMatrix<3> (std::string fileName) + // { + // return ReadMatrix3D(fileName); + // } + // template<> inline itk::Matrix ReadMatrix<4> (std::string fileName) + // { + // return ReadMatrix4D(fileName); + // } + + + //======================================================================================== + inline itk::Matrix GetRotationalPartMatrix4D(itk::Matrix input) + { + itk::Matrix matrix; + matrix[0][0]= input[0][0]; + matrix[0][1]= input[0][1]; + matrix[0][2]= input[0][2]; + matrix[0][3]= input[0][3]; + matrix[1][0]= input[1][0]; + matrix[1][1]= input[1][1]; + matrix[1][2]= input[1][2]; + matrix[1][3]= input[1][3]; + matrix[2][0]= input[2][0]; + matrix[2][1]= input[2][1]; + matrix[2][2]= input[2][2]; + matrix[2][2]= input[2][2]; + matrix[2][3]= input[2][3]; + matrix[3][0]= input[3][0]; + matrix[3][1]= input[3][1]; + matrix[3][2]= input[3][2]; + matrix[3][2]= input[3][2]; + matrix[3][3]= input[3][3]; + + return matrix; + } + + + inline itk::Matrix GetRotationalPartMatrix3D(itk::Matrix input) + { + itk::Matrix matrix; + matrix[0][0]= input[0][0]; + matrix[0][1]= input[0][1]; + matrix[0][2]= input[0][2]; + matrix[1][0]= input[1][0]; + matrix[1][1]= input[1][1]; + matrix[1][2]= input[1][2]; + matrix[2][0]= input[2][0]; + matrix[2][1]= input[2][1]; + matrix[2][2]= input[2][2]; + return matrix; + } + + inline itk::Matrix GetRotationalPartMatrix2D(itk::Matrix input) + { + itk::Matrix matrix; + matrix[0][0]= input[0][0]; + matrix[0][1]= input[0][1]; + matrix[0][2]= input[0][2]; + matrix[1][0]= input[1][0]; + matrix[1][1]= input[1][1]; + return matrix; + } + + inline itk::Matrix GetRotationalPartMatrix(itk::Matrix input) + { + return GetRotationalPartMatrix4D(input); + } + + inline itk::Matrix GetRotationalPartMatrix(itk::Matrix input) + { + return GetRotationalPartMatrix3D(input); + } + + inline itk::Matrix GetRotationalPartMatrix(itk::Matrix input) + { + return GetRotationalPartMatrix2D(input); + } + + + //======================================================================================== + inline itk::Vector GetTranslationPartMatrix4D(itk::Matrix input) + { + itk::Vector vec; + vec[0]= input[0][4]; + vec[1]= input[1][4]; + vec[2]= input[2][4]; + vec[3]= input[3][4]; + return vec; + + } + + inline itk::Vector GetTranslationPartMatrix3D(itk::Matrix input) + { + itk::Vector vec; + vec[0]= input[0][3]; + vec[1]= input[1][3]; + vec[2]= input[2][3]; + return vec; + + } + inline itk::Vector GetTranslationPartMatrix2D(itk::Matrix input) + { + itk::Vector vec; + vec[0]= input[0][2]; + vec[1]= input[1][2]; + return vec; + + } + + inline itk::Vector GetTranslationPartMatrix(itk::Matrix input) + { + + return GetTranslationPartMatrix4D(input); + } + + inline itk::Vector GetTranslationPartMatrix(itk::Matrix input) + { + + return GetTranslationPartMatrix3D(input); + } + + inline itk::Vector GetTranslationPartMatrix(itk::Matrix input) + { + + return GetTranslationPartMatrix2D(input); + } +} + +#endif //#define CLITKTRANSFORMUTILITIES_H diff --git a/common/clitkVfImageIO.cxx b/common/clitkVfImageIO.cxx new file mode 100644 index 0000000..f56b13e --- /dev/null +++ b/common/clitkVfImageIO.cxx @@ -0,0 +1,211 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkVfImageIO.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + + + +#ifndef CLITKVFIMAGEIO_CXX +#define CLITKVFIMAGEIO_CXX + +/** + * @file clitkVfImageIO.cxx + * @author Simon Rit + * @date Mon Sep 18 10:14:53 2006 + * + * @brief VectorField .vf I/O implementation + * + * + */ + +// clitk include +#include "clitkVfImageIO.h" + +// itk include (for itkReadRawBytesAfterSwappingMacro) +#include "itkRawImageIO.h" + +//==================================================================== +// Read Image Information +void clitk::VfImageIO::ReadImageInformation() +{ + // open file + std::ifstream is; + clitk::openFileForReading(is, m_FileName); + // read magic number + std::string mn; + is >> mn; + //DD(mn); + if (mn != "IAMA3DVECTORFIELD") { + itkExceptionMacro(<<"read magic number '" << mn << "' while expect IAMA3DVECTORFIELD"); + } + // read vf file version + skipComment(is); + is >> mn; + //DD(mn); + if (mn != "V2") { + itkExceptionMacro(<<"read old format '" << mn << "'. TODO"); + } + + // read grid size/spacing + itk::Vector dim; + itk::Vector spacing; + itk::Vector origin; + origin.Fill(0.0); + skipComment(is); + is >> dim[0]; + is >> dim[1]; + is >> dim[2]; + // DD(dim); + is >> spacing[0]; + is >> spacing[1]; + is >> spacing[2]; + // DD(spacing); + + // get header size + m_HeaderSize = is.tellg(); + m_HeaderSize+=2; + + // set dimension values + SetNumberOfDimensions(3); + for(unsigned int i=0; i<3; i++) { + SetDimensions(i,dim[i]); + SetSpacing(i,spacing[i]); + SetOrigin(i,origin[i]); + } + + // set other information + SetByteOrderToLittleEndian(); + SetPixelType(itk::ImageIOBase::VECTOR); + SetNumberOfComponents(3); + SetComponentType(itk::ImageIOBase::FLOAT); +} //// + +//==================================================================== +// Read Image Information +bool clitk::VfImageIO::CanReadFile(const char* FileNameToRead) +{ + std::string filename(FileNameToRead); + std::string filenameext = GetExtension(filename); + if (filenameext != std::string("vf")) return false; + return true; +} //// + +//==================================================================== +// Read Image Content +void clitk::VfImageIO::Read(void * buffer) +{ + // Adapted from itkRawImageIO + + std::ifstream file; + openFileForReading(file, m_FileName); + + // Offset into file + unsigned long streamStart = m_HeaderSize; + file.seekg((long)streamStart, std::ios::beg); + if ( file.fail() ) { + itkExceptionMacro(<<"File seek failed (Vf Read)"); + } + + float * tmpBuff = new float[GetImageSizeInComponents()]; + if(!this->ReadBufferAsBinary(file, tmpBuff, GetImageSizeInBytes())) { + itkExceptionMacro(<<"Read failed: Wanted " + << GetImageSizeInBytes() + << " bytes, but read " + << file.gcount() << " bytes."); + } + itkDebugMacro(<< "Reading Done"); + + float *pb = (float *)buffer; + float *px = tmpBuff; + float *py = tmpBuff + GetImageSizeInPixels(); + float *pz = tmpBuff + 2 * GetImageSizeInPixels(); + const float *pbe = (float *)buffer + GetImageSizeInComponents(); + while(pb != pbe){ + *pb++ = (*px++)*GetSpacing(0); + *pb++ = (*py++)*GetSpacing(1); + *pb++ = (*pz++)*GetSpacing(2); + } + delete [] tmpBuff; + + typedef itk::ByteSwapper< float > InternalByteSwapperType; + InternalByteSwapperType::SwapRangeFromSystemToLittleEndian((float *)buffer, GetImageSizeInComponents()); +} + +//==================================================================== +// Write Image Information +void clitk::VfImageIO::WriteImageInformation(bool keepOfStream) +{ + // Check dimension + if (GetNumberOfDimensions() != 3) { + itkExceptionMacro(<<"Write failed: only 3D image for Vf file format yet."); + } + + // Open the file + clitk::openFileForWriting(file, m_FileName); + // write magic number + file << "IAMA3DVECTORFIELD V2 " << std::endl; + // write grid size/spacing + file << GetDimensions(0) << ' ' + << GetDimensions(1) << ' ' + << GetDimensions(2) << ' ' + << GetSpacing(0) << ' ' + << GetSpacing(1) << ' ' + << GetSpacing(2) << ' ' << std::endl; + + // close file + if (!keepOfStream) file.close(); +} + +//==================================================================== +// Write Image Information +bool clitk::VfImageIO::CanWriteFile(const char* FileNameToWrite) +{ + std::string filename(FileNameToWrite); + std::string filenameext = GetExtension(filename); + if (filenameext != std::string("vf")) return false; + return true; +} + +//==================================================================== +// Write Image +void clitk::VfImageIO::Write(const void * buffer) +{ + clitk::VfImageIO::WriteImageInformation(true); + + typedef itk::ByteSwapper< float > InternalByteSwapperType; + std::cout << "GetImageSizeInBytes() " << GetImageSizeInBytes() << std::endl; + float* tempBuffer = new float[ GetImageSizeInPixels() ]; + + + for(int i=0 ; i< 3 ; i++){ + float *pb = (float *)buffer; + pb+=i; + float *ptb = tempBuffer; + const float *pbe = (float *)buffer + GetImageSizeInComponents() + i; + while(pb != pbe){ + *ptb++ = (*pb)/GetSpacing(i); + pb+=3; + } + InternalByteSwapperType::SwapRangeFromSystemToLittleEndian(tempBuffer,GetImageSizeInPixels()); + file.write((char*)tempBuffer, GetImageSizeInBytes()/3 ); + } + delete [] tempBuffer; + + file.close(); +} //// + +#endif /* end #define CLITKVFIMAGEIO_CXX */ + diff --git a/common/clitkVfImageIO.h b/common/clitkVfImageIO.h new file mode 100644 index 0000000..e26d7a9 --- /dev/null +++ b/common/clitkVfImageIO.h @@ -0,0 +1,66 @@ +#ifndef CLITKVFIMAGEIO_H +#define CLITKVFIMAGEIO_H + +/** + * @file clitkVfImageIO.h + * @author Simon Rit > + * @date Mon Sep 18 10:13:21 2006 + * + * @brief VectorField .vf I/O header + * + * + */ + + +// clitk include +#include "clitkCommon.h" + +// itk include +#include "itkImageIOBase.h" + +namespace clitk { + + //==================================================================== + // Class for reading Vf Image file format + class VfImageIO: public itk::ImageIOBase + { + public: + /** Standard class typedefs. */ + typedef VfImageIO Self; + typedef itk::ImageIOBase Superclass; + typedef itk::SmartPointer Pointer; + typedef signed short int PixelType; + + VfImageIO():Superclass() { mustWriteHeader = false; } + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(VfImageIO, ImageIOBase); + + /*-------- This part of the interface deals with reading data. ------ */ + virtual void ReadImageInformation(); + virtual bool CanReadFile( const char* FileNameToRead ); + virtual void Read(void * buffer); + + /*-------- This part of the interfaces deals with writing data. ----- */ + virtual void WriteImageInformation(bool keepOfStream); + virtual void WriteImageInformation() { WriteImageInformation(false); } + virtual bool CanWriteFile(const char* filename); + virtual void Write(const void* buffer); + + protected: + bool mustWriteHeader; + int m_HeaderSize; + std::ofstream file; + + }; // end class VfImageIO + +} // end namespace + + // explicit template instantiation +template class itk::CreateObjectFunction; + +#endif /* end #define CLITKVFIMAGEIO_H */ + diff --git a/common/clitkVfImageIOFactory.cxx b/common/clitkVfImageIOFactory.cxx new file mode 100644 index 0000000..c929c00 --- /dev/null +++ b/common/clitkVfImageIOFactory.cxx @@ -0,0 +1,47 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkVfImageIOFactory.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + + +#ifndef CLITKVFIMAGEIOFACTORY_CXX +#define CLITKVFIMAGEIOFACTORY_CXX + +/** + * @file clitkVfImageIOFactory.cxx + * @author Simon Rit + * @date Mon Sep 18 10:14:25 2006 + * + * @brief + * + * + */ + +#include "clitkVfImageIOFactory.h" + +//==================================================================== +clitk::VfImageIOFactory::VfImageIOFactory() +{ + this->RegisterOverride("itkImageIOBase", + "VfImageIO", + "Vf Image IO", + 1, + itk::CreateObjectFunction::New()); +} + + +#endif /* end #define CLITKVFIMAGEIOFACTORY_CXX */ + diff --git a/common/clitkVfImageIOFactory.h b/common/clitkVfImageIOFactory.h new file mode 100644 index 0000000..08a0e56 --- /dev/null +++ b/common/clitkVfImageIOFactory.h @@ -0,0 +1,69 @@ +#ifndef CLITKVFIMAGEIOFACTORY_H +#define CLITKVFIMAGEIOFACTORY_H + +/** + * @file clitkVfImageIOFactory.h + * @author Simon Rit + * @date Mon Sep 18 10:14:12 2006 + * + * @brief + * + * + */ + +// clitk include +#include "clitkVfImageIO.h" + +// itk include +#include "itkImageIOBase.h" +#include "itkObjectFactoryBase.h" +#include "itkVersion.h" + +namespace clitk { + + //==================================================================== + // Factory for reading Vf Image file format + class VfImageIOFactory: public itk::ObjectFactoryBase + { + public: + /** Standard class typedefs. */ + typedef VfImageIOFactory Self; + typedef itk::ObjectFactoryBase Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Class methods used to interface with the registered factories. */ + const char* GetITKSourceVersion(void) const { + return ITK_SOURCE_VERSION; + } + + const char* GetDescription(void) const { + return "Vf ImageIO Factory, allows the loading of Vf images into insight"; + } + + /** Method for class instantiation. */ + itkFactorylessNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(VfImageIOFactory, ObjectFactoryBase); + + /** Register one factory of this type */ + static void RegisterOneFactory(void) { + ObjectFactoryBase::RegisterFactory( Self::New() ); + } + + protected: + VfImageIOFactory(); + ~VfImageIOFactory() {}; + typedef VfImageIOFactory myProductType; + const myProductType* m_MyProduct; + + private: + VfImageIOFactory(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + }; + +} // end namespace + +#endif /* end #define CLITKVFIMAGEIOFACTORY_H */ + diff --git a/common/clitkVoxImageIO.cxx b/common/clitkVoxImageIO.cxx new file mode 100644 index 0000000..aed5b04 --- /dev/null +++ b/common/clitkVoxImageIO.cxx @@ -0,0 +1,265 @@ + +/*------------------------------------------------------------------------- + + Program: clitk + Module: $RCSfile: clitkVoxImageIO.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + + +#ifndef CLITKVOXIMAGEIO_CXX +#define CLITKVOXIMAGEIO_CXX + +/** + ------------------------------------------------- + * @file clitkVoxImageIO.cxx + * @author David Sarrut + * @date 17 May 2006 08:03:07 + * + * @brief + * + * + -------------------------------------------------*/ + +// clitk include +#include "clitkVoxImageIO.h" +#include "clitkCommon.h" + +// itk include (for itkReadRawBytesAfterSwappingMacro) +#include "itkRawImageIO.h" + +//-------------------------------------------------------------------- +// Read Image Information +void clitk::VoxImageIO::ReadImageInformation() { + // open file + std::ifstream is; + clitk::openFileForReading(is, m_FileName); + // read magic number + std::string mn; + is >> mn; + //DD(mn); + if (mn != "VOX") { + itkExceptionMacro(<<"read magic number '" << mn << "' while expect VOX"); + } + // read vox file version + skipComment(is); + is >> mn; + //DD(mn); + if (mn != "v2") { + itkExceptionMacro(<<"read old format '" << mn << "'. TODO"); + } + + // ONLY 3D IMAGES YET ... + + // read grid size/spacing + itk::Vector dim; + itk::Vector spacing; + itk::Vector origin; + origin.Fill(0.0); + skipComment(is); + is >> dim[0]; + is >> dim[1]; + is >> dim[2]; + //DD(dim); + skipComment(is); + is >> spacing[0]; + is >> spacing[1]; + is >> spacing[2]; + //DD(spacing); + skipComment(is); + int d; + is >> d; + if (d != 3 && d != 2) { + itkExceptionMacro(<<"could not read no " << d << "D image (only 2D and 3D). TODO"); + } + // read data type + skipComment(is); + std::string dataTypeName; + is >> dataTypeName; + //DD(dataTypeName); + + // get header size + m_HeaderSize = is.tellg(); + m_HeaderSize++; + //DD(m_HeaderSize); + + // set dimension values + SetNumberOfDimensions(d); + for(int i=0; iReadBufferAsBinary(file, buffer, numberOfBytesToBeRead)) { + itkExceptionMacro(<<"Read failed: Wanted " + << numberOfBytesToBeRead + << " bytes, but read " + << file.gcount() << " bytes."); + } + itkDebugMacro(<< "Reading Done"); + + { + using namespace itk; + // Swap bytes if necessary + if itkReadRawBytesAfterSwappingMacro( unsigned short, USHORT ) + else if itkReadRawBytesAfterSwappingMacro( short, SHORT ) + else if itkReadRawBytesAfterSwappingMacro( char, CHAR ) + else if itkReadRawBytesAfterSwappingMacro( unsigned char, UCHAR ) + else if itkReadRawBytesAfterSwappingMacro( unsigned int, UINT ) + else if itkReadRawBytesAfterSwappingMacro( int, INT ) + else if itkReadRawBytesAfterSwappingMacro( float, FLOAT ) + else if itkReadRawBytesAfterSwappingMacro( double, DOUBLE ); + } +} + +//-------------------------------------------------------------------- +// Write Image Information +void clitk::VoxImageIO::WriteImageInformation(bool keepOfStream) +{ + // Check dimension + if (GetNumberOfDimensions() != 3 && GetNumberOfDimensions() != 2) { + itkExceptionMacro(<<"Write failed: only 3D and 2D image for Vox file format yet."); + } + + // Open the file + clitk::openFileForWriting(file, m_FileName); + // write magic number + file << "VOX v2" << std::endl; + // write grid size/spacing + file << "# Size" << std::endl; + file << GetDimensions(0) << " " + << GetDimensions(1) << " " + << GetDimensions(2) << std::endl; + file << "# Spacing" << std::endl; + file.precision(40); + file << GetSpacing(0) << " " + << GetSpacing(1) << " " + << GetSpacing(2) << std::endl; + file << "# Image dim" << std::endl << "3" << std::endl; + file << "# Image type" << std::endl; + + std::string dataTypeName; + if (GetComponentType() == itk::ImageIOBase::CHAR) dataTypeName = "schar"; + else if (GetComponentType() == itk::ImageIOBase::UCHAR) dataTypeName = "uchar"; + else if (GetComponentType() == itk::ImageIOBase::SHORT) dataTypeName = "sshort"; + else if (GetComponentType() == itk::ImageIOBase::USHORT) dataTypeName = "ushort"; + else if (GetComponentType() == itk::ImageIOBase::INT) dataTypeName = "int"; + else if (GetComponentType() == itk::ImageIOBase::UINT) dataTypeName = "uint"; + else if (GetComponentType() == itk::ImageIOBase::FLOAT) dataTypeName = "float"; + else if (GetComponentType() == itk::ImageIOBase::DOUBLE) dataTypeName = "double"; + else { + itkExceptionMacro(<<"Write failed: Wanted pixel type " + << "(char, uchar, short, ushort, int, uint, float, double)" + << " but Vox is : " << dataTypeName); + } + file << dataTypeName << std::endl; + + // close file + if (!keepOfStream) file.close(); +} + +//-------------------------------------------------------------------- +// Write Image Information +bool clitk::VoxImageIO::CanWriteFile(const char* FileNameToWrite) +{ + std::string filename(FileNameToWrite); + std::string filenameext = GetExtension(filename); + if (filenameext != std::string("vox")) return false; + return true; +} + +//-------------------------------------------------------------------- +// Write Image +void clitk::VoxImageIO::Write(const void * buffer) +{ + clitk::VoxImageIO::WriteImageInformation(true); + SetByteOrderToLittleEndian(); + + //------------------------------------------- + // Cut & Paste from itkRawImageIO + // (warning BigEndian / LittleEndian) + const unsigned long numberOfBytes = this->GetImageSizeInBytes(); + const unsigned long numberOfComponents = this->GetImageSizeInComponents(); + // Swap bytes if necessary + using namespace itk; + if itkWriteRawBytesAfterSwappingMacro( unsigned short, USHORT ) + else if itkWriteRawBytesAfterSwappingMacro( short, SHORT ) + else if itkWriteRawBytesAfterSwappingMacro( char, CHAR ) + else if itkWriteRawBytesAfterSwappingMacro( unsigned char, UCHAR ) + else if itkWriteRawBytesAfterSwappingMacro( unsigned int, UINT ) + else if itkWriteRawBytesAfterSwappingMacro( int, INT ) + else if itkWriteRawBytesAfterSwappingMacro( float, FLOAT ) + else if itkWriteRawBytesAfterSwappingMacro( double, DOUBLE ) ; + //------------------------------------------- + + file.close(); +} //// + +#endif /* end #define CLITKVOXIMAGEIO_CXX */ + diff --git a/common/clitkVoxImageIO.h b/common/clitkVoxImageIO.h new file mode 100644 index 0000000..d4ffb6a --- /dev/null +++ b/common/clitkVoxImageIO.h @@ -0,0 +1,65 @@ +#ifndef CLITKVOXIMAGEIO_H +#define CLITKVOXIMAGEIO_H + +/** + =================================================================== + * @file clitkVoxImageIO.h + * @author David Sarrut + * @date 17 May 2006 08:01:35 + + * @brief + + ===================================================================*/ + +// clitk include +#include "clitkCommon.h" + +// itk include +#include "itkImageIOBase.h" + +namespace clitk { + + //==================================================================== + // Class for reading Vox Image file format + class VoxImageIO: public itk::ImageIOBase + { + public: + /** Standard class typedefs. */ + typedef VoxImageIO Self; + typedef itk::ImageIOBase Superclass; + typedef itk::SmartPointer Pointer; + typedef signed short int PixelType; + + VoxImageIO():Superclass() { mustWriteHeader = false; } + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(VoxImageIO, ImageIOBase); + + /*-------- This part of the interface deals with reading data. ------ */ + virtual void ReadImageInformation(); + virtual bool CanReadFile( const char* FileNameToRead ); + virtual void Read(void * buffer); + + /*-------- This part of the interfaces deals with writing data. ----- */ + virtual void WriteImageInformation(bool keepOfStream); + virtual void WriteImageInformation() { WriteImageInformation(false); } + virtual bool CanWriteFile(const char* filename); + virtual void Write(const void* buffer); + + protected: + bool mustWriteHeader; + int m_HeaderSize; + std::ofstream file; + + }; // end class VoxImageIO + +} // end namespace + + // explicit template instantiation +template class itk::CreateObjectFunction; + +#endif /* end #define CLITKVOXIMAGEIO_H */ + diff --git a/common/clitkVoxImageIOFactory.cxx b/common/clitkVoxImageIOFactory.cxx new file mode 100644 index 0000000..05931a1 --- /dev/null +++ b/common/clitkVoxImageIOFactory.cxx @@ -0,0 +1,48 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkVoxImageIOFactory.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + + +#ifndef CLITKVOXIMAGEIOFACTORY_CXX +#define CLITKVOXIMAGEIOFACTORY_CXX + +/** + ================================================= + * @file clitkVoxImageIOFactory.cxx + * @author David Sarrut + * @date 03 Jul 2006 11:29:10 + * + * @brief + * + * + =================================================*/ + +#include "clitkVoxImageIOFactory.h" + +//==================================================================== +clitk::VoxImageIOFactory::VoxImageIOFactory() +{ + this->RegisterOverride("itkImageIOBase", + "VoxImageIO", + "Vox Image IO", + 1, + itk::CreateObjectFunction::New()); +} + + +#endif /* end #define CLITKVOXIMAGEIOFACTORY_CXX */ + diff --git a/common/clitkVoxImageIOFactory.h b/common/clitkVoxImageIOFactory.h new file mode 100644 index 0000000..81568edd --- /dev/null +++ b/common/clitkVoxImageIOFactory.h @@ -0,0 +1,69 @@ +#ifndef CLITKVOXIMAGEIOFACTORY_H +#define CLITKVOXIMAGEIOFACTORY_H + +/** + =================================================================== + * @file clitkVoxImageIOFactory.h + * @author David Sarrut + * @date 03 Jul 2006 11:27:55 + + * @brief + + ===================================================================*/ + +// clitk include +#include "clitkVoxImageIO.h" + +// itk include +#include "itkImageIOBase.h" +#include "itkObjectFactoryBase.h" +#include "itkVersion.h" + +namespace clitk { + + //==================================================================== + // Factory for reading Vox Image file format + class VoxImageIOFactory: public itk::ObjectFactoryBase + { + public: + /** Standard class typedefs. */ + typedef VoxImageIOFactory Self; + typedef itk::ObjectFactoryBase Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Class methods used to interface with the registered factories. */ + const char* GetITKSourceVersion(void) const { + return ITK_SOURCE_VERSION; + } + + const char* GetDescription(void) const { + return "Vox ImageIO Factory, allows the loading of Vox images into insight"; + } + + /** Method for class instantiation. */ + itkFactorylessNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(VoxImageIOFactory, ObjectFactoryBase); + + /** Register one factory of this type */ + static void RegisterOneFactory(void) { + ObjectFactoryBase::RegisterFactory( Self::New() ); + } + + protected: + VoxImageIOFactory(); + ~VoxImageIOFactory() {}; + typedef VoxImageIOFactory myProductType; + const myProductType* m_MyProduct; + + private: + VoxImageIOFactory(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + }; + +} // end namespace + +#endif /* end #define CLITKVOXIMAGEIOFACTORY_H */ + diff --git a/common/vvFromITK.h b/common/vvFromITK.h new file mode 100644 index 0000000..b45a2b7 --- /dev/null +++ b/common/vvFromITK.h @@ -0,0 +1,116 @@ +/*========================================================================= + + Program: vv + Module: $RCSfile: vvFromITK.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + Author : Joel Schaerer (joel.schaerer@insa-lyon.fr) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ + +#ifndef vvImageFromITK_h +#define vvImageFromITK_h + +#include "vvImage.h" +#include +#include +#include "itkImageToVTKImageFilter.h" + +/**Converts the itk image to vv, handling the 4D problem + * The time_sequence boolean specifies that the image is to be interpreted as a time sequence, + * even if its dim is < 4. */ +template vvImage::Pointer vvImageFromITK(typename itk::Image::Pointer input, bool time_sequence=false) +{ + assert(Dim < 5 && Dim > 0); // We don't handle anything higher than 4-dimensional (for the moment :-p) + vvImage::Pointer vv_image=vvImage::New(); + vv_image->Init(); //Delete any existing images + typedef itk::Image< PixelType, Dim > InputImageType; + + if (Dim == 4 || time_sequence) //The time sequence case: create a series of VTK images + { + typedef itk::Image< PixelType, Dim - 1 > ConnectorImageType; + typedef itk::ImageToVTKImageFilter ConnectorType; + typedef itk::ExtractImageFilter FilterType; + + typename FilterType::Pointer filter = FilterType::New(); + typename ConnectorType::Pointer connector = ConnectorType::New(); + + //extract the 3D slices and put them in a std::vector + typename InputImageType::RegionType inputRegion = input->GetLargestPossibleRegion(); + typename InputImageType::SizeType inputSize = inputRegion.GetSize(); + + typename InputImageType::SizeType extractedRegionSize = inputSize; + typename InputImageType::RegionType extractedRegion; + extractedRegionSize[Dim - 1] = 0; + extractedRegion.SetSize(extractedRegionSize); + + filter->SetInput(input); + connector->SetInput(filter->GetOutput()); + + typename InputImageType::IndexType start = inputRegion.GetIndex(); + + for (unsigned int i = 0; i < inputSize[Dim - 1]; i++) { + start[Dim - 1] = i; + extractedRegion.SetIndex(start); + filter->SetExtractionRegion(extractedRegion); + try { + filter->Update(); + } + catch ( itk::ExceptionObject & err ) { + std::cerr << "Error while setting vvImage from ITK (Dim==4) [Extract phase]" + << " " << err << std::endl; + return vv_image; + } + try { + connector->Update(); + } + catch ( itk::ExceptionObject & err ) { + std::cerr << "Error while setting vvImage from ITK (Dim==4) [Connect phase]" + << " " << err << std::endl; + return vv_image; + } + vtkImageData *image = vtkImageData::New(); + image->DeepCopy(connector->GetOutput()); + vv_image->AddImage(image); + } + } + else //Dim == 1,2,3 and not time_sequence + { + typedef itk::Image< PixelType, Dim > ConnectorImageType; + typedef itk::ImageToVTKImageFilter ConnectorType; + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(input); + + try { + connector->Update(); + } + catch ( itk::ExceptionObject & err ) { + std::cerr << "Error while setting vvImage from ITK (Dim==3)" + << " " << err << std::endl; + return vv_image; + } + vtkImageData *image = vtkImageData::New(); + image->DeepCopy(connector->GetOutput()); + vv_image->AddImage(image); + } + return vv_image; +} + +#endif //vvImageFromITK diff --git a/common/vvImage.cxx b/common/vvImage.cxx new file mode 100644 index 0000000..c0c3aa6 --- /dev/null +++ b/common/vvImage.cxx @@ -0,0 +1,192 @@ +#ifndef VVIMAGE_CXX +#define VVIMAGE_CXX + +/*========================================================================= + +Program: vv +Module: $RCSfile: vvImage.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:32:01 $ +Version: $Revision: 1.1 $ +Author : Pierre Seroul (pierre.seroul@gmail.com) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ + +#include "vvImage.h" +#include "vtkImageData.h" +#include "clitkCommon.h" +#include + +//==================================================================== +vvImage::vvImage() { + mVtkImages.resize(0); +} +//==================================================================== + +//==================================================================== +vvImage::~vvImage() { + for (unsigned int i = 0; i < mVtkImages.size(); i++) { + if (mVtkImages[i] != NULL) + mVtkImages[i]->Delete(); + } +} +//==================================================================== + +//==================================================================== +void vvImage::SetImage(std::vector images) { + for (unsigned int i = 0; i < mVtkImages.size(); i++) { + if (mVtkImages[i] != NULL) + mVtkImages[i]->Delete(); + } + mVtkImages.resize(0); + for (unsigned int i = 0; i < images.size(); i++) { + mVtkImages.push_back(images[i]); + } +} +//==================================================================== + +//==================================================================== +void vvImage::AddImage(vtkImageData* image) { + mVtkImages.push_back(image); +} +//==================================================================== + +//==================================================================== +void vvImage::Init() { + for (unsigned int i = 0; i < mVtkImages.size(); i++) { + if (mVtkImages[i] != NULL) + mVtkImages[i]->Delete(); + } + mVtkImages.resize(0); +} +//==================================================================== + +//==================================================================== +int vvImage::GetNumberOfSpatialDimensions() { + int dim=GetNumberOfDimensions(); + if (IsTimeSequence()) + return dim-1; + else + return dim; +} +//==================================================================== +// +//==================================================================== +int vvImage::GetNumberOfDimensions() const { + if (mVtkImages.size()) + { + int dimension = 2; + int extent[6]; + mVtkImages[0]->GetWholeExtent(extent); + if (extent[5] - extent[4] >= 1) + dimension++; + if (mVtkImages.size() > 1) + dimension++; + return dimension; + } + return 0; +} +//==================================================================== +void vvImage::GetScalarRange(double* range) +{ + assert(mVtkImages.size()); + double * temp = mVtkImages[0]->GetScalarRange(); + range[0]=temp[0];range[1]=temp[1]; + for (unsigned int i=1;iGetScalarRange(); + if (temp[0] < range[0]) range[0]=temp[0]; + if (temp[1] > range[1]) range[1]=temp[1]; + } +} + +//==================================================================== +std::string vvImage::GetScalarTypeAsString() { + return mVtkImages[0]->GetScalarTypeAsString(); +} +//==================================================================== + +//==================================================================== +int vvImage::GetNumberOfScalarComponents() { + return mVtkImages[0]->GetNumberOfScalarComponents(); +} +//==================================================================== + +//==================================================================== +int vvImage::GetScalarSize() { + return mVtkImages[0]->GetScalarSize(); +} +//==================================================================== + +//==================================================================== +std::vector vvImage::GetSpacing() { + std::vector spacing; + int dim = this->GetNumberOfDimensions(); + for (int i = 0; i < dim; i++) + { + if (i == 3) + spacing.push_back(1); + else + spacing.push_back(mVtkImages[0]->GetSpacing()[i]); + } + return spacing; +} +//==================================================================== + +//==================================================================== +std::vector vvImage::GetOrigin() const { + std::vector origin; + int dim = this->GetNumberOfDimensions(); + for (int i = 0; i < dim; i++) + { + if (i == 3) + origin.push_back(0); + else + origin.push_back(mVtkImages[0]->GetOrigin()[i]); + } + return origin; +} +//==================================================================== + +//==================================================================== +std::vector vvImage::GetSize() { + std::vector size0; + int dim = this->GetNumberOfDimensions(); + for (int i = 0; i < dim; i++) + { + if (i == 3) + size0.push_back(mVtkImages.size()); + else + size0.push_back(mVtkImages[0]->GetDimensions()[i]); + } + return size0; +} +//==================================================================== + +//==================================================================== +unsigned long vvImage::GetActualMemorySize() { + unsigned long size = 0; + for (unsigned int i = 0; i < mVtkImages.size(); i++) { + size += mVtkImages[i]->GetActualMemorySize(); + } + return size; +} +//==================================================================== + +#endif // VVIMAGE_CXX diff --git a/common/vvImage.h b/common/vvImage.h new file mode 100644 index 0000000..84aeae5 --- /dev/null +++ b/common/vvImage.h @@ -0,0 +1,72 @@ +/*========================================================================= + + Program: vv + Module: $RCSfile: vvImage.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + Author : Pierre Seroul (pierre.seroul@gmail.com) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ +#ifndef vvImage_h +#define vvImage_h + +#include +#include +#include + +class vtkImageData; + +class vvImage : public itk::LightObject +{ +public : + typedef vvImage Self; + typedef itk::SmartPointer Pointer; + itkNewMacro(Self); + + void Init(); + void SetImage(std::vector images); + void AddImage(vtkImageData* image); + const std::vector& GetVTKImages() { + return mVtkImages; + } + + int GetNumberOfDimensions() const; + int GetNumberOfSpatialDimensions(); + ///Writes the scalar range to the provided array, which must have room for two doubles + void GetScalarRange(double* range); + unsigned long GetActualMemorySize(); + std::vector GetSpacing(); + std::vector GetOrigin() const; + std::vector GetSize(); + std::string GetScalarTypeAsString(); + int GetNumberOfScalarComponents(); + int GetScalarSize(); + bool IsTimeSequence() { + return mVtkImages.size()>1; + } + +private: + vvImage(); + ~vvImage(); + std::vector mVtkImages; + +}; + +#endif diff --git a/common/vvToITK.h b/common/vvToITK.h new file mode 100644 index 0000000..542cea2 --- /dev/null +++ b/common/vvToITK.h @@ -0,0 +1,110 @@ +/*========================================================================= + + Program: vv + Module: $RCSfile: vvToITK.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + Author : Joel Schaerer (joel.schaerer@insa-lyon.fr) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ +#ifndef vvImageToITK_h +#define vvImageToITK_h + +#include +#include "vvImage.h" +#include +#include +#include "itkVTKImageToImageFilter.h" + +///Converts the vv image to itk, handling the 4D problem +template std::vector::ConstPointer> vvImageToITKImageVector(vvImage::Pointer vv_image) ///Converts the vv image to itk, handling the 4D problem +{ + assert(Dim < 5 && Dim > 1); // We don't handle anything higher than 4-dimensional (for the moment :-p) + assert(vv_image->GetVTKImages().size() > 0); //we assume there is something to convert + typedef itk::Image< PixelType, Dim > OutputImageType; + std::vector::ConstPointer> result; + + typedef itk::Image< PixelType, Dim > ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + for (unsigned int i = 0; i < vv_image->GetVTKImages().size(); i++) + { + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(vv_image->GetVTKImages()[i]); + connector->Update(); + result.push_back(connector->GetOutput()); + } + return result; +} + +///Converts the vv image to itk, handling the 4D problem +template typename ImageType::ConstPointer vvImageToITK(vvImage::Pointer vv_image) ///Converts the vv image to itk, handling the 4D problem +{ + const unsigned int Dim=ImageType::ImageDimension; + assert(Dim < 5 && Dim > 0); // We don't handle anything higher than 4-dimensional (for the moment :-p) + typedef ImageType OutputImageType; + + if (Dim==4) + { + typedef itk::Image< typename ImageType::PixelType, 3 > ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + typedef itk::JoinSeriesImageFilter FilterType; + + + typename FilterType::Pointer filter = FilterType::New(); + filter->SetOrigin(vv_image->GetOrigin()[3]); + filter->SetSpacing(vv_image->GetSpacing()[3]); + + for (int i = 0; i < vv_image->GetSize()[3]; i++) + { + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(vv_image->GetVTKImages()[i]); + connector->Update(); + filter->PushBackInput(connector->GetOutput()); + } + filter->Update(); + return filter->GetOutput(); + } + else //Dim == 1,2,3 + { + assert(not vv_image->IsTimeSequence()); //This case isn't implemented + typedef ImageType ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(vv_image->GetVTKImages()[0]); + + connector->Update(); + return connector->GetOutput(); + } +} + +///Converts a single time frame of a vv image to itk. +template typename itk::Image::ConstPointer vvSingleFrameToITK(vvImage::Pointer vv_image,int frame) ///Converts the vv image to itk, handling the 4D problem +{ + assert(Dim < 4 && Dim > 0); + typedef itk::Image< PixelType, Dim > OutputImageType; + typedef itk::Image< PixelType, Dim > ConnectorImageType; + typedef itk::VTKImageToImageFilter ConnectorType; + typename ConnectorType::Pointer connector = ConnectorType::New(); + connector->SetInput(vv_image->GetVTKImages()[frame]); + connector->Update(); + return connector->GetOutput(); +} + +#endif diff --git a/fast_make.sh b/fast_make.sh new file mode 100755 index 0000000..471562c --- /dev/null +++ b/fast_make.sh @@ -0,0 +1,69 @@ +#!/bin/bash +vv_dir=$(dirname $(readlink -e $(which $0))) +echo vv directory: $vv_dir +cd ${vv_dir}/build + +function handle_exit +{ + rm mem_use 2>>/dev/null + killall -s SIGCONT make + killall make + killall cc1plus + echo "Terminated, exiting..." + echo + echo + exit +} + +trap handle_exit SIGINT +available_mem=$(cat /proc/meminfo | grep MemTotal | grep -o [0-9]*) +if [ -a "memory_exhausted_lock" ] +then + echo "Running in memory conservation mode..." + max_cpp_process_mem_use=1600000 + cpus=$(( $available_mem / $max_cpp_process_mem_use )) + echo "Using $cpus cpu(s) should be safe..." + sleep 1 + make -j${cpus} +else #use all the available computing power by default + cpus=$(( $(cat /proc/cpuinfo | grep -c ^processor) + 0 )) +fi + +make -j ${cpus} $@ & +make_pid=$(jobs -p %make) +#watch memory use to avoid crashes +while ps $make_pid >>/dev/null +do + if [ x"$(ps aux | grep cc1plus | grep -v grep | wc -l)" != x0 ] + then + ps ax -o vsize,comm | grep cc1plus | grep -o "\<[0-9]*\>" > mem_use + used_mem=$(awk 'BEGIN {sum=0;} {sum+=$1;} END {print sum;}' mem_use) + if (( "$used_mem"> ($available_mem - 300) )) + then + touch memory_exhausted_lock + echo "Stopping due to exagerated memory use ( $used_mem )" + handle_exit + elif (( "$used_mem"> ($available_mem/2) )) + then + if [ x$high_mem != xtrue ] + then + echo "Warning, high memory use, not spawning any more compilation jobs... ( $used_mem )" + killall -s SIGSTOP make + killall -s SIGCONT cc1plus + high_mem="true" + date_mem=$(date +%s) + fi + echo mem $used_mem / $available_mem + elif [ x$high_mem = xtrue ] && (( $(date +%s) > ( $date_mem + 5 ) )) + then + echo "Memory use back to normal" + high_mem="" + killall -s SIGCONT make + fi + rm mem_use + fi + sleep 1 +done +rm memory_exhausted_lock 2>>/dev/null +echo Done! +echo diff --git a/filters/CMakeLists.txt b/filters/CMakeLists.txt new file mode 100644 index 0000000..0172d19 --- /dev/null +++ b/filters/CMakeLists.txt @@ -0,0 +1,16 @@ +#========================================================= + +#========================================================= +# make clitk libraries + +SET( clitkFilters_SRC +clitkGuerreroVentilationGenericFilter.cxx +clitkImageArithmGenericFilter.cxx +clitkImageConvertGenericFilter.cxx +clitkImageFillRegionGenericFilter.cxx +clitkImageResampleGenericFilter.cxx +clitkSplitImageGenericFilter.cxx +clitkVFResampleGenericFilter.cxx +) + +ADD_LIBRARY(clitkFilters STATIC ${clitkFilters_SRC}) diff --git a/filters/clitkGuerreroVentilationGenericFilter.cxx b/filters/clitkGuerreroVentilationGenericFilter.cxx new file mode 100644 index 0000000..426765b --- /dev/null +++ b/filters/clitkGuerreroVentilationGenericFilter.cxx @@ -0,0 +1,97 @@ +/*========================================================================= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +/** + ------------------------------------------------------------------- + * @file clitkGuerreroVentilationGenericFilter.cxx + * @author Joël Schaerer + * @date 20 April 2009 + + * @brief + -------------------------------------------------------------------*/ + +#include "clitkGuerreroVentilationGenericFilter.h" +#include +#include +//-------------------------------------------------------------------- +clitk::GuerreroVentilationGenericFilter::GuerreroVentilationGenericFilter() +{ + blood_mass_factor=1.; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::GuerreroVentilationGenericFilter::Update () { + + // Determine dim, pixel type, number of components + this->GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents); + + // Switch by dimension + if (mDim == 3) { Update_WithDim<3>(); return; } + if (mDim == 2) { Update_WithDim<2>(); return; } + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2 or 3." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//This is where you put the actual implementation + +#include +#include + + +//-------------------------------------------------------------------- +template +void clitk::GuerreroVentilationGenericFilter::Update_WithDim() { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + // TRY_TYPE(signed char); + // TRY_TYPE(uchar); + TRY_TYPE(short); + //TRY_TYPE(ushort); + // TRY_TYPE(int); +// TRY_TYPE(unsigned int); + //TRY_TYPE(float); + // TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void clitk::GuerreroVentilationGenericFilter::Update_WithDimAndPixelType() { + + // Read input + assert(mInputFilenames.size() == 2); + typedef itk::Image ImageType; + typedef itk::Image OutputImageType; + typename ImageType::Pointer input = clitk::readImage(mInputFilenames[0], mIOVerbose); + typename ImageType::Pointer ref = clitk::readImage(mInputFilenames[1], mIOVerbose); + + + typedef itk::BinaryGuerreroFilter GFilterType; + typename GFilterType::Pointer filter = GFilterType::New(); + filter->SetInput1(ref); + filter->SetInput2(input); + filter->SetBloodCorrectionFactor(blood_mass_factor); + filter->SetUseCorrectFormula(use_correct_formula); + filter->Update(); + this->SetNextOutput(filter->GetOutput()); + //clitk::writeImage(filter->GetOutput(), mOutputFilename, mIOVerbose); + //std::cout << "Warning: removed " << filter->GetFunctor().aberant_voxels << " aberant voxels from the ventilation image" + //<< std::endl; +} diff --git a/filters/clitkGuerreroVentilationGenericFilter.h b/filters/clitkGuerreroVentilationGenericFilter.h new file mode 100644 index 0000000..c3fd2b1 --- /dev/null +++ b/filters/clitkGuerreroVentilationGenericFilter.h @@ -0,0 +1,77 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef clitkGuerreroVentilationGenericFilter_H +#define clitkGuerreroVentilationGenericFilter_H + +/** + ------------------------------------------------------------------- + * @file clitkGuerreroVentilationGenericFilter.h + * @author David Sarrut + * @date 23 Feb 2008 + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkImageIOBase.h" +#include "itkImageRegionIterator.h" +#include "itkImageRegionConstIterator.h" + +namespace clitk { + + //-------------------------------------------------------------------- + class GuerreroVentilationGenericFilter : public ImageToImageGenericFilter { + + public: + + // Constructor + GuerreroVentilationGenericFilter (); + + // Types + typedef GuerreroVentilationGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + // Set methods + void SetBloodCorrectionFactor(double f) {blood_mass_factor=f;} + void SetUseCorrectFormula(bool u) {use_correct_formula=u;} + + // Update + void Update (); + + protected: + //Parameters + double blood_mass_factor; + bool use_correct_formula; + + //-------------------------------------------------------------------- + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + //-------------------------------------------------------------------- + + }; // end class GuerreroVentilationGenericFilter +//-------------------------------------------------------------------- + +} // end namespace +//-------------------------------------------------------------------- + +#endif //#define clitkGuerreroVentilationGenericFilter_H + diff --git a/filters/clitkImageArithmGenericFilter.cxx b/filters/clitkImageArithmGenericFilter.cxx new file mode 100644 index 0000000..2683a93 --- /dev/null +++ b/filters/clitkImageArithmGenericFilter.cxx @@ -0,0 +1,67 @@ +/*========================================================================= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKIMAGEARITHMGENERICFILTER_CXX +#define CLITKIMAGEARITHMGENERICFILTER_CXX + +/** + ------------------------------------------------------------------- + * @file clitkImageArithmGenericFilter.cxx + * @author David Sarrut + * @date 23 Feb 2008 + + * @brief + -------------------------------------------------------------------*/ + +#include "clitkImageArithmGenericFilter.h" + +//-------------------------------------------------------------------- +clitk::ImageArithmGenericFilter::ImageArithmGenericFilter():mTypeOfOperation(0) { + mIsOperationUseASecondImage = false; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageArithmGenericFilter::Update () { + + // Load image header + itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]); + + // Determine dim, pixel type, number of components + mDim = header->GetNumberOfDimensions(); + mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + mNbOfComponents = header->GetNumberOfComponents(); + + if (mInputFilenames.size() == 0) { + std::cerr << "ERROR : please provide at least a input filename." << std::endl; + } + if (mInputFilenames.size() == 1) { + mIsOperationUseASecondImage = false; + } + if (mInputFilenames.size() == 2) { + mIsOperationUseASecondImage = true; + } + if (mInputFilenames.size() > 2) { + std::cerr << "ERROR : please provide only 1 or 2 input filenames." << std::endl; + } + + // Switch by dimension + if (mDim == 2) { Update_WithDim<2>(); return; } + if (mDim == 3) { Update_WithDim<3>(); return; } + if (mDim == 4) { Update_WithDim<4>(); return; } + + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +#endif //define CLITKIMAGEARITHMGENERICFILTER_CXX diff --git a/filters/clitkImageArithmGenericFilter.h b/filters/clitkImageArithmGenericFilter.h new file mode 100644 index 0000000..8844911 --- /dev/null +++ b/filters/clitkImageArithmGenericFilter.h @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEARITHMGENERICFILTER_H +#define CLITKIMAGEARITHMGENERICFILTER_H + +/** + ------------------------------------------------------------------- + * @file clitkImageArithmGenericFilter.h + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + + * @brief + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkImageIOBase.h" +#include "itkImageRegionIterator.h" +#include "itkImageRegionConstIterator.h" + +namespace clitk { + + //-------------------------------------------------------------------- + // Main class for an Image Resample Generic Filter + // (multiple dimensions, multiple pixel types) + class ImageArithmGenericFilter : public clitk::ImageToImageGenericFilter { + + public: + + // Constructor + ImageArithmGenericFilter (); + + // Types + typedef ImageArithmGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + // Set methods + void SetDefaultPixelValue (double value) { mDefaultPixelValue = value ;} + void SetTypeOfOperation (int value) { mTypeOfOperation = value ;} + void SetScalar (double value) { mScalar = value ;} + + // Get methods + double GetDefaultPixelValue () { return mDefaultPixelValue ;} + int GetTypeOfOperation () { return mTypeOfOperation ;} + double GetScalar () { return mScalar ;} + + // Update + void Update (); + + protected: + bool mIsOperationUseASecondImage; + double mScalar; + double mDefaultPixelValue; + int mTypeOfOperation; + + //-------------------------------------------------------------------- + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + + template + typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage); + + template + typename ImageType1::Pointer + ComputeImage(typename ImageType1::Pointer inputImage1, + typename ImageType2::Pointer inputImage2); + //-------------------------------------------------------------------- + + }; // end class ImageArithmGenericFilter +//-------------------------------------------------------------------- + +#include "clitkImageArithmGenericFilter.txx" + +} // end namespace +//-------------------------------------------------------------------- + +#endif //#define CLITKIMAGEARITHMGENERICFILTER_H + diff --git a/filters/clitkImageArithmGenericFilter.txx b/filters/clitkImageArithmGenericFilter.txx new file mode 100644 index 0000000..8557dc0 --- /dev/null +++ b/filters/clitkImageArithmGenericFilter.txx @@ -0,0 +1,241 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEARITHMGENERICFILTER_TXX +#define CLITKIMAGEARITHMGENERICFILTER_TXX + +/*------------------------------------------------- + * @file clitkImageArithmGenericFilter.txx + * @author David Sarrut + * @date 9 August 2006 + * + -------------------------------------------------*/ + +//-------------------------------------------------------------------- +template +void ImageArithmGenericFilter::Update_WithDim() { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + TRY_TYPE(char); + TRY_TYPE(uchar); + TRY_TYPE(short); + TRY_TYPE(ushort); + TRY_TYPE(int); + TRY_TYPE(unsigned int); + TRY_TYPE(float); + TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ImageArithmGenericFilter::Update_WithDimAndPixelType() { + // Read input1 + typedef itk::Image ImageType; + typename ImageType::Pointer input1 = clitk::readImage(mInputFilenames[0], mIOVerbose); + typename ImageType::Pointer outputImage; + + // Read input2 (float is ok altough it could take too memory ...) + if (mIsOperationUseASecondImage) { + typedef itk::Image ImageType2; + typename ImageType2::Pointer input2 = clitk::readImage(mInputFilenames[1], mIOVerbose); + outputImage = ComputeImage(input1, input2); + } + else { + outputImage = ComputeImage(input1); + } + + // Write results + this->SetNextOutput(outputImage); + //clitk::writeImage(outputImage, mOutputFilename, mIOVerbose); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType::Pointer +ImageArithmGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) { + + typedef typename ImageType::PixelType PixelType; + typedef itk::ImageRegionIterator IteratorType; + IteratorType it(inputImage, inputImage->GetLargestPossibleRegion()); + it.GoToBegin(); + + switch (mTypeOfOperation) { + case 0: // Addition + while (!it.IsAtEnd()) { + it.Set(PixelTypeDownCast((double)it.Get() + mScalar) ); + ++it; + } + break; + case 1: // Multiply + while (!it.IsAtEnd()) { + it.Set(PixelTypeDownCast((double)it.Get() * mScalar) ); + ++it; + } + break; + case 2: // Inverse + while (!it.IsAtEnd()) { + if (it.Get() != 0) + it.Set(PixelTypeDownCast(mScalar / (double)it.Get())); + else it.Set(mDefaultPixelValue); + ++it; + } + break; + case 3: // Max + while (!it.IsAtEnd()) { + if (it.Get() < mScalar) it.Set(PixelTypeDownCast(mScalar)); + ++it; + } + break; + case 4: // Min + while (!it.IsAtEnd()) { + if (it.Get() > mScalar) it.Set(PixelTypeDownCast(mScalar)); + ++it; + } + break; + case 5: // Absolute value + while (!it.IsAtEnd()) { + if (it.Get() <= 0) it.Set(PixelTypeDownCast(-it.Get())); + // <= zero to avoid warning for unsigned types + ++it; + } + break; + case 6: // Squared value + while (!it.IsAtEnd()) { + it.Set(PixelTypeDownCast((double)it.Get()*(double)it.Get())); + ++it; + } + break; + case 7: // Log + while (!it.IsAtEnd()) { + if (it.Get() > 0) + it.Set(PixelTypeDownCast(log((double)it.Get()))); + else it.Set(mDefaultPixelValue); + ++it; + } + break; + case 8: // exp + while (!it.IsAtEnd()) { + it.Set(PixelTypeDownCast(exp((double)it.Get()))); + ++it; + } + break; + case 9: // sqrt + while (!it.IsAtEnd()) { + if (it.Get() > 0) + it.Set(PixelTypeDownCast(sqrt((double)it.Get()))); + else { + if (it.Get() ==0) it.Set(0); + else it.Set(mDefaultPixelValue); + } + ++it; + } + break; + default: // error ? + std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl; + exit(-1); + } + + return inputImage; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType1::Pointer +ImageArithmGenericFilter::ComputeImage(typename ImageType1::Pointer inputImage1, + typename ImageType2::Pointer inputImage2) { + + typedef typename ImageType1::PixelType PixelType; + typedef itk::ImageRegionIterator IteratorType; + IteratorType it1(inputImage1, inputImage1->GetLargestPossibleRegion()); + it1.GoToBegin(); + + typedef itk::ImageRegionConstIterator ConstIteratorType; + ConstIteratorType it2(inputImage2, inputImage2->GetLargestPossibleRegion()); + it2.GoToBegin(); + + switch (mTypeOfOperation) { + case 0: // Addition + while (!it1.IsAtEnd()) { + it1.Set(PixelTypeDownCast((double)it1.Get() + (double)it2.Get()) ); + ++it1; ++it2; + } + break; + case 1: // Multiply + while (!it1.IsAtEnd()) { + it1.Set(PixelTypeDownCast((double)it1.Get() * (double)it2.Get()) ); + ++it1; ++it2; + } + break; + case 2: // Divide + while (!it1.IsAtEnd()) { + if (it1.Get() != 0) + it1.Set(PixelTypeDownCast((double)it1.Get() / (double)it2.Get())); + else it1.Set(mDefaultPixelValue); + ++it1; ++it2; + } + break; + case 3: // Max + while (!it1.IsAtEnd()) { + if (it1.Get() < it2.Get()) it1.Set(PixelTypeDownCast(it2.Get())); + ++it1; ++it2; + } + break; + case 4: // Min + while (!it1.IsAtEnd()) { + if (it1.Get() > it2.Get()) it1.Set(PixelTypeDownCast(it2.Get())); + ++it1; ++it2; + } + break; + case 5: // Absolute difference + while (!it1.IsAtEnd()) { + it1.Set(PixelTypeDownCast(fabs(it2.Get()-it1.Get()))); + ++it1; ++it2; + } + break; + case 6: // Squared differences + while (!it1.IsAtEnd()) { + it1.Set(PixelTypeDownCast(pow((double)it1.Get()-(double)it2.Get(),2))); + ++it1; ++it2; + } + break; + case 7: // Difference + while (!it1.IsAtEnd()) { + it1.Set(PixelTypeDownCast((double)it1.Get()-(double)it2.Get())); + ++it1; ++it2; + } + break; + case 8: // Relative Difference + while (!it1.IsAtEnd()) { + if (it1.Get() != 0) it1.Set(PixelTypeDownCast(((double)it1.Get()-(double)it2.Get()))/(double)it1.Get()); + else it1.Set(0.0); + ++it1; ++it2; + } + break; + default: // error ? + std::cerr << "ERROR : the operation number (" << mTypeOfOperation << ") is not known." << std::endl; + exit(-1); + } + + return inputImage1; +} +//-------------------------------------------------------------------- + +#endif //#define CLITKIMAGEARITHMGENERICFILTER_TXX diff --git a/filters/clitkImageConvertGenericFilter.cxx b/filters/clitkImageConvertGenericFilter.cxx new file mode 100644 index 0000000..6afb8ab --- /dev/null +++ b/filters/clitkImageConvertGenericFilter.cxx @@ -0,0 +1,62 @@ +#ifndef CLITKIMAGECONVERTGENERICFILTER_CXX +#define CLITKIMAGECONVERTGENERICFILTER_CXX + +/** + ------------------------------------------------- + * @file clitkImageConvertGenericFilter.cxx + * @author David Sarrut + * @date 05 May 2008 10:57:19 + * + * @brief + * + * + -------------------------------------------------*/ + +#include "clitkImageConvertGenericFilter.h" + +//-------------------------------------------------------------------- +clitk::ImageConvertGenericFilter::ImageConvertGenericFilter():ImageToImageGenericFilter() { + mOutputPixelTypeName = "NotSpecified"; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageConvertGenericFilter::Update() { + // Load image header + itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]); + + // Determine dim, pixel type, number of components + mDim = header->GetNumberOfDimensions(); + mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + mNbOfComponents = header->GetNumberOfComponents(); + + // Verbose stuff + if (mIOVerbose) { + if (mInputFilenames.size() == 1) { + std::cout << "Input image <" << mInputFilenames[0] << "> is "; + printImageHeader(header, std::cout); + std::cout << std::endl; + } + else { + for(unsigned int i=0; i is "; + itk::ImageIOBase::Pointer h = clitk::readImageHeader(mInputFilenames[i]); + printImageHeader(h, std::cout); + std::cout << std::endl; + } + } + } + + // Switch by dimension + if (mInputFilenames.size() > 1) mDim++; + if (mDim == 2) { Update_WithDim<2>(); return; } + if (mDim == 3) { Update_WithDim<3>(); return; } + if (mDim == 4) { Update_WithDim<4>(); return; } + + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGECONVERTGENERICFILTER_CXX */ + diff --git a/filters/clitkImageConvertGenericFilter.h b/filters/clitkImageConvertGenericFilter.h new file mode 100644 index 0000000..50f80ef --- /dev/null +++ b/filters/clitkImageConvertGenericFilter.h @@ -0,0 +1,55 @@ +#ifndef CLITKIMAGECONVERTGENERICFILTER_H +#define CLITKIMAGECONVERTGENERICFILTER_H + +/** + =================================================================== + * @file clitkImageConvertGenericFilter.h + * @author David Sarrut + * @date 05 May 2008 10:40:24 + + * @brief + + ===================================================================*/ + +// clitk include +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkCastImageFilter.h" + +namespace clitk { + + class ImageConvertGenericFilter: public clitk::ImageToImageGenericFilter { + + public: + // constructor - destructor + ImageConvertGenericFilter(); + + // Types + typedef ImageConvertGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + // Members functions + void SetOutputPixelType(std::string p) { mOutputPixelTypeName = p; } + void Update(); + + protected: + std::string mOutputPixelTypeName; + + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + template void Update_WithDimAndPixelTypeAndOutputType(); + + }; // end class ImageConvertGenericFilter + +#include "clitkImageConvertGenericFilter.txx" + +} // end namespace + +#endif /* end #define CLITKIMAGECONVERTGENERICFILTER_H */ + diff --git a/filters/clitkImageConvertGenericFilter.txx b/filters/clitkImageConvertGenericFilter.txx new file mode 100644 index 0000000..28e9e2b --- /dev/null +++ b/filters/clitkImageConvertGenericFilter.txx @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------------= + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +------------------------------------------------------------------------=*/ + +#ifndef CLITKIMAGECONVERTGENERICFILTER_TXX +#define CLITKIMAGECONVERTGENERICFILTER_TXX + +/** + ================================================= + * @file clitkImageConvertGenericFilter.txx + * @author David Sarrut + * @date 05 May 2008 11:14:20 + * + * @brief + * + * + =================================================*/ + +#include + +//==================================================================== +template +void ImageConvertGenericFilter::Update_WithDim() { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + // TRY_TYPE(signed char); + TRY_TYPE(char); + TRY_TYPE(uchar); + TRY_TYPE(short); + TRY_TYPE(ushort); + TRY_TYPE(int); + TRY_TYPE(unsigned int); + TRY_TYPE(float); + TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//==================================================================== + +//==================================================================== +template +void ImageConvertGenericFilter::Update_WithDimAndPixelType() { + if ((mPixelTypeName == mOutputPixelTypeName) || (mOutputPixelTypeName == "NotSpecified")) { + typedef itk::Image InputImageType; + typename InputImageType::Pointer input = clitk::readImage(mInputFilenames); + //clitk::writeImage(input, mOutputFilename, mIOVerbose); + this->SetNextOutput(input); + } + else { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mOutputPixelTypeName)) { Update_WithDimAndPixelTypeAndOutputType(); return; } + TRY_TYPE(char); + // TRY_TYPE(signed char); + TRY_TYPE(uchar); + TRY_TYPE(short); + TRY_TYPE(ushort); + TRY_TYPE(int); // no uint ... + TRY_TYPE(float); + TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the output type '" << mOutputPixelTypeName + << "'. " << std::endl << "Known types are " << list << "." << std::endl; + exit(0); + } +} +//==================================================================== + +//==================================================================== +template +void ImageConvertGenericFilter::Update_WithDimAndPixelTypeAndOutputType() { + // Read + typedef itk::Image InputImageType; + typename InputImageType::Pointer input = clitk::readImage(mInputFilenames); + + // Warning + if (std::numeric_limits::is_signed) { + if (!std::numeric_limits::is_signed) { + std::cerr << "Warning, input type is signed (" << mPixelTypeName << ") while output type is not (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + } + } + if (!std::numeric_limits::is_integer) { + if (std::numeric_limits::is_integer) { + std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + } + } + // DD(std::numeric_limits::digits10); + // DD(std::numeric_limits::digits10); + if (!std::numeric_limits::is_integer) { + if (std::numeric_limits::is_integer) { + std::cerr << "Warning, input type is not integer (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + } + } + if (std::numeric_limits::digits10 > std::numeric_limits::digits10) { + std::cerr << "Warning, possible loss of precision : input type is (" << mPixelTypeName << ") while output type is (" + << mOutputPixelTypeName << "), use at your own responsability." << std::endl; + } + + // Cast + typedef itk::Image OutputImageType; + typedef itk::CastImageFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + filter->SetInput(input); + filter->Update(); + + // Write + SetNextOutput(filter->GetOutput()); + //clitk::writeImage(filter->GetOutput(), mOutputFilename, mIOVerbose); +} +//==================================================================== + +#endif /* end #define CLITKIMAGECONVERTGENERICFILTER_TXX */ + diff --git a/filters/clitkImageFillRegionGenericFilter.cxx b/filters/clitkImageFillRegionGenericFilter.cxx new file mode 100644 index 0000000..59bbff4 --- /dev/null +++ b/filters/clitkImageFillRegionGenericFilter.cxx @@ -0,0 +1,81 @@ +/*========================================================================= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKIMAGEFILLREGIONGENERICFILTER_CXX +#define CLITKIMAGEFILLREGIONGENERICFILTER_CXX + +/** + ------------------------------------------------------------------- + * @file clitkImageFillRegionGenericFilter.cxx + * @author David Sarrut + * @date 23 Feb 2008 + + * @brief + -------------------------------------------------------------------*/ + +#include "clitkImageFillRegionGenericFilter.h" + +//-------------------------------------------------------------------- +clitk::ImageFillRegionGenericFilter::ImageFillRegionGenericFilter() { + mPixelValue = 0; + m_IsCentered=false; + mSphericRegion=false; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::ImageFillRegionGenericFilter::SetSphericRegion(std::vector & radius, + std::vector & center) +{ + mRadius.clear(); + mRadius.resize(radius.size()); + std::copy(radius.begin(), radius.end(), mRadius.begin()); + mCenter.clear(); + mCenter.resize(center.size()); + std::copy(center.begin(), center.end(), mCenter.begin()); + mSphericRegion = true; + m_IsCentered=false; +} + +void clitk::ImageFillRegionGenericFilter::SetSphericRegion(std::vector & radius) { + mRadius.clear(); + mRadius.resize(radius.size()); + std::copy(radius.begin(), radius.end(), mRadius.begin()); + m_IsCentered=true; + mSphericRegion = true; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::ImageFillRegionGenericFilter::Update () { + + // Load image header + itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]); + + // Determine dim, pixel type, number of components + mDim = header->GetNumberOfDimensions(); + mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + mNbOfComponents = header->GetNumberOfComponents(); + + // Switch by dimension + if (mDim == 2) { Update_WithDim<2>(); return; } + if (mDim == 3) { Update_WithDim<3>(); return; } + // if (mDim == 4) { Update_WithDim<4>(); return; } + + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +#endif //define CLITKIMAGEFILLREGIONGENERICFILTER_CXX diff --git a/filters/clitkImageFillRegionGenericFilter.h b/filters/clitkImageFillRegionGenericFilter.h new file mode 100644 index 0000000..ea128b9 --- /dev/null +++ b/filters/clitkImageFillRegionGenericFilter.h @@ -0,0 +1,89 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEFILLREGIONGENERICFILTER_H +#define CLITKIMAGEFILLREGIONGENERICFILTER_H + +/** + ------------------------------------------------------------------- + * @file clitkImageFillRegionGenericFilter.h + * @author David Sarrut + * @date 23 Feb 2008 + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkImageIOBase.h" +#include "itkImageRegionIterator.h" +#include "itkImageRegionConstIterator.h" +#include "itkImageRegionIteratorWithIndex.h" + +namespace clitk { + + //-------------------------------------------------------------------- + class ImageFillRegionGenericFilter : public clitk::ImageToImageGenericFilter { + + public: + + // Constructor + ImageFillRegionGenericFilter (); + ~ImageFillRegionGenericFilter (){;} + + // Types + typedef ImageFillRegionGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + // Set methods + void SetFillPixelValue (double value) { mPixelValue = value; } + void SetRegion(int * size, int * start) { mSize = size; mStart = start ; } + void SetSphericRegion(std::vector & radius, std::vector & center); + void SetSphericRegion(std::vector & radius); + + // Update + void Update (); + + protected: + double mPixelValue; + int * mSize; + int * mStart; + std::vector mCenter; + std::vector mRadius; + bool mSphericRegion; + bool m_IsCentered; + + + //-------------------------------------------------------------------- + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + template void Update_WithDimAndPixelType_SphericRegion(); + //-------------------------------------------------------------------- + + }; // end class ImageFillRegionGenericFilter +//-------------------------------------------------------------------- + +#include "clitkImageFillRegionGenericFilter.txx" + +} // end namespace +//-------------------------------------------------------------------- + +#endif //#define CLITKIMAGEFILLREGIONGENERICFILTER_H + diff --git a/filters/clitkImageFillRegionGenericFilter.txx b/filters/clitkImageFillRegionGenericFilter.txx new file mode 100644 index 0000000..4d81f0e --- /dev/null +++ b/filters/clitkImageFillRegionGenericFilter.txx @@ -0,0 +1,146 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEFILLREGIONGENERICFILTER_TXX +#define CLITKIMAGEFILLREGIONGENERICFILTER_TXX + +/*------------------------------------------------- + * @file clitkImageFillRegionGenericFilter.txx + * @author Cristina Gimenez + * @date 9 August 2006 + * + -------------------------------------------------*/ + +//-------------------------------------------------------------------- +template +void ImageFillRegionGenericFilter::Update_WithDim() { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + // TRY_TYPE(signed char); + // TRY_TYPE(uchar); + TRY_TYPE(short); + //TRY_TYPE(ushort); + // TRY_TYPE(int); + // TRY_TYPE(unsigned int); + TRY_TYPE(float); + // TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ImageFillRegionGenericFilter::Update_WithDimAndPixelType() { + + // Spheric region + if (mSphericRegion) return Update_WithDimAndPixelType_SphericRegion(); + + // Read input + typedef itk::Image ImageType; + typename ImageType::Pointer input = GetInput(0); + + // Get pixel value in correct type + PixelType value = PixelTypeDownCast(mPixelValue); + + // Get region + typedef typename ImageType::RegionType RegionType; + typedef typename ImageType::SizeType SizeType; + typedef typename ImageType::IndexType IndexType; + RegionType region; + SizeType size; + IndexType start; + for(unsigned int i=0; i IteratorType; + IteratorType it(input, region); + it.GoToBegin(); + while (!it.IsAtEnd()) { + it.Set(value); + ++it; + } + + // Write results + SetNextOutput(input); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ImageFillRegionGenericFilter::Update_WithDimAndPixelType_SphericRegion() { + + // Read input + typedef itk::Image ImageType; + //typename ImageType::Pointer input = clitk::readImage(mInputFilenames[0], mIOVerbose); + typename ImageType::Pointer input = GetInput(0); + + // Get pixel value in correct type + PixelType value = PixelTypeDownCast(mPixelValue); + + // Centered? + if(m_IsCentered) + { + typename ImageType::SizeType size= input->GetLargestPossibleRegion().GetSize(); + typename ImageType::SpacingType spacing= input->GetSpacing(); + typename ImageType::PointType origin= input->GetOrigin(); + mCenter.resize(Dim); + for (unsigned int i=0; i IteratorType; + IteratorType it(input, input->GetLargestPossibleRegion()); + it.GoToBegin(); + + typename ImageType::PointType point; + //typename itk::Vector distance; + typename ImageType::IndexType index; + //bool inside; + double distance; + + while (!it.IsAtEnd()) + { + // inside=true; + index=it.GetIndex(); + input->TransformIndexToPhysicalPoint(index, point); + distance=0.0; + for(unsigned int i=0; i(input); +} + +//-------------------------------------------------------------------- + +#endif //#define CLITKIMAGEFILLREGIONGENERICFILTER_TXX diff --git a/filters/clitkImageResampleGenericFilter.cxx b/filters/clitkImageResampleGenericFilter.cxx new file mode 100644 index 0000000..0187e49 --- /dev/null +++ b/filters/clitkImageResampleGenericFilter.cxx @@ -0,0 +1,70 @@ +#ifndef CLITKIMAGERESAMPLEGENERICFILTER2_CXX +#define CLITKIMAGERESAMPLEGENERICFILTER2_CXX + +/** + ------------------------------------------------------------------- + * @file clitkImageResampleGenericFilter.cxx + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + + * @brief + + -------------------------------------------------------------------*/ + +#include "clitkImageResampleGenericFilter.h" + +//-------------------------------------------------------------------- +clitk::ImageResampleGenericFilter::ImageResampleGenericFilter() { + mApplyGaussianFilterBefore = false; + mDefaultPixelValue = 0.0; + mInterpolatorName = "NN"; + mBSplineOrder=3; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageResampleGenericFilter::Update() { + + // Determine dim, pixel type, number of components + this->GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents); + + // Switch by dimension + if (mDim == 2) { Update_WithDim<2>(); return; } + if (mDim == 3) { Update_WithDim<3>(); return; } + if (mDim == 4) { Update_WithDim<4>(); return; } + + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageResampleGenericFilter::SetOutputSize(const std::vector & size) { + mOutputSize.resize(size.size()); + std::copy(size.begin(), size.end(), mOutputSize.begin()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageResampleGenericFilter::SetOutputSpacing(const std::vector & spacing) { + mOutputSpacing.resize(spacing.size()); + std::copy(spacing.begin(), spacing.end(), mOutputSpacing.begin()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageResampleGenericFilter::SetInterpolationName(const std::string & inter) { + mInterpolatorName = inter; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::ImageResampleGenericFilter::SetGaussianSigma(const std::vector & sigma) { + mApplyGaussianFilterBefore = true; + mSigma.resize(sigma.size()); + std::copy(sigma.begin(), sigma.end(), mSigma.begin()); +} +//-------------------------------------------------------------------- + +#endif + diff --git a/filters/clitkImageResampleGenericFilter.h b/filters/clitkImageResampleGenericFilter.h new file mode 100644 index 0000000..d4ccc1f --- /dev/null +++ b/filters/clitkImageResampleGenericFilter.h @@ -0,0 +1,89 @@ +#ifndef CLITKIMAGERESAMPLEGENERICFILTER_H +#define CLITKIMAGERESAMPLEGENERICFILTER_H + +/** + ------------------------------------------------------------------- + * @file clitkImageResampleGenericFilter.h + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + + * @brief + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkImageFileReader.h" +#include "itkImageSeriesReader.h" +#include "itkImageFileWriter.h" +#include "itkRecursiveGaussianImageFilter.h" +#include "itkResampleImageFilter.h" +#include "itkAffineTransform.h" +#include "itkNearestNeighborInterpolateImageFunction.h" +#include "itkLinearInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunctionWithLUT.h" +#include "itkCommand.h" + +namespace clitk { + + //-------------------------------------------------------------------- + class ImageResampleGenericFilter: public clitk::ImageToImageGenericFilter { + + public: + // constructor + ImageResampleGenericFilter(); + + // Types + typedef ImageResampleGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + void SetOutputSize(const std::vector & size); + void SetOutputSpacing(const std::vector & spacing); + void SetGaussianSigma(const std::vector & sigma); + void SetInterpolationName(const std::string & inter); + void SetDefaultPixelValue(double dpv) { mDefaultPixelValue = dpv;} + void SetBSplineOrder(int o) { mBSplineOrder = o; } + void SetBLUTSampling(int b) { mSamplingFactors.resize(1); mSamplingFactors[0] = b; } + + void Update(); + + protected: + //-------------------------------------------------------------------- + std::string mInterpolatorName; + std::vector mOutputSize; + std::vector mOutputSpacing; + std::vector mOutputOrigin; + double mDefaultPixelValue; + bool mApplyGaussianFilterBefore; + std::vector mSigma; + int mBSplineOrder; + std::vector mSamplingFactors; + + //-------------------------------------------------------------------- + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + + //-------------------------------------------------------------------- + template + typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage); + + }; // end class ImageResampleGenericFilter + //-------------------------------------------------------------------- + +#include "clitkImageResampleGenericFilter.txx" + +} // end namespace +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGERESAMPLEGENERICFILTER_H */ + diff --git a/filters/clitkImageResampleGenericFilter.txx b/filters/clitkImageResampleGenericFilter.txx new file mode 100644 index 0000000..bdc33c0 --- /dev/null +++ b/filters/clitkImageResampleGenericFilter.txx @@ -0,0 +1,192 @@ +#ifndef CLITKIMAGERESAMPLEGENERICFILTER_TXX +#define CLITKIMAGERESAMPLEGENERICFILTER_TXX + +/** + ------------------------------------------------= + * @file clitkImageResampleGenericFilter.txx + * @author David Sarrut + * @date 23 Feb 2008 08:40:11 + * + * @brief + * + * + ------------------------------------------------=*/ + +//-------------------------------------------------------------------- +template +void ImageResampleGenericFilter::Update_WithDim() { + +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + TRY_TYPE(signed char); + TRY_TYPE(uchar); + TRY_TYPE(short); + TRY_TYPE(ushort); + TRY_TYPE(int); + TRY_TYPE(unsigned int); + TRY_TYPE(float); + TRY_TYPE(double); +#undef TRY_TYPE + + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ImageResampleGenericFilter::Update_WithDimAndPixelType() { + // Reading input + typedef itk::Image ImageType; + //typename ImageType::Pointer input = clitk::readImage(mInputFilenames, mIOVerbose); + typename ImageType::Pointer input = this->GetInput(0); + + // Main filter + typename ImageType::Pointer outputImage = ComputeImage(input); + + // Write results + this->SetNextOutput(outputImage); + //clitk::writeImage(outputImage, mOutputFilename, mIOVerbose); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType::Pointer +ImageResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) { + + // Warning + if (!std::numeric_limits::is_signed) { + if ((mInterpolatorName == "bspline") || (mInterpolatorName == "blut")) { + std::cerr << "Warning : input pixel type is not signed, use bspline interpolation at your own risk ..." << std::endl; + } + } + + // Check options + static unsigned int dim = ImageType::ImageDimension; + if (mOutputSize.size() != dim) { + std::cerr << "Please set size with " << dim << " dimensions." << std::endl; + return NULL; + } + if (mOutputSpacing.size() != dim) { + std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl; + return NULL; + } + mOutputOrigin.resize(dim); + + if (mApplyGaussianFilterBefore && mSigma.size() != dim) { + std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl; + return NULL; + } + + // Some typedefs + typedef typename ImageType::SizeType SizeType; + typedef typename ImageType::SpacingType SpacingType; + typedef typename ImageType::PointType PointType; + + + // Create Image Filter + typedef itk::ResampleImageFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + + // Instance of the transform object to be passed to the resample + // filter. By default, identity transform is applied + typedef itk::AffineTransform TransformType; + typename TransformType::Pointer transform = TransformType::New(); + filter->SetTransform(transform); + + // Set filter's parameters + SizeType outputSize; + SpacingType outputSpacing; + PointType outputOrigin; + for(unsigned int i=0; iGetOrigin()[i]; + } + + filter->SetSize(outputSize); + filter->SetOutputSpacing(outputSpacing); + filter->SetOutputOrigin(outputOrigin); + filter->SetDefaultPixelValue(static_cast(mDefaultPixelValue));//DS TODO//JV comme ça? + + // Select interpolator + if (mInterpolatorName == "nn") { + typedef itk::NearestNeighborInterpolateImageFunction InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + filter->SetInterpolator(interpolator); + } + else { + if (mInterpolatorName == "linear") { + typedef itk::LinearInterpolateImageFunction InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + filter->SetInterpolator(interpolator); + } + else { + if (mInterpolatorName == "bspline") { + typedef itk::BSplineInterpolateImageFunction InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + interpolator->SetSplineOrder(mBSplineOrder); + filter->SetInterpolator(interpolator); + } + else { + if (mInterpolatorName == "blut") { + typedef itk::BSplineInterpolateImageFunctionWithLUT InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + interpolator->SetSplineOrder(mBSplineOrder); + interpolator->SetLUTSamplingFactor(mSamplingFactors[0]); + filter->SetInterpolator(interpolator); + } + else { + std::cerr << "Sorry, I do not know the interpolator '" << mInterpolatorName + << "'. Known interpolators are : nn, linear, bspline, blut" << std::endl; + exit(0); + } + } + } + } + + // Build initial Gaussian bluring (if needed) + typedef itk::RecursiveGaussianImageFilter GaussianFilterType; + std::vector gaussianFilters; + if (mApplyGaussianFilterBefore) { + for(unsigned int i=0; iSetDirection(i); + gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder); + gaussianFilters[i]->SetNormalizeAcrossScale(false); + gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter ! + // Set input + if (i==0) gaussianFilters[i]->SetInput(inputImage); + else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput()); + } + filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput()); + } + else { + filter->SetInput(inputImage); + } + + // Go ! + try { + filter->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while filtering " << mInputFilenames[0].c_str() + << " " << err << std::endl; + exit(0); + } + + // Return result + return filter->GetOutput(); + +} +//-------------------------------------------------------------------- + + + +#endif /* end #define CLITKIMAGERESAMPLEGENERICFILTER_TXX */ + diff --git a/filters/clitkSplitImageGenericFilter.cxx b/filters/clitkSplitImageGenericFilter.cxx new file mode 100644 index 0000000..bb46dd9 --- /dev/null +++ b/filters/clitkSplitImageGenericFilter.cxx @@ -0,0 +1,49 @@ +/*========================================================================= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +/** + ------------------------------------------------------------------- + * @file clitkSplitImageGenericFilter.cxx + * @author Joël Schaerer + * @date 20 April 2009 + + * @brief + -------------------------------------------------------------------*/ + +#include "clitkSplitImageGenericFilter.h" + +#include "clitkSplitImageGenericFilter.txx" +//-------------------------------------------------------------------- +clitk::SplitImageGenericFilter::SplitImageGenericFilter() { + mSplitDimension = 0; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::SplitImageGenericFilter::Update () { + + // Read the Dimension and PixelType + int Dimension, Components; + std::string PixelType; + ReadImageDimensionAndPixelType(this->mInputFilenames[0], Dimension, PixelType, Components); + + + // Call UpdateWithDim + if(Dimension==3) UpdateWithDim<3>(PixelType, Components); + else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); + else + { + std::cout<<"Error, Only for 3 or 4 Dimensions!!!"< + * @date 23 Feb 2008 + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkImageIOBase.h" +#include "itkImageRegionIterator.h" +#include "itkImageRegionConstIterator.h" + +namespace clitk { + + //-------------------------------------------------------------------- + class SplitImageGenericFilter : public clitk::ImageToImageGenericFilter { + + public: + + // Constructor + SplitImageGenericFilter (); + + // Types + typedef SplitImageGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + // Set methods + void SetSplitDimension (int dim) { mSplitDimension = dim; } + void SetVerbose (const bool v) { m_Verbose = v; } + + // Update + void Update (); + + protected: + int mSplitDimension; + bool m_Verbose; + //-------------------------------------------------------------------- + template void UpdateWithDim(std::string PixelType, int Components); + template void UpdateWithDimAndPixelType(); + //-------------------------------------------------------------------- + + }; // end class SplitImageGenericFilter +//-------------------------------------------------------------------- + +} // end namespace +//-------------------------------------------------------------------- + +#endif //#define clitkSplitImageGenericFilter_H + diff --git a/filters/clitkSplitImageGenericFilter.txx b/filters/clitkSplitImageGenericFilter.txx new file mode 100644 index 0000000..ff7a92e --- /dev/null +++ b/filters/clitkSplitImageGenericFilter.txx @@ -0,0 +1,101 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef clitkSplitImageGenericFilter_TXX +#define clitkSplitImageGenericFilter_TXX + +//This is where you put the actual implementation + +#include +#include + + +//-------------------------------------------------------------------- +template +void clitk::SplitImageGenericFilter::UpdateWithDim(std::string PixelType, int Components) { + + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + else if(PixelType == "unsigned_short"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + UpdateWithDimAndPixelType(); + } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + else if (PixelType == "char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + else if (Components==3) + { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + UpdateWithDimAndPixelType >(); + } + else std::cerr<<"Number of components is "< +void clitk::SplitImageGenericFilter::UpdateWithDimAndPixelType() { + + // Read input + typedef itk::Image ImageType; + typedef itk::Image OutputImageType; + typename ImageType::Pointer input = clitk::readImage(mInputFilenames[0], mIOVerbose); + typedef itk::ExtractImageFilter FilterType; + typename FilterType::Pointer filter= FilterType::New(); + + filter->SetInput(input); + typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize(); + size[mSplitDimension]=0; + typename ImageType::RegionType extracted_region; + extracted_region.SetSize(size); + filter->SetExtractionRegion(extracted_region); + filter->Update(); + + typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex(); + std::string base_filename=GetOutputFilename(); + unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension]; + for (unsigned int i=0;iSetExtractionRegion(extracted_region); + filter->Update(); + SetOutputFilename(base_filename+"_"+ss.str()+".mhd"); + typename OutputImageType::Pointer output=filter->GetOutput(); + SetNextOutput(output); + } +} +//-------------------------------------------------------------------- + +#endif //#define clitkSplitImageGenericFilter_TXX diff --git a/filters/clitkVFResampleGenericFilter.cxx b/filters/clitkVFResampleGenericFilter.cxx new file mode 100644 index 0000000..9eb995b --- /dev/null +++ b/filters/clitkVFResampleGenericFilter.cxx @@ -0,0 +1,74 @@ +#ifndef CLITKVFRESAMPLEGENERICFILTER_CXX +#define CLITKVFRESAMPLEGENERICFILTER_CXX + +/** + ------------------------------------------------------------------- + * @file clitkVFResampleGenericFilter.cxx + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + + * @brief + + -------------------------------------------------------------------*/ + +#include "clitkVFResampleGenericFilter.h" + +//-------------------------------------------------------------------- +clitk::VFResampleGenericFilter::VFResampleGenericFilter() { + mApplyGaussianFilterBefore = false; + mDefaultPixelValue = 0.0; + mInterpolatorName = "NN"; + mBSplineOrder=3; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::VFResampleGenericFilter::Update() { + // Load image header + itk::ImageIOBase::Pointer header = clitk::readImageHeader(mInputFilenames[0]); + + // Determine dim, pixel type, number of components + mDim = header->GetNumberOfDimensions(); + mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + mNbOfComponents = header->GetNumberOfComponents(); + + // Switch by dimension + if (mDim == 2) { Update_WithDim<2>(); return; } + if (mDim == 3) { Update_WithDim<3>(); return; } + if (mDim == 4) { Update_WithDim<4>(); return; } + + std::cerr << "Error, dimension of input image is " << mDim << ", but I only work with 2,3,4." << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::VFResampleGenericFilter::SetOutputSize(const std::vector & size) { + mOutputSize.resize(size.size()); + std::copy(size.begin(), size.end(), mOutputSize.begin()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::VFResampleGenericFilter::SetOutputSpacing(const std::vector & spacing) { + mOutputSpacing.resize(spacing.size()); + std::copy(spacing.begin(), spacing.end(), mOutputSpacing.begin()); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::VFResampleGenericFilter::SetInterpolationName(const std::string & inter) { + mInterpolatorName = inter; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void clitk::VFResampleGenericFilter::SetGaussianSigma(const std::vector & sigma) { + mApplyGaussianFilterBefore = true; + mSigma.resize(sigma.size()); + std::copy(sigma.begin(), sigma.end(), mSigma.begin()); +} +//-------------------------------------------------------------------- + +#endif + diff --git a/filters/clitkVFResampleGenericFilter.h b/filters/clitkVFResampleGenericFilter.h new file mode 100644 index 0000000..b1c4568 --- /dev/null +++ b/filters/clitkVFResampleGenericFilter.h @@ -0,0 +1,93 @@ +#ifndef CLITKIMAGERESAMPLEGENERICFILTER_H +#define CLITKIMAGERESAMPLEGENERICFILTER_H + +/** + ------------------------------------------------------------------- + * @file clitkVFResampleGenericFilter.h + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + + * @brief + -------------------------------------------------------------------*/ + +// clitk include +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkImageToImageGenericFilter.h" + +// itk include +#include "itkImage.h" +#include "itkVectorImage.h" +#include "itkFixedArray.h" +#include "itkImageFileReader.h" +#include "itkImageSeriesReader.h" +#include "itkImageFileWriter.h" +#include "itkRecursiveGaussianImageFilter.h" +#include "itkVectorResampleImageFilter.h" +#include "itkAffineTransform.h" +#include "itkVectorNearestNeighborInterpolateImageFunction.h" +#include "itkVectorLinearInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunctionWithLUT.h" +#include "itkCommand.h" + +namespace clitk { + + //-------------------------------------------------------------------- + class VFResampleGenericFilter: public clitk::ImageToImageGenericFilter { + + public: + // constructor + VFResampleGenericFilter(); + + // Types + typedef VFResampleGenericFilter Self; + typedef ImageToImageGenericFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // New + itkNewMacro(Self); + + void SetOutputSize(const std::vector & size); + void SetOutputSpacing(const std::vector & spacing); + void SetGaussianSigma(const std::vector & sigma); + void SetInterpolationName(const std::string & inter); + void SetDefaultPixelValue(double dpv) { mDefaultPixelValue = dpv;} + void SetBSplineOrder(int o) { mBSplineOrder = o; } + void SetBLUTSampling(int b) { mSamplingFactors.resize(1); mSamplingFactors[0] = b; } + + void Update(); + + protected: + //-------------------------------------------------------------------- + std::string mInterpolatorName; + std::vector mOutputSize; + std::vector mOutputSpacing; + std::vector mOutputOrigin; + double mDefaultPixelValue; + bool mApplyGaussianFilterBefore; + std::vector mSigma; + int mBSplineOrder; + std::vector mSamplingFactors; + + //-------------------------------------------------------------------- + template void Update_WithDim(); + template void Update_WithDimAndPixelType(); + template + void Update_WithDimAndPixelTypeAndComponent(); + + //-------------------------------------------------------------------- + template + typename ImageType::Pointer ComputeImage(typename ImageType::Pointer inputImage); + + }; // end class VFResampleGenericFilter + //-------------------------------------------------------------------- + +#include "clitkVFResampleGenericFilter.txx" + +} // end namespace +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGERESAMPLEGENERICFILTER_H */ + diff --git a/filters/clitkVFResampleGenericFilter.txx b/filters/clitkVFResampleGenericFilter.txx new file mode 100644 index 0000000..98f3c06 --- /dev/null +++ b/filters/clitkVFResampleGenericFilter.txx @@ -0,0 +1,172 @@ +#ifndef CLITKVFRESAMPLEGENERICFILTER_TXX +#define CLITKVFRESAMPLEGENERICFILTER_TXX + +/** + ------------------------------------------------= + * @file clitkVFResampleGenericFilter.txx + * @author David Sarrut + * @date 23 Feb 2008 08:40:11 + * + * @brief + * + * + ------------------------------------------------=*/ + +//-------------------------------------------------------------------- +template +void VFResampleGenericFilter::Update_WithDim() { +#define TRY_TYPE(TYPE) \ + if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } + TRY_TYPE(float); +#undef TRY_TYPE + std::string list = CreateListOfTypes(); + std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" + << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; + exit(0); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void VFResampleGenericFilter::Update_WithDimAndPixelType() { + + if (mNbOfComponents == 1) { + std::cerr << "Error, only one components ? Use clitkImageResample instead." << std::endl; + exit(0); + } + if (mNbOfComponents == 2) Update_WithDimAndPixelTypeAndComponent(); + if (mNbOfComponents == 3) Update_WithDimAndPixelTypeAndComponent(); + if (mNbOfComponents == 4) Update_WithDimAndPixelTypeAndComponent(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void VFResampleGenericFilter::Update_WithDimAndPixelTypeAndComponent() { + // Reading input + typedef itk::Vector DisplacementType; + typedef itk::Image< DisplacementType, Dim > ImageType; + + typename ImageType::Pointer input = clitk::readImage(mInputFilenames, mIOVerbose); + + // Main filter + typename ImageType::Pointer outputImage = ComputeImage(input); + + // Write results + SetNextOutput(outputImage); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename ImageType::Pointer +VFResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) { + + // Check options + static unsigned int dim = ImageType::ImageDimension; + if (mOutputSize.size() != dim) { + std::cerr << "Please set size with " << dim << " dimensions." << std::endl; + return NULL; + } + if (mOutputSpacing.size() != dim) { + std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl; + return NULL; + } + mOutputOrigin.resize(dim); + + if (mApplyGaussianFilterBefore && mSigma.size() != dim) { + std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl; + return NULL; + } + + // Some typedefs + typedef typename ImageType::SizeType SizeType; + typedef typename ImageType::SpacingType SpacingType; + typedef typename ImageType::PointType PointType; + + // Create Image Filter + typedef itk::VectorResampleImageFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + + // Instance of the transform object to be passed to the resample + // filter. By default, identity transform is applied + typedef itk::AffineTransform TransformType; + typename TransformType::Pointer transform = TransformType::New(); + filter->SetTransform(transform); + + // Set filter's parameters + SizeType outputSize; + SpacingType outputSpacing; + PointType outputOrigin; + for(unsigned int i=0; iGetOrigin()[i]; + } + + filter->SetSize(outputSize); + filter->SetOutputSpacing(outputSpacing); + filter->SetOutputOrigin(outputOrigin); + filter->SetDefaultPixelValue(static_cast(mDefaultPixelValue)); + + // Select interpolator + if (mInterpolatorName == "nn") { + typedef itk::VectorNearestNeighborInterpolateImageFunction InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + filter->SetInterpolator(interpolator); + } + else { + if (mInterpolatorName == "linear") { + typedef itk::VectorLinearInterpolateImageFunction InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + filter->SetInterpolator(interpolator); + } + else { + std::cerr << "Sorry, I do not know the interpolator (for vector field) '" << mInterpolatorName + << "'. Known interpolators are : nn, linear" << std::endl; + exit(0); + } + } + + // Build initial Gaussian bluring (if needed) + typedef itk::RecursiveGaussianImageFilter GaussianFilterType; + std::vector gaussianFilters; + if (mApplyGaussianFilterBefore) { + for(unsigned int i=0; iSetDirection(i); + gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder); + gaussianFilters[i]->SetNormalizeAcrossScale(false); + gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter ! + // Set input + if (i==0) gaussianFilters[i]->SetInput(inputImage); + else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput()); + } + filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput()); + } + else { + filter->SetInput(inputImage); + } + + // Go ! + try { + filter->Update(); + } + catch( itk::ExceptionObject & err ) { + std::cerr << "Error while filtering " << mInputFilenames[0].c_str() + << " " << err << std::endl; + exit(0); + } + + // Return result + return filter->GetOutput(); + +} +//-------------------------------------------------------------------- + + + +#endif /* end #define CLITKVFRESAMPLEGENERICFILTER_TXX */ + diff --git a/itk/clitkForwardWarpImageFilter.h b/itk/clitkForwardWarpImageFilter.h new file mode 100644 index 0000000..a02c9e5 --- /dev/null +++ b/itk/clitkForwardWarpImageFilter.h @@ -0,0 +1,106 @@ +#ifndef __clitkForwardWarpImageFilter_h +#define __clitkForwardWarpImageFilter_h + +//clitk include +#include "clitkIOCommon.h" + +//itk include +#include "itkImageToImageFilter.h" +#include "itkImage.h" +#include "itkImageRegionIterator.h" +#include "itkImageRegionIteratorWithIndex.h" +#include "itkNumericTraits.h" +#include "itkSimpleFastMutexLock.h" + +namespace clitk +{ + + template < class InputImageType, class OutputImageType, class DeformationFieldType > + class ForwardWarpImageFilter : public itk::ImageToImageFilter + + { + public: + typedef ForwardWarpImageFilter Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Determine the image dimension. */ + itkStaticConstMacro(ImageDimension, unsigned int, + InputImageType::ImageDimension ); + itkStaticConstMacro(InputImageDimension, unsigned int, + OutputImageType::ImageDimension ); + itkStaticConstMacro(DeformationFieldDimension, unsigned int, + DeformationFieldType::ImageDimension ); + + + //Some other typedefs + typedef double CoordRepType; + typedef itk::Image WeightsImageType; + typedef itk::Image MutexImageType; + + /** Point type */ + typedef itk::Point PointType; + + /** Inherit some types from the superclass. */ + typedef typename OutputImageType::IndexType IndexType; + typedef typename OutputImageType::SizeType SizeType; + typedef typename OutputImageType::PixelType PixelType; + typedef typename OutputImageType::SpacingType SpacingType; + + //Set & Get Methods (inline) + itkSetMacro( Verbose, bool); + itkSetMacro( EdgePaddingValue, PixelType ); + itkSetMacro( DeformationField, typename DeformationFieldType::Pointer); + void SetNumberOfThreads(unsigned int r ) + { + m_NumberOfThreadsIsGiven=true; + m_NumberOfThreads=r; + } + itkSetMacro(ThreadSafe, bool); + + + //ITK concept checking, why not? +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(SameDimensionCheck1, + (itk::Concept::SameDimension)); + itkConceptMacro(SameDimensionCheck2, + (itk::Concept::SameDimension)); + itkConceptMacro(InputHasNumericTraitsCheck, + (itk::Concept::HasNumericTraits)); + itkConceptMacro(DeformationFieldHasNumericTraitsCheck, + (itk::Concept::HasNumericTraits)); + /** End concept checking */ +#endif + + protected: + ForwardWarpImageFilter(); + ~ForwardWarpImageFilter() {}; + void GenerateData( ); + + + private: + bool m_Verbose; + bool m_NumberOfThreadsIsGiven; + unsigned int m_NumberOfThreads; + PixelType m_EdgePaddingValue; + typename DeformationFieldType::Pointer m_DeformationField; + bool m_ThreadSafe; + + }; + + + + + +} // end namespace clitk +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkForwardWarpImageFilter.txx" +#endif + +#endif // #define __clitkForwardWarpImageFilter_h diff --git a/itk/clitkForwardWarpImageFilter.txx b/itk/clitkForwardWarpImageFilter.txx new file mode 100644 index 0000000..9ea647e --- /dev/null +++ b/itk/clitkForwardWarpImageFilter.txx @@ -0,0 +1,499 @@ +#ifndef __clitkForwardWarpImageFilter_txx +#define __clitkForwardWarpImageFilter_txx + +#include "clitkForwardWarpImageFilter.h" +#include "clitkIOCommon.h" + +// Put the helper classes in an anonymous namespace so that it is not +// exposed to the user + +namespace +{//nameless namespace + + //========================================================================================================================= + //helper class 1 to allow a threaded execution: add contributions of input to output and update weights + //========================================================================================================================= + template class HelperClass1 : public itk::ImageToImageFilter + { + + public: + /** Standard class typedefs. */ + typedef HelperClass1 Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( HelperClass1, ImageToImageFilter ); + + /** Constants for the image dimensions */ + itkStaticConstMacro(ImageDimension, unsigned int,InputImageType::ImageDimension); + + + //Typedefs + typedef typename OutputImageType::PixelType OutputPixelType; + typedef itk::Image WeightsImageType; + typedef itk::Image MutexImageType; + //=================================================================================== + //Set methods + void SetWeights(const typename WeightsImageType::Pointer input) + { + m_Weights = input; + this->Modified(); + } + void SetDeformationField(const typename DeformationFieldType::Pointer input) + { + m_DeformationField=input; + this->Modified(); + } + void SetMutexImage(const typename MutexImageType::Pointer input) + { + m_MutexImage=input; + this->Modified(); + m_ThreadSafe=true; + } + + //Get methods + typename WeightsImageType::Pointer GetWeights(){return m_Weights;} + + /** Typedef to describe the output image region type. */ + typedef typename OutputImageType::RegionType OutputImageRegionType; + + protected: + HelperClass1(); + ~HelperClass1(){}; + + //the actual processing + void BeforeThreadedGenerateData(); + void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ); + + //member data + typename itk::Image< double, ImageDimension>::Pointer m_Weights; + typename DeformationFieldType::Pointer m_DeformationField; + typename MutexImageType::Pointer m_MutexImage; + bool m_ThreadSafe; + + }; + + + + //========================================================================================================================= + //Member functions of the helper class 1 + //========================================================================================================================= + + + //========================================================================================================================= + //Empty constructor + template + HelperClass1::HelperClass1() + { + m_ThreadSafe=false; + } + + + //========================================================================================================================= + //Before threaded data + template + void HelperClass1::BeforeThreadedGenerateData() + { + //Since we will add, put to zero! + this->GetOutput()->FillBuffer(itk::NumericTraits::Zero); + this->GetWeights()->FillBuffer(itk::NumericTraits::Zero); + } + + + //========================================================================================================================= + //update the output for the outputRegionForThread + template + void HelperClass1::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ) + { + + //Get pointer to the input + typename InputImageType::ConstPointer inputPtr = this->GetInput(); + + //Get pointer to the output + typename OutputImageType::Pointer outputPtr = this->GetOutput(); + typename OutputImageType::SizeType size=outputPtr->GetLargestPossibleRegion().GetSize(); + + //Iterators over input and deformation field + typedef itk::ImageRegionConstIteratorWithIndex InputImageIteratorType; + typedef itk::ImageRegionIterator DeformationFieldIteratorType; + + //define them over the outputRegionForThread + InputImageIteratorType inputIt(inputPtr, outputRegionForThread); + DeformationFieldIteratorType fieldIt(m_DeformationField,outputRegionForThread); + + //Initialize + typename InputImageType::IndexType index; + itk::ContinuousIndex contIndex; + typename InputImageType::PointType point; + typedef typename DeformationFieldType::PixelType DisplacementType; + DisplacementType displacement; + fieldIt.GoToBegin(); + inputIt.GoToBegin(); + + //define some temp variables + signed long baseIndex[ImageDimension]; + double distance[ImageDimension]; + unsigned int dim, counter, upper; + double overlap, totalOverlap; + typename OutputImageType::IndexType neighIndex; + + //Find the number of neighbors + unsigned int neighbors = 1 << ImageDimension; + + + //================================================================================================== + //Loop over the region and add the intensities to the output and the weight to the weights + //================================================================================================== + while( !inputIt.IsAtEnd() ) + { + + // get the input image index + index = inputIt.GetIndex(); + inputPtr->TransformIndexToPhysicalPoint( index, point ); + + // get the required displacement + displacement = fieldIt.Get(); + + // compute the required output image point + for(unsigned int j = 0; j < ImageDimension; j++ ) point[j] += displacement[j]; + + + // Update the output and the weights + if(outputPtr->TransformPhysicalPointToContinuousIndex(point, contIndex ) ) + { + for(dim = 0; dim < ImageDimension; dim++) + { + // The following block is equivalent to the following line without + // having to call floor. For positive inputs!!! + // baseIndex[dim] = (long) vcl_floor(contIndex[dim] ); + baseIndex[dim] = (long) contIndex[dim]; + distance[dim] = contIndex[dim] - double( baseIndex[dim] ); + } + + //Add contribution for each neighbor + totalOverlap = itk::NumericTraits::Zero; + for( counter = 0; counter < neighbors ; counter++ ) + { + overlap = 1.0; // fraction overlap + upper = counter; // each bit indicates upper/lower neighbour + + // get neighbor index and overlap fraction + for( dim = 0; dim < 3; dim++ ) + { + if ( upper & 1 ) + { + neighIndex[dim] = baseIndex[dim] + 1; + overlap *= distance[dim]; + } + else + { + neighIndex[dim] = baseIndex[dim]; + overlap *= 1.0 - distance[dim]; + } + upper >>= 1; + } + + //Set neighbor value only if overlap is not zero + if( (overlap>0.0)) // && + // (static_cast(neighIndex[0])(neighIndex[1])(neighIndex[2])=0) && + // (neighIndex[1]>=0) && + // (neighIndex[2]>=0) ) + { + + if (! m_ThreadSafe) + { + //Set the pixel and weight at neighIndex + outputPtr->SetPixel(neighIndex, outputPtr->GetPixel(neighIndex) + overlap * static_cast(inputIt.Get())); + m_Weights->SetPixel(neighIndex, m_Weights->GetPixel(neighIndex) + overlap); + + } + else + { + //Entering critilal section: shared memory + m_MutexImage->GetPixel(neighIndex).Lock(); + + //Set the pixel and weight at neighIndex + outputPtr->SetPixel(neighIndex, outputPtr->GetPixel(neighIndex) + overlap * static_cast(inputIt.Get())); + m_Weights->SetPixel(neighIndex, m_Weights->GetPixel(neighIndex) + overlap); + + //Unlock + m_MutexImage->GetPixel(neighIndex).Unlock(); + + } + //Add to total overlap + totalOverlap += overlap; + } + + //check for totaloverlap: not very likely + if( totalOverlap == 1.0 ) + { + // finished + break; + } + } + } + + ++fieldIt; + ++inputIt; + } + + + } + + + + //========================================================================================================================= + //helper class 2 to allow a threaded execution of normalisation by the weights + //========================================================================================================================= + template + class HelperClass2 : public itk::ImageToImageFilter + { + + public: + /** Standard class typedefs. */ + typedef HelperClass2 Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( HelperClass2, ImageToImageFilter ); + + /** Constants for the image dimensions */ + itkStaticConstMacro(ImageDimension, unsigned int,InputImageType::ImageDimension); + + //Typedefs + typedef typename InputImageType::PixelType InputPixelType; + typedef typename OutputImageType::PixelType OutputPixelType; + typedef itk::Image WeightsImageType; + + + //Set methods + void SetWeights(const typename WeightsImageType::Pointer input) + { + m_Weights = input; + this->Modified(); + } + void SetEdgePaddingValue(OutputPixelType value) + { + m_EdgePaddingValue = value; + this->Modified(); + } + + /** Typedef to describe the output image region type. */ + typedef typename OutputImageType::RegionType OutputImageRegionType; + + protected: + HelperClass2(); + ~HelperClass2(){}; + + + //the actual processing + void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ); + + + //member data + typename WeightsImageType::Pointer m_Weights; + OutputPixelType m_EdgePaddingValue; + } ; + + + + //========================================================================================================================= + //Member functions of the helper class 2 + //========================================================================================================================= + + + //========================================================================================================================= + //Empty constructor + template + HelperClass2::HelperClass2() + { + m_EdgePaddingValue=static_cast(0.0); + } + + + //========================================================================================================================= + //update the output for the outputRegionForThread + template void + HelperClass2::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ) + { + + //Get pointer to the input + typename InputImageType::ConstPointer inputPtr = this->GetInput(); + + //Get pointer to the output + typename OutputImageType::Pointer outputPtr = this->GetOutput(); + + //Iterators over input, weigths and output + typedef itk::ImageRegionConstIterator InputImageIteratorType; + typedef itk::ImageRegionIterator OutputImageIteratorType; + typedef itk::ImageRegionIterator WeightsImageIteratorType; + + //define them over the outputRegionForThread + OutputImageIteratorType outputIt(outputPtr, outputRegionForThread); + InputImageIteratorType inputIt(inputPtr, outputRegionForThread); + WeightsImageIteratorType weightsIt(m_Weights, outputRegionForThread); + + + //================================================================================================== + //loop over the output and normalize the input, remove holes + OutputPixelType neighValue; + double zero = itk::NumericTraits::Zero; + while (!outputIt.IsAtEnd()) + { + //the weight is not zero + if (weightsIt.Get() != zero) + { + //divide by the weight + outputIt.Set(static_cast(inputIt.Get()/weightsIt.Get())); + } + + //copy the value of the neighbour that was just processed + else + { + if(!outputIt.IsAtBegin()) + { + //go back + --outputIt; + neighValue=outputIt.Get(); + ++outputIt; + outputIt.Set(neighValue); + } + else{ + //DD("is at begin, setting edgepadding value"); + outputIt.Set(m_EdgePaddingValue); + } + } + ++weightsIt; + ++outputIt; + ++inputIt; + + }//end while + }//end member + + +}//end nameless namespace + + + +namespace clitk +{ + + //========================================================================================================================= + // The rest is the ForwardWarpImageFilter + //========================================================================================================================= + + //========================================================================================================================= + //constructor + template + ForwardWarpImageFilter::ForwardWarpImageFilter() + { + // mIsUpdated=false; + m_NumberOfThreadsIsGiven=false; + m_EdgePaddingValue=static_cast(0.0); + m_ThreadSafe=false; + m_Verbose=false; + } + + + //========================================================================================================================= + //Update + template + void ForwardWarpImageFilter::GenerateData() + { + + //Get the properties of the input + typename InputImageType::ConstPointer inputPtr=this->GetInput(); + typename WeightsImageType::RegionType region; + typename WeightsImageType::RegionType::SizeType size=inputPtr->GetLargestPossibleRegion().GetSize(); + region.SetSize(size); + typename OutputImageType::IndexType start; + for (unsigned int i =0; i< ImageDimension ;i ++)start[i]=0; + region.SetIndex(start); + + //Allocate the weights + typename WeightsImageType::Pointer weights=ForwardWarpImageFilter::WeightsImageType::New(); + weights->SetRegions(region); + weights->Allocate(); + weights->SetSpacing(inputPtr->GetSpacing()); + + + //=========================================================================== + //warp is divided in in two loops, for each we call a threaded helper class + //1. Add contribution of input to output and update weights + //2. Normalize the output by the weight and remove holes + //=========================================================================== + + //=========================================================================== + //1. Add contribution of input to output and update weights + + //Define an internal image type in double precision + typedef itk::Image InternalImageType; + + //Call threaded helper class 1 + typedef HelperClass1 HelperClass1Type; + typename HelperClass1Type::Pointer helper1=HelperClass1Type::New(); + + //Set input + if(m_NumberOfThreadsIsGiven)helper1->SetNumberOfThreads(m_NumberOfThreads); + helper1->SetInput(inputPtr); + helper1->SetDeformationField(m_DeformationField); + helper1->SetWeights(weights); + + //Threadsafe? + if(m_ThreadSafe) + { + //Allocate the mutex image + typename MutexImageType::Pointer mutex=ForwardWarpImageFilter::MutexImageType::New(); + mutex->SetRegions(region); + mutex->Allocate(); + mutex->SetSpacing(inputPtr->GetSpacing()); + helper1->SetMutexImage(mutex); + if (m_Verbose) std::cout <<"Forwarp warping using a thread-safe algorithm" <Update(); + + //Get the output + typename InternalImageType::Pointer temp= helper1->GetOutput(); + + //For clarity + weights=helper1->GetWeights(); + + + //=========================================================================== + //2. Normalize the output by the weights and remove holes + //Call threaded helper class + typedef HelperClass2 HelperClass2Type; + typename HelperClass2Type::Pointer helper2=HelperClass2Type::New(); + + //Set temporary output as input + if(m_NumberOfThreadsIsGiven)helper2->SetNumberOfThreads(m_NumberOfThreads); + helper2->SetInput(temp); + helper2->SetWeights(weights); + helper2->SetEdgePaddingValue(m_EdgePaddingValue); + + //Execute helper class + helper2->Update(); + + //Set the output + this->SetNthOutput(0, helper2->GetOutput()); + } + +} + +#endif diff --git a/itk/clitkGenericInterpolator.h b/itk/clitkGenericInterpolator.h new file mode 100644 index 0000000..4ce15f6 --- /dev/null +++ b/itk/clitkGenericInterpolator.h @@ -0,0 +1,79 @@ +#ifndef __clitkGenericInterpolator_h +#define __clitkGenericInterpolator_h + +//clitk include +#include "clitkIOCommon.h" + +//itk include +#include "itkNearestNeighborInterpolateImageFunction.h" +#include "itkLinearInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunction.h" +#include "itkBSplineInterpolateImageFunctionWithLUT.h" + + +/* + +Requires at least the following section is the .ggo file + +option "interp" - "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT" int no default="1" +option "interpOrder" - "Order if BLUT or BSpline (0-5)" int no default="3" +option "interpSF" - "Sampling factor if BLUT" int no default="20" + +The use will something like + +typedef clitk::GenericVectorInterpolator GenericVectorInterpolatorType; +typename GenericVectorInterpolatorType::Pointer genericInterpolator=GenericVectorInterpolatorType::New(); +genericInterpolator->SetArgsInfo(m_ArgsInfo); +typedef itk::VectorInterpolateImageFunction InterpolatorType; +typename InterpolatorType::Pointer interpolator=genericInterpolator->GetInterpolatorPointer(); + +*/ + +namespace clitk +{ + + template + class GenericInterpolator : public itk::LightObject + { + public: + //============================================== + typedef GenericInterpolator Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + typedef itk::InterpolateImageFunction InterpolatorType; + typedef typename InterpolatorType::Pointer InterpolatorPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + //============================================== + //Set members + void SetArgsInfo(args_info_type args_info) + { + m_ArgsInfo= args_info; + m_Verbose=m_ArgsInfo.verbose_flag; + } + + //============================================== + //Get members + InterpolatorPointer GetInterpolatorPointer(void); + + //============================================== + protected: + GenericInterpolator(); + ~GenericInterpolator() {}; + + private: + args_info_type m_ArgsInfo; + InterpolatorPointer m_Interpolator; + bool m_Verbose; + }; + +} // end namespace clitk +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkGenericInterpolator.txx" +#endif + +#endif // #define __clitkGenericInterpolator_h diff --git a/itk/clitkGenericInterpolator.txx b/itk/clitkGenericInterpolator.txx new file mode 100644 index 0000000..04a8b6f --- /dev/null +++ b/itk/clitkGenericInterpolator.txx @@ -0,0 +1,75 @@ +#ifndef __clitkGenericInterpolator_txx +#define __clitkGenericInterpolator_txx + +#include "clitkGenericInterpolator.h" + + +namespace clitk +{ + + //========================================================================================================================= + //constructor + template + GenericInterpolator::GenericInterpolator() + { + m_Interpolator=NULL; + m_Verbose=false; + } + + + //========================================================================================================================= + //Get the pointer + template + typename GenericInterpolator::InterpolatorPointer + GenericInterpolator::GetInterpolatorPointer() + { + //============================================================================ + // We retrieve the type of interpolation from the command line + //============================================================================ + typename InterpolatorType::Pointer interpolator; + + switch ( m_ArgsInfo.interp_arg ) + { + case 0: + + interpolator= itk::NearestNeighborInterpolateImageFunction< ImageType,TCoordRep >::New(); + if (m_Verbose) std::cout<<"Using nearestneighbor interpolation..."<::New(); + if (m_Verbose) std::cout<<"Using linear interpolation..."<::Pointer m =itk::BSplineInterpolateImageFunction< ImageType,TCoordRep >::New(); + m->SetSplineOrder(m_ArgsInfo.interpOrder_arg); + interpolator=m; + if (m_Verbose) std::cout<<"Using Bspline interpolation..."<::Pointer m =itk::BSplineInterpolateImageFunctionWithLUT< ImageType,TCoordRep >::New(); + m->SetSplineOrder(m_ArgsInfo.interpOrder_arg); + m->SetLUTSamplingFactor(m_ArgsInfo.interpSF_arg); + interpolator=m; + if (m_Verbose) std::cout<<"Using BLUT interpolation..."< + class GenericVectorInterpolator : public itk::LightObject + { + public: + //============================================== + typedef GenericVectorInterpolator Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + typedef itk::VectorInterpolateImageFunction InterpolatorType; + typedef typename InterpolatorType::Pointer InterpolatorPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + //============================================== + //Set members + void SetArgsInfo(args_info_type args_info) + { + m_ArgsInfo= args_info; + m_Verbose=m_ArgsInfo.verbose_flag; + } + + //============================================== + //Get members + InterpolatorPointer GetInterpolatorPointer(void); + + //============================================== + protected: + GenericVectorInterpolator(); + ~GenericVectorInterpolator() {}; + + private: + args_info_type m_ArgsInfo; + InterpolatorPointer m_Interpolator; + bool m_Verbose; + }; + +} // end namespace clitk +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkGenericVectorInterpolator.txx" +#endif + +#endif // #define __clitkGenericVectorInterpolator_h diff --git a/itk/clitkGenericVectorInterpolator.txx b/itk/clitkGenericVectorInterpolator.txx new file mode 100644 index 0000000..639fe4f --- /dev/null +++ b/itk/clitkGenericVectorInterpolator.txx @@ -0,0 +1,74 @@ +#ifndef __clitkGenericVectorInterpolator_txx +#define __clitkGenericVectorInterpolator_txx + +#include "clitkGenericVectorInterpolator.h" + + +namespace clitk +{ + + //========================================================================================================================= + //constructor + template + GenericVectorInterpolator::GenericVectorInterpolator() + { + m_Interpolator=NULL; + m_Verbose=false; + } + + + //========================================================================================================================= + //Get the pointer + template + typename GenericVectorInterpolator::InterpolatorPointer + GenericVectorInterpolator::GetInterpolatorPointer() + { + //============================================================================ + // We retrieve the type of interpolation from the command line + //============================================================================ + typename InterpolatorType::Pointer interpolator; + + switch ( m_ArgsInfo.interpVF_arg ) + { + case 0: + + interpolator= itk::VectorNearestNeighborInterpolateImageFunction< ImageType,TCoordRep >::New(); + if (m_Verbose) std::cout<<"Using nearestneighbor interpolation..."<::New(); + if (m_Verbose) std::cout<<"Using linear interpolation..."<::Pointer m =clitk::VectorBSplineInterpolateImageFunction< ImageType,TCoordRep >::New(); + m->SetSplineOrder(m_ArgsInfo.interpVFOrder_arg); + interpolator=m; + if (m_Verbose) std::cout<<"Using Bspline interpolation..."<::Pointer m =clitk::VectorBSplineInterpolateImageFunctionWithLUT< ImageType,TCoordRep >::New(); + m->SetSplineOrder(m_ArgsInfo.interpVFOrder_arg); + m->SetLUTSamplingFactor(m_ArgsInfo.interpVFSF_arg); + interpolator=m; + if (m_Verbose) std::cout<<"Using BLUT interpolation..."< + class ITK_EXPORT InvertVFFilter : public itk::ImageToImageFilter + + { + public: + typedef InvertVFFilter Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( InvertVFFilter, ImageToImageFilter ); + + /** Determine the image dimension. */ + itkStaticConstMacro(ImageDimension, unsigned int, + InputImageType::ImageDimension ); + + //Some other typedefs + typedef double CoordRepType; + typedef itk::Image WeightsImageType; + typedef itk::Image MutexImageType; + + /** Point type */ + typedef itk::Point PointType; + + /** Inherit some types from the superclass. */ + typedef typename OutputImageType::IndexType IndexType; + typedef typename OutputImageType::SizeType SizeType; + typedef typename OutputImageType::PixelType PixelType; + typedef typename OutputImageType::SpacingType SpacingType; + + //Set Methods(inline) + itkSetMacro( Verbose, bool); + itkSetMacro( EdgePaddingValue, PixelType ); + void SetNumberOfThreads(unsigned int r ) + { + m_NumberOfThreadsIsGiven=true; + m_NumberOfThreads=r; + } + itkSetMacro(ThreadSafe, bool); + + + protected: + InvertVFFilter(); + ~InvertVFFilter() {}; + void GenerateData( ); + + bool m_Verbose; + bool m_NumberOfThreadsIsGiven; + unsigned int m_NumberOfThreads; + PixelType m_EdgePaddingValue; + bool m_ThreadSafe; + }; + + +} // end namespace clitk +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkInvertVFFilter.txx" +#endif + +#endif // #define __clitkInvertVFFilter_h diff --git a/itk/clitkInvertVFFilter.txx b/itk/clitkInvertVFFilter.txx new file mode 100644 index 0000000..9c00cd3 --- /dev/null +++ b/itk/clitkInvertVFFilter.txx @@ -0,0 +1,483 @@ +#ifndef __clitkInvertVFFilter_txx +#define __clitkInvertVFFilter_txx + + +// Put the helper classes in an anonymous namespace so that it is not +// exposed to the user + +namespace +{ + + //========================================================================================================================= + //helper class 1 to allow a threaded execution: add contributions of input to output and update weights + //========================================================================================================================= + template class ITK_EXPORT HelperClass1 : public itk::ImageToImageFilter + { + + public: + /** Standard class typedefs. */ + typedef HelperClass1 Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( HelperClass1, ImageToImageFilter ); + + /** Constants for the image dimensions */ + itkStaticConstMacro(ImageDimension, unsigned int,InputImageType::ImageDimension); + + + //Typedefs + typedef typename OutputImageType::PixelType PixelType; + typedef itk::Image WeightsImageType; + typedef itk::Image MutexImageType; + + //=================================================================================== + //Set methods + void SetWeights(const typename WeightsImageType::Pointer input) + { + m_Weights = input; + this->Modified(); + } + void SetMutexImage(const typename MutexImageType::Pointer input) + { + m_MutexImage=input; + this->Modified(); + m_ThreadSafe=true; + } + + //Get methods + typename WeightsImageType::Pointer GetWeights(){return m_Weights;} + + /** Typedef to describe the output image region type. */ + typedef typename OutputImageType::RegionType OutputImageRegionType; + + protected: + HelperClass1(); + ~HelperClass1(){}; + + //the actual processing + void BeforeThreadedGenerateData(); + void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ); + + //member data + typename WeightsImageType::Pointer m_Weights; + typename MutexImageType::Pointer m_MutexImage; + bool m_ThreadSafe; + + }; + + + + //========================================================================================================================= + //Member functions of the helper class 1 + //========================================================================================================================= + + + //========================================================================================================================= + //Empty constructor + template + HelperClass1::HelperClass1() + { + m_ThreadSafe=false; + } + + //========================================================================================================================= + //Before threaded data + template + void HelperClass1::BeforeThreadedGenerateData() + { + //Since we will add, put to zero! + this->GetOutput()->FillBuffer(itk::NumericTraits::Zero); + this->GetWeights()->FillBuffer(itk::NumericTraits::Zero); + } + + //========================================================================================================================= + //update the output for the outputRegionForThread + template + void HelperClass1::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ) + { + + //Get pointer to the input + typename InputImageType::ConstPointer inputPtr = this->GetInput(); + + //Get pointer to the output + typename OutputImageType::Pointer outputPtr = this->GetOutput(); + typename OutputImageType::SizeType size=outputPtr->GetLargestPossibleRegion().GetSize(); + + //Iterator over input + typedef itk::ImageRegionConstIteratorWithIndex InputImageIteratorType; + + //define them over the outputRegionForThread + InputImageIteratorType inputIt(inputPtr, outputRegionForThread); + + //Initialize + typename InputImageType::IndexType index; + itk::ContinuousIndex contIndex; + typename InputImageType::PointType ipoint; + typename OutputImageType::PointType opoint; + typedef typename OutputImageType::PixelType DisplacementType; + DisplacementType displacement; + inputIt.GoToBegin(); + + //define some temp variables + signed long baseIndex[ImageDimension]; + double distance[ImageDimension]; + unsigned int dim, counter, upper; + double totalOverlap,overlap; + typename OutputImageType::IndexType neighIndex; + + //Find the number of neighbors + unsigned int neighbors = 1 << ImageDimension; + + //================================================================================================== + //Loop over the region and add the intensities to the output and the weight to the weights + //================================================================================================== + while( !inputIt.IsAtEnd() ) + { + // get the input image index + index = inputIt.GetIndex(); + inputPtr->TransformIndexToPhysicalPoint( index,ipoint ); + + // get the required displacement + displacement = inputIt.Get(); + + // compute the required output image point + for(unsigned int j = 0; j < ImageDimension; j++ ) opoint[j] = ipoint[j] + (double)displacement[j]; + + // Update the output and the weights + if(outputPtr->TransformPhysicalPointToContinuousIndex(opoint, contIndex ) ) + { + for(dim = 0; dim < ImageDimension; dim++) + { + // The following block is equivalent to the following line without + // having to call floor. (Only for positive inputs, we already now that is in the image) + // baseIndex[dim] = (long) vcl_floor(contIndex[dim] ); + + baseIndex[dim] = (long) contIndex[dim]; + distance[dim] = contIndex[dim] - double( baseIndex[dim] ); + } + + //Add contribution for each neighbor + totalOverlap = itk::NumericTraits::Zero; + for( counter = 0; counter < neighbors ; counter++ ) + { + overlap = 1.0; // fraction overlap + upper = counter; // each bit indicates upper/lower neighbour + + // get neighbor index and overlap fraction + for( dim = 0; dim < 3; dim++ ) + { + if ( upper & 1 ) + { + neighIndex[dim] = baseIndex[dim] + 1; + overlap *= distance[dim]; + } + else + { + neighIndex[dim] = baseIndex[dim]; + overlap *= 1.0 - distance[dim]; + } + upper >>= 1; + } + + + + //Set neighbor value only if overlap is not zero + if( (overlap>0.0)) // && + // (static_cast(neighIndex[0])(neighIndex[1])(neighIndex[2])=0) && + // (neighIndex[1]>=0) && + // (neighIndex[2]>=0) ) + { + //what to store? the original displacement vector? + if (! m_ThreadSafe) + { + //Set the pixel and weight at neighIndex + outputPtr->SetPixel(neighIndex, outputPtr->GetPixel(neighIndex) - (displacement*overlap)); + m_Weights->SetPixel(neighIndex, m_Weights->GetPixel(neighIndex) + overlap); + } + + else + { + //Entering critilal section: shared memory + m_MutexImage->GetPixel(neighIndex).Lock(); + + //Set the pixel and weight at neighIndex + outputPtr->SetPixel(neighIndex, outputPtr->GetPixel(neighIndex) - (displacement*overlap)); + m_Weights->SetPixel(neighIndex, m_Weights->GetPixel(neighIndex) + overlap); + + //Unlock + m_MutexImage->GetPixel(neighIndex).Unlock(); + + } + //Add to total overlap + totalOverlap += overlap; + } + + if( totalOverlap == 1.0 ) + { + // finished + break; + } + } + } + + ++inputIt; + } + + } + + + + //========================================================================================================================= + //helper class 2 to allow a threaded execution of normalisation by the weights + //========================================================================================================================= + template class HelperClass2 : public itk::ImageToImageFilter + { + + public: + /** Standard class typedefs. */ + typedef HelperClass2 Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( HelperClass2, ImageToImageFilter ); + + /** Constants for the image dimensions */ + itkStaticConstMacro(ImageDimension, unsigned int,InputImageType::ImageDimension); + + //Typedefs + typedef typename OutputImageType::PixelType PixelType; + typedef itk::Image WeightsImageType; + + //Set methods + void SetWeights(const typename WeightsImageType::Pointer input) + { + m_Weights = input; + this->Modified(); + } + void SetEdgePaddingValue(PixelType value) + { + m_EdgePaddingValue = value; + this->Modified(); + } + + /** Typedef to describe the output image region type. */ + typedef typename OutputImageType::RegionType OutputImageRegionType; + + protected: + HelperClass2(); + ~HelperClass2(){}; + + + //the actual processing + void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ); + + + //member data + typename WeightsImageType::Pointer m_Weights; + PixelType m_EdgePaddingValue; + + } ; + + + + //========================================================================================================================= + //Member functions of the helper class 2 + //========================================================================================================================= + + + //========================================================================================================================= + //Empty constructor + template HelperClass2::HelperClass2() + { + m_EdgePaddingValue=itk::NumericTraits::Zero; + } + + + //========================================================================================================================= + //update the output for the outputRegionForThread + template void HelperClass2::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ) + { + + //Get pointer to the input + typename InputImageType::ConstPointer inputPtr = this->GetInput(); + + //Get pointer to the output + typename OutputImageType::Pointer outputPtr = this->GetOutput(); + + //Iterators over input, weigths and output + typedef itk::ImageRegionConstIterator InputImageIteratorType; + typedef itk::ImageRegionIterator OutputImageIteratorType; + typedef itk::ImageRegionIterator WeightsImageIteratorType; + + //define them over the outputRegionForThread + OutputImageIteratorType outputIt(outputPtr, outputRegionForThread); + InputImageIteratorType inputIt(inputPtr, outputRegionForThread); + WeightsImageIteratorType weightsIt(m_Weights, outputRegionForThread); + + + //================================================================================================== + //loop over the output and normalize the input, remove holes + PixelType neighValue; + double zero = itk::NumericTraits::Zero; + while (!outputIt.IsAtEnd()) + { + //the weight is not zero + if (weightsIt.Get() != zero) + { + //divide by the weight + outputIt.Set(static_cast(inputIt.Get()/weightsIt.Get())); + } + + //copy the value of the neighbour that was just processed + else + { + if(!outputIt.IsAtBegin()) + { + //go back + --outputIt; + + //Neighbour cannot have zero weight because it should be filled already + neighValue=outputIt.Get(); + ++outputIt; + outputIt.Set(neighValue); + //DD("hole filled"); + } + else{ + //DD("is at begin, setting edgepadding value"); + outputIt.Set(m_EdgePaddingValue); + } + } + ++weightsIt; + ++outputIt; + ++inputIt; + + }//end while + }//end member + + +}//end nameless namespace + + + +namespace clitk +{ + + //========================================================================================================================= + // The rest is the InvertVFFilter + //========================================================================================================================= + + //========================================================================================================================= + //constructor + template + InvertVFFilter::InvertVFFilter() + { + m_EdgePaddingValue=itk::NumericTraits::Zero; //no other reasonable value? + m_ThreadSafe=false; + m_Verbose=false; + } + + + //========================================================================================================================= + //Update + template void InvertVFFilter::GenerateData() + { + + //Get the properties of the input + typename InputImageType::ConstPointer inputPtr=this->GetInput(); + typename WeightsImageType::RegionType region; + typename WeightsImageType::RegionType::SizeType size=inputPtr->GetLargestPossibleRegion().GetSize(); + region.SetSize(size); + typename OutputImageType::IndexType start; + for (unsigned int i=0; i< ImageDimension; i++) start[i]=0; + region.SetIndex(start); + PixelType zero = itk::NumericTraits::Zero; + + + //Allocate the weights + typename WeightsImageType::Pointer weights=WeightsImageType::New(); + weights->SetRegions(region); + weights->Allocate(); + weights->SetSpacing(inputPtr->GetSpacing()); + + //=========================================================================== + //Inversion is divided in in two loops, for each we will call a threaded helper class + //1. add contribution of input to output and update weights + //2. normalize the output by the weight and remove holes + //=========================================================================== + + + //=========================================================================== + //1. add contribution of input to output and update weights + + //Define an internal image type + + typedef itk::Image, ImageDimension > InternalImageType; + + //Call threaded helper class 1 + typedef HelperClass1 HelperClass1Type; + typename HelperClass1Type::Pointer helper1=HelperClass1Type::New(); + + //Set input + if(m_NumberOfThreadsIsGiven)helper1->SetNumberOfThreads(m_NumberOfThreads); + helper1->SetInput(inputPtr); + helper1->SetWeights(weights); + + //Threadsafe? + if(m_ThreadSafe) + { + //Allocate the mutex image + typename MutexImageType::Pointer mutex=InvertVFFilter::MutexImageType::New(); + mutex->SetRegions(region); + mutex->Allocate(); + mutex->SetSpacing(inputPtr->GetSpacing()); + helper1->SetMutexImage(mutex); + if (m_Verbose) std::cout <<"Inverting using a thread-safe algorithm" <Update(); + + //Get the output + typename InternalImageType::Pointer temp= helper1->GetOutput(); + weights=helper1->GetWeights(); + + + //=========================================================================== + //2. Normalize the output by the weights and remove holes + //Call threaded helper class + typedef HelperClass2 HelperClass2Type; + typename HelperClass2Type::Pointer helper2=HelperClass2Type::New(); + + //Set temporary output as input + helper2->SetInput(temp); + helper2->SetWeights(weights); + helper2->SetEdgePaddingValue(m_EdgePaddingValue); + + //Execute helper class + if (m_Verbose) std::cout << "Normalizing the output VF..."<Update(); + + //Set the output + this->SetNthOutput(0, helper2->GetOutput()); + } + + + +} + +#endif diff --git a/itk/clitkSetBackgroundImageFilter.h b/itk/clitkSetBackgroundImageFilter.h new file mode 100644 index 0000000..09bc069 --- /dev/null +++ b/itk/clitkSetBackgroundImageFilter.h @@ -0,0 +1,215 @@ +#ifndef __clitkSetBackgroundImageFilter_h +#define __clitkSetBackgroundImageFilter_h + +#include "itkBinaryFunctorImageFilter.h" +#include "itkNumericTraits.h" + + +namespace clitk +{ + +namespace Functor { + +template< class TInput, class TMask, class TOutput=TInput > +class SetBackground +{ +public: + typedef typename itk::NumericTraits< TInput >::AccumulateType AccumulatorType; + + //SetBackground(): m_OutsideValue(itk::NumericTraits< TOutput >::Zero),m_Fg(false),m_MaskValue( static_cast(0) ) {}; + SetBackground() + { + m_OutsideValue=itk::NumericTraits< TOutput >::Zero; + m_Fg=false; + m_MaskValue= static_cast(0); + } + ~SetBackground() {}; + bool operator!=( const SetBackground & ) const + { + return false; + } + bool operator==( const SetBackground & other ) const + { + return !(*this != other); + } + + inline TOutput operator()( const TInput & A, const TMask & B) + { + // Background mode: set everything = background value + if(!m_Fg) + { + if (B == m_MaskValue ) + { + return static_cast( m_OutsideValue ); + } + else + { + return A; + } + } + + // Foreground mode: set everything != foreground value + else + { + if (B != m_MaskValue ) + { + return static_cast( m_OutsideValue ); + } + else + { + return A; + } + } + } + + /** Method to explicitly set the outside value of the mask */ + void SetOutsideValue( const TOutput &outsideValue ) + { + m_OutsideValue = static_cast(outsideValue); + } + + /** Method to get the outside value of the mask */ + const TOutput &GetOutsideValue() const + { + return m_OutsideValue; + } + + /** Method to explicitly set the relevant value of the mask */ + void SetMaskValue( const TMask &maskValue ) + { + m_MaskValue = static_cast(maskValue); + } + + /** Method to get the relevant value of the mask */ + const TMask &GetMaskValue() const + { + return m_MaskValue; + } + + /** Method to explicitly set the foreground mode of the mask */ + void SetForeground( const bool &fg ) + { + m_Fg = fg; + } + + /** Method to get the foregroundmode of the mask */ + const bool &GetForeground() const + { + return m_Fg; + } + +private: + TOutput m_OutsideValue; + TMask m_MaskValue; + bool m_Fg; +}; + +} //end namespace + +template +class ITK_EXPORT SetBackgroundImageFilter : + public + itk::BinaryFunctorImageFilter > + + +{ +public: + /** Standard class typedefs. */ + typedef SetBackgroundImageFilter Self; + typedef itk::BinaryFunctorImageFilter + > Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Runtime information support. */ + itkTypeMacro(SetBackgroundImageFilter, + BinaryFunctorImageFilter); + + /** Method to explicitly set the outside value of the mask. Defaults to 0 */ + void SetOutsideValue( const typename TOutputImage::PixelType & outsideValue ) + { + if( this->GetOutsideValue() != outsideValue ) + { + this->Modified(); + this->GetFunctor().SetOutsideValue( outsideValue ); + } + } + + const typename TOutputImage::PixelType & GetOutsideValue() const + { + return this->GetFunctor().GetOutsideValue(); + } + + /** Method to explicitly set the value of the mask. Defaults to 0 */ + void SetMaskValue( const typename TMaskImage::PixelType & maskValue ) + { + if( this->GetMaskValue() != maskValue ) + { + this->Modified(); + this->GetFunctor().SetMaskValue( maskValue ); + } + } + + const typename TMaskImage::PixelType & GetMaskValue() const + { + return this->GetFunctor().GetMaskValue(); + } + + /** Method to set the foreground mode. Defaults to 0 */ + void SetForeground( const bool & fg ) + { + if( this->GetForeground() != fg ) + { + this->Modified(); + this->GetFunctor().SetForeground( fg ); + } + } + + const bool & GetForeground() const + { + return this->GetFunctor().GetForeground(); + } + +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(MaskEqualityComparableCheck, + (itk::Concept::EqualityComparable)); + itkConceptMacro(InputConvertibleToOutputCheck, + (itk::Concept::Convertible)); + /** End concept checking */ +#endif + +protected: + SetBackgroundImageFilter() {} + virtual ~SetBackgroundImageFilter() {} + + void PrintSelf(std::ostream &os, itk::Indent indent) const + { + Superclass::PrintSelf(os, indent); + os << indent << "OutsideValue: " << this->GetOutsideValue() << std::endl; + os << indent << "MaskValue: " << this->GetMaskValue() << std::endl; + os << indent << "Foreground mode: " << this->GetForeground() << std::endl; + } + +private: + SetBackgroundImageFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + +}; + +} // end namespace clitk + + +#endif diff --git a/itk/clitkVectorBSplineDecompositionImageFilter.h b/itk/clitkVectorBSplineDecompositionImageFilter.h new file mode 100644 index 0000000..7e305d5 --- /dev/null +++ b/itk/clitkVectorBSplineDecompositionImageFilter.h @@ -0,0 +1,133 @@ +#ifndef __clitkVectorBSplineDecompositionImageFilter_h +#define __clitkVectorBSplineDecompositionImageFilter_h + +#include + +#include "itkImageLinearIteratorWithIndex.h" +#include "vnl/vnl_matrix.h" + +#include "itkImageToImageFilter.h" + +namespace clitk +{ + +template +class ITK_EXPORT VectorBSplineDecompositionImageFilter : + public itk::ImageToImageFilter +{ +public: + /** Standard class typedefs. */ + typedef VectorBSplineDecompositionImageFilter Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(VectorBSplineDecompositionImageFilter, ImageToImageFilter); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Inherit input and output image types from Superclass. */ + typedef typename Superclass::InputImageType InputImageType; + typedef typename Superclass::InputImagePointer InputImagePointer; + typedef typename Superclass::InputImageConstPointer InputImageConstPointer; + typedef typename Superclass::OutputImagePointer OutputImagePointer; + + /** Dimension underlying input image. */ + itkStaticConstMacro(ImageDimension, unsigned int,TInputImage::ImageDimension); + itkStaticConstMacro(OutputImageDimension, unsigned int,TOutputImage::ImageDimension); + + //JV vector dimension + itkStaticConstMacro(VectorDimension, unsigned int,TInputImage::PixelType::Dimension); + + /** Iterator typedef support */ + typedef itk::ImageLinearIteratorWithIndex OutputLinearIterator; + + /** Get/Sets the Spline Order, supports 0th - 5th order splines. The default + * is a 3rd order spline. */ + void SetSplineOrder(unsigned int SplineOrder); + itkGetMacro(SplineOrder, int); + + + //JV modified from the original "double" version +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(DimensionCheck, + (itk::Concept::SameDimension)); + itkConceptMacro(InputConvertibleToDoubleCheck, + (itk::Concept::Convertible >)); + itkConceptMacro(OutputConvertibleToDoubleCheck, + (itk::Concept::Convertible >)); + itkConceptMacro(InputConvertibleToOutputCheck, + (itk::Concept::Convertible)); + itkConceptMacro(DoubleConvertibleToOutputCheck, + (itk::Concept::Convertible, typename TOutputImage::PixelType>)); + /** End concept checking */ +#endif + +protected: + VectorBSplineDecompositionImageFilter(); + virtual ~VectorBSplineDecompositionImageFilter() {}; + void PrintSelf(std::ostream& os, itk::Indent indent) const; + + void GenerateData( ); + + /** This filter requires all of the input image. */ + void GenerateInputRequestedRegion(); + + /** This filter must produce all of its output at once. */ + void EnlargeOutputRequestedRegion( itk::DataObject *output ); + + /** These are needed by the smoothing spline routine. */ + //JV + std::vector< itk::Vector > m_Scratch; // temp storage for processing of Coefficients + typename TInputImage::SizeType m_DataLength; // Image size + unsigned int m_SplineOrder; // User specified spline order (3rd or cubic is the default) + double m_SplinePoles[3];// Poles calculated for a given spline order + int m_NumberOfPoles; // number of poles + double m_Tolerance; // Tolerance used for determining initial causal coefficient + unsigned int m_IteratorDirection; // Direction for iterator incrementing + + +private: + VectorBSplineDecompositionImageFilter( const Self& ); //purposely not implemented + void operator=( const Self& ); //purposely not implemented + + /** Determines the poles given the Spline Order. */ + virtual void SetPoles(); + + /** Converts a vector of data to a vector of Spline coefficients. */ + virtual bool DataToCoefficients1D(); + + /** Converts an N-dimension image of data to an equivalent sized image + * of spline coefficients. */ + void DataToCoefficientsND(); + + /** Determines the first coefficient for the causal filtering of the data. */ + virtual void SetInitialCausalCoefficient(double z); + + /** Determines the first coefficient for the anti-causal filtering of the data. */ + virtual void SetInitialAntiCausalCoefficient(double z); + + /** Used to initialize the Coefficients image before calculation. */ + void CopyImageToImage(); + + /** Copies a vector of data from the Coefficients image to the m_Scratch vector. */ + void CopyCoefficientsToScratch( OutputLinearIterator & ); + + /** Copies a vector of data from m_Scratch to the Coefficients image. */ + void CopyScratchToCoefficients( OutputLinearIterator & ); + +}; + + +} // namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkVectorBSplineDecompositionImageFilter.txx" +#endif + +#endif + diff --git a/itk/clitkVectorBSplineDecompositionImageFilter.txx b/itk/clitkVectorBSplineDecompositionImageFilter.txx new file mode 100644 index 0000000..7699922 --- /dev/null +++ b/itk/clitkVectorBSplineDecompositionImageFilter.txx @@ -0,0 +1,418 @@ +#ifndef _clitkVectorBSplineDecompositionImageFilter_txx +#define _clitkVectorBSplineDecompositionImageFilter_txx + +#include "clitkVectorBSplineDecompositionImageFilter.h" +#include "itkImageRegionConstIteratorWithIndex.h" +#include "itkImageRegionIterator.h" +#include "itkProgressReporter.h" +#include "itkVector.h" + +namespace clitk +{ + +/** + * Constructor + */ +template +VectorBSplineDecompositionImageFilter +::VectorBSplineDecompositionImageFilter() +{ + m_SplineOrder = 0; + int SplineOrder = 3; + m_Tolerance = 1e-10; // Need some guidance on this one...what is reasonable? + m_IteratorDirection = 0; + this->SetSplineOrder(SplineOrder); +} + + +/** + * Standard "PrintSelf" method + */ +template +void +VectorBSplineDecompositionImageFilter +::PrintSelf( + std::ostream& os, + itk::Indent indent) const +{ + Superclass::PrintSelf( os, indent ); + os << indent << "Spline Order: " << m_SplineOrder << std::endl; + +} + + +template +bool +VectorBSplineDecompositionImageFilter +::DataToCoefficients1D() +{ + + // See Unser, 1993, Part II, Equation 2.5, + // or Unser, 1999, Box 2. for an explaination. + + double c0 = 1.0; + + if (m_DataLength[m_IteratorDirection] == 1) //Required by mirror boundaries + { + return false; + } + + // Compute overall gain + for (int k = 0; k < m_NumberOfPoles; k++) + { + // Note for cubic splines lambda = 6 + c0 = c0 * (1.0 - m_SplinePoles[k]) * (1.0 - 1.0 / m_SplinePoles[k]); + } + + // apply the gain + for (unsigned int n = 0; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] *= c0; + } + + // loop over all poles + for (int k = 0; k < m_NumberOfPoles; k++) + { + // causal initialization + this->SetInitialCausalCoefficient(m_SplinePoles[k]); + // causal recursion + for (unsigned int n = 1; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] += m_SplinePoles[k] * m_Scratch[n - 1]; + } + + // anticausal initialization + this->SetInitialAntiCausalCoefficient(m_SplinePoles[k]); + // anticausal recursion + for ( int n = m_DataLength[m_IteratorDirection] - 2; 0 <= n; n--) + { + m_Scratch[n] = m_SplinePoles[k] * (m_Scratch[n + 1] - m_Scratch[n]); + } + } + return true; + +} + + +template +void +VectorBSplineDecompositionImageFilter +::SetSplineOrder(unsigned int SplineOrder) +{ + if (SplineOrder == m_SplineOrder) + { + return; + } + m_SplineOrder = SplineOrder; + this->SetPoles(); + this->Modified(); + +} + + +template +void +VectorBSplineDecompositionImageFilter +::SetPoles() +{ + /* See Unser, 1997. Part II, Table I for Pole values */ + // See also, Handbook of Medical Imaging, Processing and Analysis, Ed. Isaac N. Bankman, + // 2000, pg. 416. + switch (m_SplineOrder) + { + case 3: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(3.0) - 2.0; + break; + case 0: + m_NumberOfPoles = 0; + break; + case 1: + m_NumberOfPoles = 0; + break; + case 2: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(8.0) - 3.0; + break; + case 4: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(664.0 - vcl_sqrt(438976.0)) + vcl_sqrt(304.0) - 19.0; + m_SplinePoles[1] = vcl_sqrt(664.0 + vcl_sqrt(438976.0)) - vcl_sqrt(304.0) - 19.0; + break; + case 5: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(135.0 / 2.0 - vcl_sqrt(17745.0 / 4.0)) + vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + m_SplinePoles[1] = vcl_sqrt(135.0 / 2.0 + vcl_sqrt(17745.0 / 4.0)) - vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + break; + default: + // SplineOrder not implemented yet. + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION); + err.SetDescription( "SplineOrder must be between 0 and 5. Requested spline order has not been implemented yet." ); + throw err; + break; + } +} + + +template +void +VectorBSplineDecompositionImageFilter +::SetInitialCausalCoefficient(double z) +{ + /* begining InitialCausalCoefficient */ + /* See Unser, 1999, Box 2 for explaination */ + //JV + itk::Vector sum; + double zn, z2n, iz; //sum + unsigned long horizon; + + /* this initialization corresponds to mirror boundaries */ + horizon = m_DataLength[m_IteratorDirection]; + zn = z; + if (m_Tolerance > 0.0) + { + horizon = (long)vcl_ceil(log(m_Tolerance) / vcl_log(fabs(z))); + } + if (horizon < m_DataLength[m_IteratorDirection]) + { + /* accelerated loop */ + sum = m_Scratch[0]; // verify this + for (unsigned int n = 1; n < horizon; n++) + { + sum += zn * m_Scratch[n]; + zn *= z; + } + m_Scratch[0] = sum; + } + else { + /* full loop */ + iz = 1.0 / z; + z2n = vcl_pow(z, (double)(m_DataLength[m_IteratorDirection] - 1L)); + sum = m_Scratch[0] + z2n * m_Scratch[m_DataLength[m_IteratorDirection] - 1L]; + z2n *= z2n * iz; + for (unsigned int n = 1; n <= (m_DataLength[m_IteratorDirection] - 2); n++) + { + sum += (zn + z2n) * m_Scratch[n]; + zn *= z; + z2n *= iz; + } + m_Scratch[0] = sum / (1.0 - zn * zn); + } +} + + +template +void +VectorBSplineDecompositionImageFilter +::SetInitialAntiCausalCoefficient(double z) +{ + // this initialization corresponds to mirror boundaries + /* See Unser, 1999, Box 2 for explaination */ + // Also see erratum at http://bigwww.epfl.ch/publications/unser9902.html + m_Scratch[m_DataLength[m_IteratorDirection] - 1] = + (z / (z * z - 1.0)) * + (z * m_Scratch[m_DataLength[m_IteratorDirection] - 2] + m_Scratch[m_DataLength[m_IteratorDirection] - 1]); +} + + +template +void +VectorBSplineDecompositionImageFilter +::DataToCoefficientsND() +{ + OutputImagePointer output = this->GetOutput(); + + itk::Size size = output->GetBufferedRegion().GetSize(); + + unsigned int count = output->GetBufferedRegion().GetNumberOfPixels() / size[0] * ImageDimension; + + itk::ProgressReporter progress(this, 0, count, 10); + + // Initialize coeffient array + this->CopyImageToImage(); // Coefficients are initialized to the input data + + for (unsigned int n=0; n < ImageDimension; n++) + { + m_IteratorDirection = n; + // Loop through each dimension + + // Initialize iterators + OutputLinearIterator CIterator( output, output->GetBufferedRegion() ); + CIterator.SetDirection( m_IteratorDirection ); + // For each data vector + while ( !CIterator.IsAtEnd() ) + { + // Copy coefficients to scratch + this->CopyCoefficientsToScratch( CIterator ); + + + // Perform 1D BSpline calculations + this->DataToCoefficients1D(); + + // Copy scratch back to coefficients. + // Brings us back to the end of the line we were working on. + CIterator.GoToBeginOfLine(); + this->CopyScratchToCoefficients( CIterator ); // m_Scratch = m_Image; + CIterator.NextLine(); + progress.CompletedPixel(); + } + } +} + + +/** + * Copy the input image into the output image + */ +template +void +VectorBSplineDecompositionImageFilter +::CopyImageToImage() +{ + + typedef itk::ImageRegionConstIteratorWithIndex< TInputImage > InputIterator; + typedef itk::ImageRegionIterator< TOutputImage > OutputIterator; + typedef typename TOutputImage::PixelType OutputPixelType; + + InputIterator inIt( this->GetInput(), this->GetInput()->GetBufferedRegion() ); + OutputIterator outIt( this->GetOutput(), this->GetOutput()->GetBufferedRegion() ); + + inIt = inIt.Begin(); + outIt = outIt.Begin(); + OutputPixelType v; + while ( !outIt.IsAtEnd() ) + { + for (unsigned int i=0; i< VectorDimension;i++) + { + v[i]= static_cast( inIt.Get()[i] ); + } + outIt.Set( v ); + ++inIt; + ++outIt; + } + +} + + +/** + * Copy the scratch to one line of the output image + */ +template +void +VectorBSplineDecompositionImageFilter +::CopyScratchToCoefficients(OutputLinearIterator & Iter) +{ + typedef typename TOutputImage::PixelType OutputPixelType; + unsigned long j = 0; + OutputPixelType v; + while ( !Iter.IsAtEndOfLine() ) + { + for(unsigned int i=0; i( m_Scratch[j][i]); + Iter.Set( v ); + ++Iter; + ++j; + } + +} + + +/** + * Copy one line of the output image to the scratch + */ +template +void +VectorBSplineDecompositionImageFilter +::CopyCoefficientsToScratch(OutputLinearIterator & Iter) +{ + unsigned long j = 0; + itk::Vector v; + while ( !Iter.IsAtEndOfLine() ) + { + for(unsigned int i=0; i( Iter.Get()[i] ); + m_Scratch[j] = v ; + ++Iter; + ++j; + } +} + + +/** + * GenerateInputRequestedRegion method. + */ +template +void +VectorBSplineDecompositionImageFilter +::GenerateInputRequestedRegion() +{ + // this filter requires the all of the input image to be in + // the buffer + InputImagePointer inputPtr = const_cast< TInputImage * > ( this->GetInput() ); + if( inputPtr ) + { + inputPtr->SetRequestedRegionToLargestPossibleRegion(); + } +} + + +/** + * EnlargeOutputRequestedRegion method. + */ +template +void +VectorBSplineDecompositionImageFilter +::EnlargeOutputRequestedRegion( itk::DataObject *output ) +{ + + // this filter requires the all of the output image to be in + // the buffer + TOutputImage *imgData; + imgData = dynamic_cast( output ); + if( imgData ) + { + imgData->SetRequestedRegionToLargestPossibleRegion(); + } + +} + +/** + * Generate data + */ +template +void +VectorBSplineDecompositionImageFilter +::GenerateData() +{ + DD("VectorBSplineDecompositionImageFilter GenerateData()"); + // Allocate scratch memory + InputImageConstPointer inputPtr = this->GetInput(); + m_DataLength = inputPtr->GetBufferedRegion().GetSize(); + + unsigned long maxLength = 0; + for ( unsigned int n = 0; n < ImageDimension; n++ ) + { + if ( m_DataLength[n] > maxLength ) + { + maxLength = m_DataLength[n]; + } + } + m_Scratch.resize( maxLength ); + + // Allocate memory for output image + OutputImagePointer outputPtr = this->GetOutput(); + outputPtr->SetBufferedRegion( outputPtr->GetRequestedRegion() ); + outputPtr->Allocate(); + + // Calculate actual output + this->DataToCoefficientsND(); + + // Clean up + m_Scratch.clear(); + +} + + +} // namespace clitk + +#endif diff --git a/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.h b/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.h new file mode 100644 index 0000000..bdaa44f --- /dev/null +++ b/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.h @@ -0,0 +1,140 @@ +#ifndef __clitkVectorBSplineDecompositionImageFilterWithOBD_h +#define __clitkVectorBSplineDecompositionImageFilterWithOBD_h + +#include + +#include "itkImageLinearIteratorWithIndex.h" +#include "vnl/vnl_matrix.h" + +#include "itkImageToImageFilter.h" + +namespace clitk +{ + +template +class ITK_EXPORT VectorBSplineDecompositionImageFilterWithOBD : + public itk::ImageToImageFilter +{ +public: + /** Standard class typedefs. */ + typedef VectorBSplineDecompositionImageFilterWithOBD Self; + typedef itk::ImageToImageFilter Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(VectorBSplineDecompositionImageFilterWithOBD, ImageToImageFilter); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Inherit input and output image types from Superclass. */ + typedef typename Superclass::InputImageType InputImageType; + typedef typename Superclass::InputImagePointer InputImagePointer; + typedef typename Superclass::InputImageConstPointer InputImageConstPointer; + typedef typename Superclass::OutputImagePointer OutputImagePointer; + + /** Dimension underlying input image. */ + itkStaticConstMacro(ImageDimension, unsigned int,TInputImage::ImageDimension); + itkStaticConstMacro(OutputImageDimension, unsigned int,TOutputImage::ImageDimension); + + //JV add the size + typedef typename InputImageType::SizeType SizeType; + + //JV vector dimension + itkStaticConstMacro(VectorDimension, unsigned int,TInputImage::PixelType::Dimension); + + /** Iterator typedef support */ + typedef itk::ImageLinearIteratorWithIndex OutputLinearIterator; + + /** Get/Sets the Spline Order, supports 0th - 5th order splines. The default + * is a 3rd order spline. */ + void SetSplineOrder(unsigned int SplineOrder); + itkGetMacro(SplineOrder, int); + //JV Set the order by Dimension + void SetSplineOrders(SizeType); + + //JV modified from the original "double" version +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(DimensionCheck, + (itk::Concept::SameDimension)); + itkConceptMacro(InputConvertibleToDoubleCheck, + (itk::Concept::Convertible >)); + itkConceptMacro(OutputConvertibleToDoubleCheck, + (itk::Concept::Convertible >)); + itkConceptMacro(InputConvertibleToOutputCheck, + (itk::Concept::Convertible)); + itkConceptMacro(DoubleConvertibleToOutputCheck, + (itk::Concept::Convertible, typename TOutputImage::PixelType>)); + /** End concept checking */ +#endif + +protected: + VectorBSplineDecompositionImageFilterWithOBD(); + virtual ~VectorBSplineDecompositionImageFilterWithOBD() {}; + void PrintSelf(std::ostream& os, itk::Indent indent) const; + + void GenerateData( ); + + /** This filter requires all of the input image. */ + void GenerateInputRequestedRegion(); + + /** This filter must produce all of its output at once. */ + void EnlargeOutputRequestedRegion( itk::DataObject *output ); + + /** These are needed by the smoothing spline routine. */ + //JV multiple splineOrders + SizeType m_SplineOrders; //SplineOrder by dimension + + //JV + std::vector< itk::Vector > m_Scratch; // temp storage for processing of Coefficients + typename TInputImage::SizeType m_DataLength; // Image size + unsigned int m_SplineOrder; // User specified spline order (3rd or cubic is the default) + double m_SplinePoles[3];// Poles calculated for a given spline order + int m_NumberOfPoles; // number of poles + double m_Tolerance; // Tolerance used for determining initial causal coefficient + unsigned int m_IteratorDirection; // Direction for iterator incrementing + + +private: + VectorBSplineDecompositionImageFilterWithOBD( const Self& ); //purposely not implemented + void operator=( const Self& ); //purposely not implemented + + /** Determines the poles given the Spline Order. */ + virtual void SetPoles(); + + /** Converts a vector of data to a vector of Spline coefficients. */ + virtual bool DataToCoefficients1D(); + + /** Converts an N-dimension image of data to an equivalent sized image + * of spline coefficients. */ + void DataToCoefficientsND(); + + /** Determines the first coefficient for the causal filtering of the data. */ + virtual void SetInitialCausalCoefficient(double z); + + /** Determines the first coefficient for the anti-causal filtering of the data. */ + virtual void SetInitialAntiCausalCoefficient(double z); + + /** Used to initialize the Coefficients image before calculation. */ + void CopyImageToImage(); + + /** Copies a vector of data from the Coefficients image to the m_Scratch vector. */ + void CopyCoefficientsToScratch( OutputLinearIterator & ); + + /** Copies a vector of data from m_Scratch to the Coefficients image. */ + void CopyScratchToCoefficients( OutputLinearIterator & ); + +}; + + +} // namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkVectorBSplineDecompositionImageFilterWithOBD.txx" +#endif + +#endif + diff --git a/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.txx b/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.txx new file mode 100644 index 0000000..992eb61 --- /dev/null +++ b/itk/clitkVectorBSplineDecompositionImageFilterWithOBD.txx @@ -0,0 +1,429 @@ +#ifndef _clitkVectorBSplineDecompositionImageFilterWithOBD_txx +#define _clitkVectorBSplineDecompositionImageFilterWithOBD_txx + +#include "clitkVectorBSplineDecompositionImageFilterWithOBD.h" +#include "itkImageRegionConstIteratorWithIndex.h" +#include "itkImageRegionIterator.h" +#include "itkProgressReporter.h" +#include "itkVector.h" + +namespace clitk +{ + +/** + * Constructor + */ +template +VectorBSplineDecompositionImageFilterWithOBD +::VectorBSplineDecompositionImageFilterWithOBD() +{ + m_SplineOrder = 0; + int SplineOrder = 3; + m_Tolerance = 1e-10; // Need some guidance on this one...what is reasonable? + m_IteratorDirection = 0; + this->SetSplineOrder(SplineOrder); +} + + +/** + * Standard "PrintSelf" method + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::PrintSelf( + std::ostream& os, + itk::Indent indent) const +{ + Superclass::PrintSelf( os, indent ); + os << indent << "Spline Order: " << m_SplineOrder << std::endl; + +} + + +template +bool +VectorBSplineDecompositionImageFilterWithOBD +::DataToCoefficients1D() +{ + + // See Unser, 1993, Part II, Equation 2.5, + // or Unser, 1999, Box 2. for an explaination. + + double c0 = 1.0; + + if (m_DataLength[m_IteratorDirection] == 1) //Required by mirror boundaries + { + return false; + } + + // Compute overall gain + for (int k = 0; k < m_NumberOfPoles; k++) + { + // Note for cubic splines lambda = 6 + c0 = c0 * (1.0 - m_SplinePoles[k]) * (1.0 - 1.0 / m_SplinePoles[k]); + } + + // apply the gain + for (unsigned int n = 0; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] *= c0; + } + + // loop over all poles + for (int k = 0; k < m_NumberOfPoles; k++) + { + // causal initialization + this->SetInitialCausalCoefficient(m_SplinePoles[k]); + // causal recursion + for (unsigned int n = 1; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] += m_SplinePoles[k] * m_Scratch[n - 1]; + } + + // anticausal initialization + this->SetInitialAntiCausalCoefficient(m_SplinePoles[k]); + // anticausal recursion + for ( int n = m_DataLength[m_IteratorDirection] - 2; 0 <= n; n--) + { + m_Scratch[n] = m_SplinePoles[k] * (m_Scratch[n + 1] - m_Scratch[n]); + } + } + return true; + +} + + +template +void +VectorBSplineDecompositionImageFilterWithOBD +::SetSplineOrder(unsigned int SplineOrder) +{ + if (SplineOrder == m_SplineOrder) + { + return; + } + m_SplineOrder = SplineOrder; + this->SetPoles(); + this->Modified(); + +} + +//JV +template +void +VectorBSplineDecompositionImageFilterWithOBD +::SetSplineOrders(SizeType SplineOrders) +{ + m_SplineOrders=SplineOrders; +} + +template +void +VectorBSplineDecompositionImageFilterWithOBD +::SetPoles() +{ + /* See Unser, 1997. Part II, Table I for Pole values */ + // See also, Handbook of Medical Imaging, Processing and Analysis, Ed. Isaac N. Bankman, + // 2000, pg. 416. + switch (m_SplineOrder) + { + case 3: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(3.0) - 2.0; + break; + case 0: + m_NumberOfPoles = 0; + break; + case 1: + m_NumberOfPoles = 0; + break; + case 2: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(8.0) - 3.0; + break; + case 4: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(664.0 - vcl_sqrt(438976.0)) + vcl_sqrt(304.0) - 19.0; + m_SplinePoles[1] = vcl_sqrt(664.0 + vcl_sqrt(438976.0)) - vcl_sqrt(304.0) - 19.0; + break; + case 5: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(135.0 / 2.0 - vcl_sqrt(17745.0 / 4.0)) + vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + m_SplinePoles[1] = vcl_sqrt(135.0 / 2.0 + vcl_sqrt(17745.0 / 4.0)) - vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + break; + default: + // SplineOrder not implemented yet. + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION); + err.SetDescription( "SplineOrder must be between 0 and 5. Requested spline order has not been implemented yet." ); + throw err; + break; + } +} + + +template +void +VectorBSplineDecompositionImageFilterWithOBD +::SetInitialCausalCoefficient(double z) +{ + /* begining InitialCausalCoefficient */ + /* See Unser, 1999, Box 2 for explaination */ + //JV + itk::Vector sum; + double zn, z2n, iz; //sum + unsigned long horizon; + + /* this initialization corresponds to mirror boundaries */ + horizon = m_DataLength[m_IteratorDirection]; + zn = z; + if (m_Tolerance > 0.0) + { + horizon = (long)vcl_ceil(log(m_Tolerance) / vcl_log(fabs(z))); + } + if (horizon < m_DataLength[m_IteratorDirection]) + { + /* accelerated loop */ + sum = m_Scratch[0]; // verify this + for (unsigned int n = 1; n < horizon; n++) + { + sum += zn * m_Scratch[n]; + zn *= z; + } + m_Scratch[0] = sum; + } + else { + /* full loop */ + iz = 1.0 / z; + z2n = vcl_pow(z, (double)(m_DataLength[m_IteratorDirection] - 1L)); + sum = m_Scratch[0] + z2n * m_Scratch[m_DataLength[m_IteratorDirection] - 1L]; + z2n *= z2n * iz; + for (unsigned int n = 1; n <= (m_DataLength[m_IteratorDirection] - 2); n++) + { + sum += (zn + z2n) * m_Scratch[n]; + zn *= z; + z2n *= iz; + } + m_Scratch[0] = sum / (1.0 - zn * zn); + } +} + + +template +void +VectorBSplineDecompositionImageFilterWithOBD +::SetInitialAntiCausalCoefficient(double z) +{ + // this initialization corresponds to mirror boundaries + /* See Unser, 1999, Box 2 for explaination */ + // Also see erratum at http://bigwww.epfl.ch/publications/unser9902.html + m_Scratch[m_DataLength[m_IteratorDirection] - 1] = + (z / (z * z - 1.0)) * + (z * m_Scratch[m_DataLength[m_IteratorDirection] - 2] + m_Scratch[m_DataLength[m_IteratorDirection] - 1]); +} + + +template +void +VectorBSplineDecompositionImageFilterWithOBD +::DataToCoefficientsND() +{ + OutputImagePointer output = this->GetOutput(); + + itk::Size size = output->GetBufferedRegion().GetSize(); + + unsigned int count = output->GetBufferedRegion().GetNumberOfPixels() / size[0] * ImageDimension; + + itk::ProgressReporter progress(this, 0, count, 10); + + // Initialize coeffient array + this->CopyImageToImage(); // Coefficients are initialized to the input data + + for (unsigned int n=0; n < ImageDimension; n++) + { + m_IteratorDirection = n; + // Loop through each dimension + + //JV Set the correct order by dimension! + SetSplineOrder(m_SplineOrders[n]); + + // Initialize iterators + OutputLinearIterator CIterator( output, output->GetBufferedRegion() ); + CIterator.SetDirection( m_IteratorDirection ); + // For each data vector + while ( !CIterator.IsAtEnd() ) + { + // Copy coefficients to scratch + this->CopyCoefficientsToScratch( CIterator ); + + + // Perform 1D BSpline calculations + this->DataToCoefficients1D(); + + // Copy scratch back to coefficients. + // Brings us back to the end of the line we were working on. + CIterator.GoToBeginOfLine(); + this->CopyScratchToCoefficients( CIterator ); // m_Scratch = m_Image; + CIterator.NextLine(); + progress.CompletedPixel(); + } + } +} + + +/** + * Copy the input image into the output image + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::CopyImageToImage() +{ + + typedef itk::ImageRegionConstIteratorWithIndex< TInputImage > InputIterator; + typedef itk::ImageRegionIterator< TOutputImage > OutputIterator; + typedef typename TOutputImage::PixelType OutputPixelType; + + InputIterator inIt( this->GetInput(), this->GetInput()->GetBufferedRegion() ); + OutputIterator outIt( this->GetOutput(), this->GetOutput()->GetBufferedRegion() ); + + inIt = inIt.Begin(); + outIt = outIt.Begin(); + OutputPixelType v; + while ( !outIt.IsAtEnd() ) + { + for (unsigned int i=0; i< VectorDimension;i++) + { + v[i]= static_cast( inIt.Get()[i] ); + } + outIt.Set( v ); + ++inIt; + ++outIt; + } + +} + + +/** + * Copy the scratch to one line of the output image + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::CopyScratchToCoefficients(OutputLinearIterator & Iter) +{ + typedef typename TOutputImage::PixelType OutputPixelType; + unsigned long j = 0; + OutputPixelType v; + while ( !Iter.IsAtEndOfLine() ) + { + for(unsigned int i=0; i( m_Scratch[j][i]); + Iter.Set( v ); + ++Iter; + ++j; + } + +} + + +/** + * Copy one line of the output image to the scratch + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::CopyCoefficientsToScratch(OutputLinearIterator & Iter) +{ + unsigned long j = 0; + itk::Vector v; + while ( !Iter.IsAtEndOfLine() ) + { + for(unsigned int i=0; i( Iter.Get()[i] ); + m_Scratch[j] = v ; + ++Iter; + ++j; + } +} + + +/** + * GenerateInputRequestedRegion method. + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::GenerateInputRequestedRegion() +{ + // this filter requires the all of the input image to be in + // the buffer + InputImagePointer inputPtr = const_cast< TInputImage * > ( this->GetInput() ); + if( inputPtr ) + { + inputPtr->SetRequestedRegionToLargestPossibleRegion(); + } +} + + +/** + * EnlargeOutputRequestedRegion method. + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::EnlargeOutputRequestedRegion( itk::DataObject *output ) +{ + + // this filter requires the all of the output image to be in + // the buffer + TOutputImage *imgData; + imgData = dynamic_cast( output ); + if( imgData ) + { + imgData->SetRequestedRegionToLargestPossibleRegion(); + } + +} + +/** + * Generate data + */ +template +void +VectorBSplineDecompositionImageFilterWithOBD +::GenerateData() +{ + DD("VectorBSplineDecompositionImageFilterWithOBD GenerateData()"); + // Allocate scratch memory + InputImageConstPointer inputPtr = this->GetInput(); + m_DataLength = inputPtr->GetBufferedRegion().GetSize(); + + unsigned long maxLength = 0; + for ( unsigned int n = 0; n < ImageDimension; n++ ) + { + if ( m_DataLength[n] > maxLength ) + { + maxLength = m_DataLength[n]; + } + } + m_Scratch.resize( maxLength ); + + // Allocate memory for output image + OutputImagePointer outputPtr = this->GetOutput(); + outputPtr->SetBufferedRegion( outputPtr->GetRequestedRegion() ); + outputPtr->Allocate(); + + // Calculate actual output + this->DataToCoefficientsND(); + + // Clean up + m_Scratch.clear(); + +} + + +} // namespace clitk + +#endif diff --git a/itk/clitkVectorBSplineInterpolateImageFunction.h b/itk/clitkVectorBSplineInterpolateImageFunction.h new file mode 100644 index 0000000..2bbbb57 --- /dev/null +++ b/itk/clitkVectorBSplineInterpolateImageFunction.h @@ -0,0 +1,201 @@ +#ifndef __clitkVectorBSplineInterpolateImageFunction_h +#define __clitkVectorBSplineInterpolateImageFunction_h + +#include "clitkVectorBSplineDecompositionImageFilter.h" + +// First make sure that the configuration is available. +// This line can be removed once the optimized versions +// gets integrated into the main directories. +#include "itkConfigure.h" + +// #ifdef ITK_USE_OPTIMIZED_REGISTRATION_METHODS +// #include "itkOptBSplineInterpolateImageFunction.h" +// #else + +#include + +#include "itkImageLinearIteratorWithIndex.h" +#include "itkVectorInterpolateImageFunction.h" +#include "vnl/vnl_matrix.h" + +#include "itkBSplineDecompositionImageFilter.h" +#include "itkConceptChecking.h" +#include "itkCovariantVector.h" + + +namespace clitk +{ + +template < + class TImageType, + class TCoordRep = double, + class TCoefficientType = double > +class ITK_EXPORT VectorBSplineInterpolateImageFunction : + public itk::VectorInterpolateImageFunction +{ +public: + /** Standard class typedefs. */ + typedef VectorBSplineInterpolateImageFunction Self; + typedef itk::VectorInterpolateImageFunction Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(VectorBSplineInterpolateImageFunction, InterpolateImageFunction); + + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** OutputType typedef support. */ + typedef typename Superclass::OutputType OutputType; + + /** InputImageType typedef support. */ + typedef typename Superclass::InputImageType InputImageType; + + /** Dimension underlying input image. */ + itkStaticConstMacro(ImageDimension, unsigned int,Superclass::ImageDimension); + + /** Index typedef support. */ + typedef typename Superclass::IndexType IndexType; + + /** ContinuousIndex typedef support. */ + typedef typename Superclass::ContinuousIndexType ContinuousIndexType; + + /** PointType typedef support */ + typedef typename Superclass::PointType PointType; + + //JV the vector dimension + itkStaticConstMacro(VectorDimension, unsigned int,Superclass::Dimension); + + + /** Iterator typedef support */ + typedef itk::ImageLinearIteratorWithIndex Iterator; + + /** Internal Coefficient typedef support */ + typedef TCoefficientType CoefficientDataType; + + //JV + typedef itk::Vector CoefficientImagePixelType; + typedef itk::Image CoefficientImageType; + + /** Define filter for calculating the BSpline coefficients */ + //JV make vectorial + typedef clitk::VectorBSplineDecompositionImageFilter + CoefficientFilter; + typedef typename CoefficientFilter::Pointer CoefficientFilterPointer; + + /** Evaluate the function at a ContinuousIndex position. + * + * Returns the B-Spline interpolated image intensity at a + * specified point position. No bounds checking is done. + * The point is assume to lie within the image buffer. + * + * ImageFunction::IsInsideBuffer() can be used to check bounds before + * calling the method. */ + virtual OutputType EvaluateAtContinuousIndex( + const ContinuousIndexType & index ) const; + + /** Derivative typedef support */ + typedef itk::CovariantVector CovariantVectorType; + + CovariantVectorType EvaluateDerivative( const PointType & point ) const + { + ContinuousIndexType index; + this->GetInputImage()->TransformPhysicalPointToContinuousIndex( point, index ); + return ( this->EvaluateDerivativeAtContinuousIndex( index ) ); + } + + CovariantVectorType EvaluateDerivativeAtContinuousIndex( + const ContinuousIndexType & x ) const; + + + /** Get/Sets the Spline Order, supports 0th - 5th order splines. The default + * is a 3rd order spline. */ + void SetSplineOrder(unsigned int SplineOrder); + itkGetMacro(SplineOrder, int); + + + /** Set the input image. This must be set by the user. */ + virtual void SetInputImage(const TImageType * inputData); + + + /** The UseImageDirection flag determines whether image derivatives are + * computed with respect to the image grid or with respect to the physical + * space. When this flag is ON the derivatives are computed with respect to + * the coodinate system of physical space. The difference is whether we take + * into account the image Direction or not. The flag ON will take into + * account the image direction and will result in an extra matrix + * multiplication compared to the amount of computation performed when the + * flag is OFF. This flag is OFF by default.*/ + itkSetMacro( UseImageDirection, bool ); + itkGetMacro( UseImageDirection, bool ); + itkBooleanMacro( UseImageDirection ); + + +protected: + VectorBSplineInterpolateImageFunction(); + virtual ~VectorBSplineInterpolateImageFunction() {}; + void operator=( const Self& ); //purposely not implemented + void PrintSelf(std::ostream& os, itk::Indent indent) const; + + // These are needed by the smoothing spline routine. + std::vector m_Scratch; // temp storage for processing of Coefficients + typename TImageType::SizeType m_DataLength; // Image size + unsigned int m_SplineOrder; // User specified spline order (3rd or cubic is the default) + + typename CoefficientImageType::ConstPointer m_Coefficients; // Spline coefficients + +private: + VectorBSplineInterpolateImageFunction( const Self& ); //purposely not implemented + /** Determines the weights for interpolation of the value x */ + void SetInterpolationWeights( const ContinuousIndexType & x, + const vnl_matrix & EvaluateIndex, + vnl_matrix & weights, + unsigned int splineOrder ) const; + + /** Determines the weights for the derivative portion of the value x */ + void SetDerivativeWeights( const ContinuousIndexType & x, + const vnl_matrix & EvaluateIndex, + vnl_matrix & weights, + unsigned int splineOrder ) const; + + /** Precomputation for converting the 1D index of the interpolation neighborhood + * to an N-dimensional index. */ + void GeneratePointsToIndex( ); + + /** Determines the indicies to use give the splines region of support */ + void DetermineRegionOfSupport( vnl_matrix & evaluateIndex, + const ContinuousIndexType & x, + unsigned int splineOrder ) const; + + /** Set the indicies in evaluateIndex at the boundaries based on mirror + * boundary conditions. */ + void ApplyMirrorBoundaryConditions(vnl_matrix & evaluateIndex, + unsigned int splineOrder) const; + + + Iterator m_CIterator; // Iterator for traversing spline coefficients. + unsigned long m_MaxNumberInterpolationPoints; // number of neighborhood points used for interpolation + std::vector m_PointsToIndex; // Preallocation of interpolation neighborhood indicies + + CoefficientFilterPointer m_CoefficientFilter; + + // flag to take or not the image direction into account when computing the + // derivatives. + bool m_UseImageDirection; + + +}; + +} // namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkVectorBSplineInterpolateImageFunction.txx" +#endif + +#endif + +//#endif diff --git a/itk/clitkVectorBSplineInterpolateImageFunction.txx b/itk/clitkVectorBSplineInterpolateImageFunction.txx new file mode 100644 index 0000000..d80178b --- /dev/null +++ b/itk/clitkVectorBSplineInterpolateImageFunction.txx @@ -0,0 +1,563 @@ +#ifndef _clitkVectorBSplineInterpolateImageFunction_txx +#define _clitkVectorBSplineInterpolateImageFunction_txx + +// First, make sure that we include the configuration file. +// This line may be removed once the ThreadSafeTransform gets +// integrated into ITK. +#include "itkConfigure.h" + +// Second, redirect to the optimized version if necessary +// #ifdef ITK_USE_OPTIMIZED_REGISTRATION_METHODS +// #include "itkOptVectorBSplineInterpolateImageFunction.txx" +// #else + +#include "clitkVectorBSplineInterpolateImageFunction.h" + + +#include "itkImageLinearIteratorWithIndex.h" +#include "itkImageRegionConstIteratorWithIndex.h" +#include "itkImageRegionIterator.h" + +#include "itkVector.h" + +#include "itkMatrix.h" + +namespace clitk +{ + +/** + * Constructor + */ +template +VectorBSplineInterpolateImageFunction +::VectorBSplineInterpolateImageFunction() +{ + m_SplineOrder = 0; + unsigned int SplineOrder = 3; + m_CoefficientFilter = CoefficientFilter::New(); + // ***TODO: Should we store coefficients in a variable or retrieve from filter? + m_Coefficients = CoefficientImageType::New(); + this->SetSplineOrder(SplineOrder); + this->m_UseImageDirection = false; +} + +/** + * Standard "PrintSelf" method + */ +template +void +VectorBSplineInterpolateImageFunction +::PrintSelf( + std::ostream& os, + itk::Indent indent) const +{ + Superclass::PrintSelf( os, indent ); + os << indent << "Spline Order: " << m_SplineOrder << std::endl; + os << indent << "UseImageDirection = " + << (this->m_UseImageDirection ? "On" : "Off") << std::endl; + +} + + +template +void +VectorBSplineInterpolateImageFunction +::SetInputImage(const TImageType * inputData) +{ + if ( inputData ) + { + + DD("calling decomposition filter"); + m_CoefficientFilter->SetInput(inputData); + + // the Coefficient Filter requires that the spline order and the input data be set. + // TODO: We need to ensure that this is only run once and only after both input and + // spline order have been set. Should we force an update after the + // splineOrder has been set also? + + m_CoefficientFilter->Update(); + m_Coefficients = m_CoefficientFilter->GetOutput(); + + + // Call the Superclass implementation after, in case the filter + // pulls in more of the input image + Superclass::SetInputImage(inputData); + + m_DataLength = inputData->GetBufferedRegion().GetSize(); + + } + else + { + m_Coefficients = NULL; + } +} + + +template +void +VectorBSplineInterpolateImageFunction +::SetSplineOrder(unsigned int SplineOrder) +{ + if (SplineOrder == m_SplineOrder) + { + return; + } + m_SplineOrder = SplineOrder; + m_CoefficientFilter->SetSplineOrder( SplineOrder ); + + //this->SetPoles();/ + m_MaxNumberInterpolationPoints = 1; + for (unsigned int n=0; n < ImageDimension; n++) + { + m_MaxNumberInterpolationPoints *= ( m_SplineOrder + 1); + } + this->GeneratePointsToIndex( ); +} + + +template +typename +VectorBSplineInterpolateImageFunction +::OutputType +VectorBSplineInterpolateImageFunction +::EvaluateAtContinuousIndex( const ContinuousIndexType & x ) const +{ + vnl_matrix EvaluateIndex(ImageDimension, ( m_SplineOrder + 1 )); + + // compute the interpolation indexes + this->DetermineRegionOfSupport(EvaluateIndex, x, m_SplineOrder); + + // Determine weights + vnl_matrix weights(ImageDimension, ( m_SplineOrder + 1 )); + SetInterpolationWeights( x, EvaluateIndex, weights, m_SplineOrder ); + + // Modify EvaluateIndex at the boundaries using mirror boundary conditions + this->ApplyMirrorBoundaryConditions(EvaluateIndex, m_SplineOrder); + + // perform interpolation + //JV + itk::Vector interpolated; + for (unsigned int i=0; i< VectorDimension; i++) interpolated[i]=itk::NumericTraits::Zero; + + IndexType coefficientIndex; + // Step through eachpoint in the N-dimensional interpolation cube. + for (unsigned int p = 0; p < m_MaxNumberInterpolationPoints; p++) + { + // translate each step into the N-dimensional index. + // IndexType pointIndex = PointToIndex( p ); + + double w = 1.0; + for (unsigned int n = 0; n < ImageDimension; n++ ) + { + + w *= weights[n][ m_PointsToIndex[p][n] ]; + coefficientIndex[n] = EvaluateIndex[n][m_PointsToIndex[p][n]]; // Build up ND index for coefficients. + } + // Convert our step p to the appropriate point in ND space in the + // m_Coefficients cube. + //JV shouldn't be necessary + for (unsigned int i=0; iGetPixel(coefficientIndex)[i]; + } + +/* double interpolated = 0.0; + IndexType coefficientIndex; + // Step through eachpoint in the N-dimensional interpolation cube. + for (unsigned int sp = 0; sp <= m_SplineOrder; sp++) + { + for (unsigned int sp1=0; sp1 <= m_SplineOrder; sp1++) + { + + double w = 1.0; + for (unsigned int n1 = 0; n1 < ImageDimension; n1++ ) + { + w *= weights[n1][ sp1 ]; + coefficientIndex[n1] = EvaluateIndex[n1][sp]; // Build up ND index for coefficients. + } + + interpolated += w * m_Coefficients->GetPixel(coefficientIndex); + } + } +*/ + return(interpolated); + +} + + +template +typename +VectorBSplineInterpolateImageFunction +:: CovariantVectorType +VectorBSplineInterpolateImageFunction +::EvaluateDerivativeAtContinuousIndex( const ContinuousIndexType & x ) const +{ + vnl_matrix EvaluateIndex(ImageDimension, ( m_SplineOrder + 1 )); + + // compute the interpolation indexes + // TODO: Do we need to revisit region of support for the derivatives? + this->DetermineRegionOfSupport(EvaluateIndex, x, m_SplineOrder); + + // Determine weights + vnl_matrix weights(ImageDimension, ( m_SplineOrder + 1 )); + SetInterpolationWeights( x, EvaluateIndex, weights, m_SplineOrder ); + + vnl_matrix weightsDerivative(ImageDimension, ( m_SplineOrder + 1)); + SetDerivativeWeights( x, EvaluateIndex, weightsDerivative, ( m_SplineOrder ) ); + + // Modify EvaluateIndex at the boundaries using mirror boundary conditions + this->ApplyMirrorBoundaryConditions(EvaluateIndex, m_SplineOrder); + + const InputImageType * inputImage = this->GetInputImage(); + const typename InputImageType::SpacingType & spacing = inputImage->GetSpacing(); + + // Calculate derivative + CovariantVectorType derivativeValue; + double tempValue; + IndexType coefficientIndex; + for (unsigned int n = 0; n < ImageDimension; n++) + { + derivativeValue[n] = 0.0; + for (unsigned int p = 0; p < m_MaxNumberInterpolationPoints; p++) + { + tempValue = 1.0 ; + for (unsigned int n1 = 0; n1 < ImageDimension; n1++) + { + //coefficientIndex[n1] = EvaluateIndex[n1][sp]; + coefficientIndex[n1] = EvaluateIndex[n1][m_PointsToIndex[p][n1]]; + + if (n1 == n) + { + //w *= weights[n][ m_PointsToIndex[p][n] ]; + tempValue *= weightsDerivative[n1][ m_PointsToIndex[p][n1] ]; + } + else + { + tempValue *= weights[n1][ m_PointsToIndex[p][n1] ]; + } + } + derivativeValue[n] += m_Coefficients->GetPixel(coefficientIndex) * tempValue ; + } + derivativeValue[n] /= spacing[n]; // take spacing into account + } + +#ifdef ITK_USE_ORIENTED_IMAGE_DIRECTION + if( this->m_UseImageDirection ) + { + CovariantVectorType orientedDerivative; + inputImage->TransformLocalVectorToPhysicalVector( derivativeValue, orientedDerivative ); + return orientedDerivative; + } +#endif + + return(derivativeValue); +} + + +template +void +VectorBSplineInterpolateImageFunction +::SetInterpolationWeights( const ContinuousIndexType & x, const vnl_matrix & EvaluateIndex, + vnl_matrix & weights, unsigned int splineOrder ) const +{ + // For speed improvements we could make each case a separate function and use + // function pointers to reference the correct weight order. + // Left as is for now for readability. + double w, w2, w4, t, t0, t1; + + switch (splineOrder) + { + case 3: + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] - (double) EvaluateIndex[n][1]; + weights[n][3] = (1.0 / 6.0) * w * w * w; + weights[n][0] = (1.0 / 6.0) + 0.5 * w * (w - 1.0) - weights[n][3]; + weights[n][2] = w + weights[n][0] - 2.0 * weights[n][3]; + weights[n][1] = 1.0 - weights[n][0] - weights[n][2] - weights[n][3]; + } + break; + case 0: + for (unsigned int n = 0; n < ImageDimension; n++) + { + weights[n][0] = 1; // implements nearest neighbor + } + break; + case 1: + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] - (double) EvaluateIndex[n][0]; + weights[n][1] = w; + weights[n][0] = 1.0 - w; + } + break; + case 2: + for (unsigned int n = 0; n < ImageDimension; n++) + { + /* x */ + w = x[n] - (double)EvaluateIndex[n][1]; + weights[n][1] = 0.75 - w * w; + weights[n][2] = 0.5 * (w - weights[n][1] + 1.0); + weights[n][0] = 1.0 - weights[n][1] - weights[n][2]; + } + break; + case 4: + for (unsigned int n = 0; n < ImageDimension; n++) + { + /* x */ + w = x[n] - (double)EvaluateIndex[n][2]; + w2 = w * w; + t = (1.0 / 6.0) * w2; + weights[n][0] = 0.5 - w; + weights[n][0] *= weights[n][0]; + weights[n][0] *= (1.0 / 24.0) * weights[n][0]; + t0 = w * (t - 11.0 / 24.0); + t1 = 19.0 / 96.0 + w2 * (0.25 - t); + weights[n][1] = t1 + t0; + weights[n][3] = t1 - t0; + weights[n][4] = weights[n][0] + t0 + 0.5 * w; + weights[n][2] = 1.0 - weights[n][0] - weights[n][1] - weights[n][3] - weights[n][4]; + } + break; + case 5: + for (unsigned int n = 0; n < ImageDimension; n++) + { + /* x */ + w = x[n] - (double)EvaluateIndex[n][2]; + w2 = w * w; + weights[n][5] = (1.0 / 120.0) * w * w2 * w2; + w2 -= w; + w4 = w2 * w2; + w -= 0.5; + t = w2 * (w2 - 3.0); + weights[n][0] = (1.0 / 24.0) * (1.0 / 5.0 + w2 + w4) - weights[n][5]; + t0 = (1.0 / 24.0) * (w2 * (w2 - 5.0) + 46.0 / 5.0); + t1 = (-1.0 / 12.0) * w * (t + 4.0); + weights[n][2] = t0 + t1; + weights[n][3] = t0 - t1; + t0 = (1.0 / 16.0) * (9.0 / 5.0 - t); + t1 = (1.0 / 24.0) * w * (w4 - w2 - 5.0); + weights[n][1] = t0 + t1; + weights[n][4] = t0 - t1; + } + break; + default: + // SplineOrder not implemented yet. + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "SplineOrder must be between 0 and 5. Requested spline order has not been implemented yet." ); + throw err; + break; + } + +} + +template +void +VectorBSplineInterpolateImageFunction +::SetDerivativeWeights( const ContinuousIndexType & x, const vnl_matrix & EvaluateIndex, + vnl_matrix & weights, unsigned int splineOrder ) const +{ + // For speed improvements we could make each case a separate function and use + // function pointers to reference the correct weight order. + // Another possiblity would be to loop inside the case statement (reducing the number + // of switch statement executions to one per routine call. + // Left as is for now for readability. + double w, w1, w2, w3, w4, w5, t, t0, t1, t2; + int derivativeSplineOrder = (int) splineOrder -1; + + switch (derivativeSplineOrder) + { + + // Calculates B(splineOrder) ( (x + 1/2) - xi) - B(splineOrder -1) ( (x - 1/2) - xi) + case -1: + // Why would we want to do this? + for (unsigned int n = 0; n < ImageDimension; n++) + { + weights[n][0] = 0.0; + } + break; + case 0: + for (unsigned int n = 0; n < ImageDimension; n++) + { + weights[n][0] = -1.0; + weights[n][1] = 1.0; + } + break; + case 1: + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] + 0.5 - (double)EvaluateIndex[n][1]; + // w2 = w; + w1 = 1.0 - w; + + weights[n][0] = 0.0 - w1; + weights[n][1] = w1 - w; + weights[n][2] = w; + } + break; + case 2: + + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] + .5 - (double)EvaluateIndex[n][2]; + w2 = 0.75 - w * w; + w3 = 0.5 * (w - w2 + 1.0); + w1 = 1.0 - w2 - w3; + + weights[n][0] = 0.0 - w1; + weights[n][1] = w1 - w2; + weights[n][2] = w2 - w3; + weights[n][3] = w3; + } + break; + case 3: + + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] + 0.5 - (double)EvaluateIndex[n][2]; + w4 = (1.0 / 6.0) * w * w * w; + w1 = (1.0 / 6.0) + 0.5 * w * (w - 1.0) - w4; + w3 = w + w1 - 2.0 * w4; + w2 = 1.0 - w1 - w3 - w4; + + weights[n][0] = 0.0 - w1; + weights[n][1] = w1 - w2; + weights[n][2] = w2 - w3; + weights[n][3] = w3 - w4; + weights[n][4] = w4; + } + break; + case 4: + for (unsigned int n = 0; n < ImageDimension; n++) + { + w = x[n] + .5 - (double)EvaluateIndex[n][3]; + t2 = w * w; + t = (1.0 / 6.0) * t2; + w1 = 0.5 - w; + w1 *= w1; + w1 *= (1.0 / 24.0) * w1; + t0 = w * (t - 11.0 / 24.0); + t1 = 19.0 / 96.0 + t2 * (0.25 - t); + w2 = t1 + t0; + w4 = t1 - t0; + w5 = w1 + t0 + 0.5 * w; + w3 = 1.0 - w1 - w2 - w4 - w5; + + weights[n][0] = 0.0 - w1; + weights[n][1] = w1 - w2; + weights[n][2] = w2 - w3; + weights[n][3] = w3 - w4; + weights[n][4] = w4 - w5; + weights[n][5] = w5; + } + break; + + default: + // SplineOrder not implemented yet. + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "SplineOrder (for derivatives) must be between 1 and 5. Requested spline order has not been implemented yet." ); + throw err; + break; + } + +} + + +// Generates m_PointsToIndex; +template +void +VectorBSplineInterpolateImageFunction +::GeneratePointsToIndex( ) +{ + // m_PointsToIndex is used to convert a sequential location to an N-dimension + // index vector. This is precomputed to save time during the interpolation routine. + m_PointsToIndex.resize(m_MaxNumberInterpolationPoints); + for (unsigned int p = 0; p < m_MaxNumberInterpolationPoints; p++) + { + int pp = p; + unsigned long indexFactor[ImageDimension]; + indexFactor[0] = 1; + for (int j=1; j< static_cast(ImageDimension); j++) + { + indexFactor[j] = indexFactor[j-1] * ( m_SplineOrder + 1 ); + } + for (int j = (static_cast(ImageDimension) - 1); j >= 0; j--) + { + m_PointsToIndex[p][j] = pp / indexFactor[j]; + pp = pp % indexFactor[j]; + } + } +} + +template +void +VectorBSplineInterpolateImageFunction +::DetermineRegionOfSupport( vnl_matrix & evaluateIndex, + const ContinuousIndexType & x, + unsigned int splineOrder ) const +{ + long indx; + +// compute the interpolation indexes + for (unsigned int n = 0; n< ImageDimension; n++) + { + if (splineOrder & 1) // Use this index calculation for odd splineOrder + { + indx = (long)vcl_floor((float)x[n]) - splineOrder / 2; + for (unsigned int k = 0; k <= splineOrder; k++) + { + evaluateIndex[n][k] = indx++; + } + } + else // Use this index calculation for even splineOrder + { + indx = (long)vcl_floor((float)(x[n] + 0.5)) - splineOrder / 2; + for (unsigned int k = 0; k <= splineOrder; k++) + { + evaluateIndex[n][k] = indx++; + } + } + } +} + +template +void +VectorBSplineInterpolateImageFunction +::ApplyMirrorBoundaryConditions(vnl_matrix & evaluateIndex, + unsigned int splineOrder) const +{ + for (unsigned int n = 0; n < ImageDimension; n++) + { + long dataLength2 = 2 * m_DataLength[n] - 2; + + // apply the mirror boundary conditions + // TODO: We could implement other boundary options beside mirror + if (m_DataLength[n] == 1) + { + for (unsigned int k = 0; k <= splineOrder; k++) + { + evaluateIndex[n][k] = 0; + } + } + else + { + for (unsigned int k = 0; k <= splineOrder; k++) + { + // btw - Think about this couldn't this be replaced with a more elagent modulus method? + evaluateIndex[n][k] = (evaluateIndex[n][k] < 0L) ? (-evaluateIndex[n][k] - dataLength2 * ((-evaluateIndex[n][k]) / dataLength2)) + : (evaluateIndex[n][k] - dataLength2 * (evaluateIndex[n][k] / dataLength2)); + if ((long) m_DataLength[n] <= evaluateIndex[n][k]) + { + evaluateIndex[n][k] = dataLength2 - evaluateIndex[n][k]; + } + } + } + } +} + +} // namespace itk + +#endif + +//#endif diff --git a/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.h b/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.h new file mode 100644 index 0000000..75582a7 --- /dev/null +++ b/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.h @@ -0,0 +1,139 @@ +#ifndef __clitkVectorBSplineInterpolateImageFunctionWithLUT_h +#define __clitkVectorBSplineInterpolateImageFunctionWithLUT_h + +/* ========================================================================= + + @file clitVectorkBSplineInterpolateImageFunctionWithLUT.h + @author jefvdmb@gmail.com + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ + +#include "itkBSplineWeightsCalculator.h" +//#include "clitkTimer.h" +#include "clitkVectorBSplineInterpolateImageFunction.h" + +namespace clitk { + + template < + class TImageType, + class TCoordRep = double, + class TCoefficientType = double > + class ITK_EXPORT VectorBSplineInterpolateImageFunctionWithLUT : + public VectorBSplineInterpolateImageFunction { + + public: + /** Class typedefs */ + typedef VectorBSplineInterpolateImageFunctionWithLUT Self; + typedef VectorBSplineInterpolateImageFunction Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + typedef typename Superclass::OutputType OutputType; + typedef typename Superclass::ContinuousIndexType ContinuousIndexType; + typedef typename TImageType::IndexType IndexType; + typedef typename TImageType::IndexValueType IndexValueType; + typedef typename TImageType::SizeType SizeType; + typedef typename TImageType::SpacingType SpacingType; + + typedef TCoefficientType CoefficientDataType; + typedef typename Superclass::CoefficientImagePixelType CoefficientImagePixelType; + typedef typename Superclass::CoefficientImageType CoefficientImageType; + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro(Self); + + /** Setting LUT sampling (one parameters by dimension or a single + one for all dim); Default is 10 (for each dim) **/ + void SetLUTSamplingFactor(const int& s); + void SetLUTSamplingFactors(const SizeType& s); + + /** Get/Sets the Spline Order, supports 0th - 5th order + * splines. The default is a 3rd order spline. */ + void SetSplineOrder(const unsigned int & SplineOrder); + + //JV this is added to support different degrees over each dimension + void SetSplineOrders(const SizeType & SplineOrders); + + /** Set the input image. This must be set by the user. */ + virtual void SetInputImage(const TImageType * inputData); + //void SetOutputSpacing(const SpacingType & s); + //void SetInputImageIsCoefficient(bool inputIsCoef) { mInputIsCoef = inputIsCoef; } + + /** Evaluate the function at a ContinuousIndex position. + Overwritten for taking LUT into account */ + virtual OutputType EvaluateAtContinuousIndex(const ContinuousIndexType & index ) const; + void EvaluateWeightsAtContinuousIndex(const ContinuousIndexType & x, const TCoefficientType ** pweights, IndexType & evaluateIndex) const; + + /** Static convenient functions to compute BSpline weights for + various order, dimension, sampling ... **/ + static void ComputeBlendingWeights(int dim, int order, int sampling, TCoefficientType * weights); + + /** Timer giving computation time for coefficients computation **/ + // const clitk::Timer & GetCoefTimer() const { return mCoefficientTimer; } + + /** Get estimated error **/ + + double GetIntrinsicError() const { return *mIntrinsecError; } + long GetNumberOfError() const { return *mNumberOfError; } + double GetIntrinsicErrorMax() const { return *mIntrinsecErrorMax; } + + protected: + VectorBSplineInterpolateImageFunctionWithLUT(); + ~VectorBSplineInterpolateImageFunctionWithLUT(){;} + + SizeType mSupport; // nb of coef values used for interpolation (order+1) in 1 dimension + SizeType mHalfSupport; // half size of the previous + unsigned int mSupportSize; // Total support size for all dimension + std::vector mSupportOffset; // Memory pointer offset for going from one coef position to the other (inside the whole support) + std::vector mSupportIndex; // nD Index of all support values + IndexType mInputMemoryOffset; // Memory dimension offsets for input image + + /** Sampling factors for LUT weights **/ + SizeType mSamplingFactors; + bool mWeightsAreUpToDate; + //SpacingType mOutputSpacing; + + double * mIntrinsecError; + double * mIntrinsecErrorMax; + long * mNumberOfError; + + //JV add iscoeff, and splineorders + // bool mInputIsCoef; + SizeType mSplineOrders; + + // Filter to compute weights + itk::BSplineWeightsCalculator mWeightsCalculator; + + // Convenient functions + void UpdatePrecomputedWeights(); + void UpdateWeightsProperties(); + IndexType GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const; + + // Timing options + // clitk::Timer mCoefficientTimer; + // clitk::Timer mLUTTimer; + bool mTimerEnabled; + + //JV threadsafety: everything on the stack + //std::vector mCorrectedSupportOffset; + //std::vector mCorrectedSupportIndex; + TCoefficientType * coef; + + }; // end class clitkVectorBSplineInterpolateImageFunctionWithLUT +} // end namespace + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkVectorBSplineInterpolateImageFunctionWithLUT.txx" +#endif + +#endif /* end #define CLITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H */ diff --git a/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.txx b/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.txx new file mode 100644 index 0000000..8cd0ab2 --- /dev/null +++ b/itk/clitkVectorBSplineInterpolateImageFunctionWithLUT.txx @@ -0,0 +1,438 @@ +#ifndef _CLITKVECTORBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_TXX +#define _CLITKVECTORBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_TXX + +/* ========================================================================= + +@file itkBSplineInterpolateImageFunctionWithLUT.txx +@author jefvdmb@gmail.com + +Copyright (c) +* CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). +All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. +* Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France +* http://www.creatis.insa-lyon.fr/rio + +This software is distributed WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +========================================================================= */ +namespace clitk +{ + //==================================================================== + template + VectorBSplineInterpolateImageFunctionWithLUT:: + VectorBSplineInterpolateImageFunctionWithLUT():Superclass() { + // Set default values + //for(int i=0; i + void VectorBSplineInterpolateImageFunctionWithLUT:: + SetLUTSamplingFactor(const int& s) { + for(int i=0; i + void VectorBSplineInterpolateImageFunctionWithLUT:: + SetLUTSamplingFactors(const SizeType& s) { + for(int i=0; i + // void VectorBSplineInterpolateImageFunctionWithLUT:: + // SetOutputSpacing(const SpacingType & s) { + // for(int i=0; i + void VectorBSplineInterpolateImageFunctionWithLUT:: + SetSplineOrder(const unsigned int& SplineOrder) { + Superclass::SetSplineOrder(SplineOrder); + // Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l + void VectorBSplineInterpolateImageFunctionWithLUT:: + SetSplineOrders(const SizeType& SplineOrders) { + mSplineOrders=SplineOrders; + + // Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l + void VectorBSplineInterpolateImageFunctionWithLUT:: + SetInputImage(const TImageType * inputData) { + + //============================== + // if (!mInputIsCoef) + // { + Superclass::SetInputImage(inputData); + // } + + //============================== + // //JV Don't call superclass (decomposition filter is executeed each time!) + // else + // { + // this->m_Coefficients = inputData; + // if ( this->m_Coefficients.IsNotNull()) + // { + // this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + // } + + // //Call super-superclass in case more input arrives + // itk::ImageFunction::RealType, TCoefficientType>::SetInputImage(inputData); + // } + + if (!inputData) return; + UpdateWeightsProperties(); + + } + + //==================================================================== + template + void VectorBSplineInterpolateImageFunctionWithLUT:: + UpdateWeightsProperties() { + + // Compute Memory offset inside coefficients images (for looping over coefficients) + static const unsigned int d = TImageType::ImageDimension; + mInputMemoryOffset[0] = 1; + for(unsigned int l=1; lm_Coefficients->GetLargestPossibleRegion().GetSize(l-1); + } + + //JV Put here? + if (!mWeightsAreUpToDate) + { + // Compute mSupportOffset according to input size + mSupportOffset.resize(mSupportSize); + mSupportIndex.resize(mSupportSize); + for(unsigned int l=0; l(mSupportIndex[k], mInputMemoryOffset); + // next coefficient index + if (k != mSupportSize-1) { + for(unsigned int l=0; l(mSupportIndex[k+1][l]) == mSupport[l]) { + mSupportIndex[k+1][l] = 0; + l++; + } + else stop = true; + } + } + } + + // // Check + // for(unsigned int l=0; l + void VectorBSplineInterpolateImageFunctionWithLUT:: + UpdatePrecomputedWeights() { + // mLUTTimer.Reset(); + // mLUTTimer.Start(); + mWeightsCalculator.SetSplineOrders(mSplineOrders); + mWeightsCalculator.SetSamplingFactors(mSamplingFactors); + mWeightsCalculator.ComputeTensorProducts(); + mWeightsAreUpToDate = true; + //DS + // coef = new TCoefficientType[mSupportSize]; + // mCorrectedSupportIndex.resize(mSupportSize); + // mCorrectedSupportOffset.resize(mSupportSize); + // mLUTTimer.Stop(); + // mLUTTimer.Print("LUT \t"); + } + //==================================================================== + + //==================================================================== + template + typename VectorBSplineInterpolateImageFunctionWithLUT::IndexType + VectorBSplineInterpolateImageFunctionWithLUT:: + GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const { + + /* + WARNING : sometimes, a floating number x could not really be + represented in memory. In this case, the difference between x and + floor(x) can be almost 1 (instead of 0). So we take into account + such special case, otherwise it could lead to annoying results. + */ + // static const TCoefficientType tiny = 1.0e-7; + IndexType index; + + for(int l=0; l *mIntrinsecErrorMax) *mIntrinsecErrorMax = fabs(index[l]-t2); + */ + + // When to close to 1, take the next coefficient for odd order, but + // only change index for odd + if (index[l] == (int)mSamplingFactors[l]) { + index[l] = 0; + if (mSplineOrders[l] & 1) EvaluateIndex[l] = EvaluateIndex[l]+1; + } + } + + // The end + return index; + } + + + //==================================================================== + + //==================================================================== + template + typename VectorBSplineInterpolateImageFunctionWithLUT::OutputType + VectorBSplineInterpolateImageFunctionWithLUT:: + EvaluateAtContinuousIndex(const ContinuousIndexType & x) const { + + // For shorter coding + static const unsigned int d = TImageType::ImageDimension; + + // Compute the index of the first interpolation coefficient in the coefficient image + IndexType evaluateIndex; + long indx; + for (unsigned int l=0; lm_SplineOrder / 2; + evaluateIndex[l] = indx; + } + else { // Use this index calculation for even splineOrder + if (mSplineOrders[l] == 0) evaluateIndex[l] = (long)rint(x[l]); + else { + indx = (long)vcl_floor((x[l]+ 0.5)) - mSplineOrders[l] / 2; //this->m_SplineOrder / 2; + evaluateIndex[l] = indx; + } + } + } + + // Compute index of precomputed weights and get pointer to first weights + const IndexType weightIndex = GetSampleIndexOfPixelPosition(x, evaluateIndex); + const TCoefficientType * pweights = mWeightsCalculator.GetFirstTensorProduct(weightIndex); + + // Check boundaries + bool boundaryCase = false; + for (unsigned int l=0; l= this->m_Coefficients->GetLargestPossibleRegion().GetSize(l)) { + boundaryCase = true; + } + } + + // Pointer to support offset + const int * psupport; + + // Special case for boundary (to be changed ....) + std::vector correctedSupportOffset; + if (boundaryCase) { + // return -1000; + //std::vector coef(mSupportSize); + // DD(EvaluateIndex); + //std::vector CorrectedSupportOffset;//(mSupportSize); + std::vector correctedSupportIndex;//(mSupportSize); + correctedSupportIndex.resize(mSupportSize); + correctedSupportOffset.resize(mSupportSize); + for(unsigned int i=0; im_Coefficients->GetLargestPossibleRegion().GetSize(l); + // DD(a); + // DD(b); + long d2 = 2 * b - 2; + if (a < 0) { + correctedSupportIndex[i][l] = -a - d2*(-a/d2) - evaluateIndex[l];//mSupportIndex[i][l]-a; + } + else { + if (a>=b) { + correctedSupportIndex[i][l] = d2 - a - evaluateIndex[l]; + } + else { + correctedSupportIndex[i][l] = mSupportIndex[i][l]; //a - d2*(a/d2) - EvaluateIndex[l]; + } + /* + if (a>=b) { + correctedSupportIndex[i][l] = d2 - a - EvaluateIndex[l];//mSupportIndex[i][l] - (a-(b-1)); + } + else { + correctedSupportIndex[i][l] = mSupportIndex[i][l]; + } + */ + } + } + // DD(correctedSupportIndex[i]); + correctedSupportOffset[i] = itk::Index2Offset(correctedSupportIndex[i], mInputMemoryOffset); + } + // for (unsigned int l=0; lm_Coefficients->GetPixel(evaluateIndex)); + + // Main loop over BSpline support + CoefficientImagePixelType interpolated = 0.0; + for (unsigned int p=0; p + void + VectorBSplineInterpolateImageFunctionWithLUT:: + EvaluateWeightsAtContinuousIndex(const ContinuousIndexType& x, const TCoefficientType ** pweights, IndexType & evaluateIndex)const { + + // JV Compute BSpline weights if not up to date! Problem const: pass image as last + // if (!mWeightsAreUpToDate) UpdatePrecomputedWeights(); + + // For shorter coding + static const unsigned int d = TImageType::ImageDimension; + + // Compute the index of the first interpolation coefficient in the coefficient image + //IndexType evaluateIndex; + long indx; + for (unsigned int l=0; lm_SplineOrder / 2; + evaluateIndex[l] = indx; + } + else { // Use this index calculation for even splineOrder + if (mSplineOrders[l] == 0) evaluateIndex[l] = (long)rint(x[l]); + else { + indx = (long)vcl_floor((x[l]+ 0.5)) - mSplineOrders[l] / 2; //this->m_SplineOrder / 2; + evaluateIndex[l] = indx; + } + } + } + + // Compute index of precomputed weights and get pointer to first weights + const IndexType weightIndex = GetSampleIndexOfPixelPosition(x, evaluateIndex); + *pweights = mWeightsCalculator.GetFirstTensorProduct(weightIndex); + + } + //==================================================================== + + + + +} //end namespace + +#endif //_CLITKVECTORBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_TXX diff --git a/itk/clitkVectorBSplineResampleImageFunction.h b/itk/clitkVectorBSplineResampleImageFunction.h new file mode 100644 index 0000000..73f99d8 --- /dev/null +++ b/itk/clitkVectorBSplineResampleImageFunction.h @@ -0,0 +1,69 @@ +#ifndef __clitkVectorBSplineResampleImageFunction_h +#define __clitkVectorBSplineResampleImageFunction_h + +#include "clitkVectorBSplineInterpolateImageFunction.h" + +namespace clitk +{ +/** \class VectorBSplineResampleImageFunction + * \brief Resample image intensity from a VectorBSpline coefficient image. + * + * This class resample the image intensity at a non-integer position + * from the input VectorBSpline coefficient image. + * + * Spline order may be from 0 to 5. + * + * In ITK, BSpline coefficient can be generated using a + * BSplineDecompositionImageFilter. Using this image function in + * conjunction with ResampleImageFunction allows the reconstruction + * of the original image at different resolution and size. + * + * \sa VectorBSplineInterpolateImageFunction + * \sa VectorBSplineDecompositionImageFilter + * \sa VectorResampleImageFilter + * + * \ingroup ImageFunctions + */ +template +class ITK_EXPORT VectorBSplineResampleImageFunction : + public VectorBSplineInterpolateImageFunction< + TImageType,TCoordRep,ITK_TYPENAME TImageType::PixelType::ValueType > +{ +public: + /** Standard class typedefs. */ + typedef VectorBSplineResampleImageFunction Self; + typedef VectorBSplineInterpolateImageFunction Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(VectorBSplineResampleImageFunction, + VectorBSplineInterpolateImageFunction); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Set the input image representing the BSplineCoefficients */ + virtual void SetInputImage(const TImageType * inputData) + { + // bypass my superclass + this->itk::VectorInterpolateImageFunction::SetInputImage(inputData); + this->m_Coefficients = inputData; + if ( this->m_Coefficients.IsNotNull() ) + { + this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + } + } + +protected: + VectorBSplineResampleImageFunction() {}; + virtual ~VectorBSplineResampleImageFunction() {}; + +private: + VectorBSplineResampleImageFunction(const Self&);//purposely not implemented +}; + +} // namespace clitk + + +#endif diff --git a/itk/clitkVectorBSplineResampleImageFunctionWithLUT.h b/itk/clitkVectorBSplineResampleImageFunctionWithLUT.h new file mode 100644 index 0000000..815add9 --- /dev/null +++ b/itk/clitkVectorBSplineResampleImageFunctionWithLUT.h @@ -0,0 +1,77 @@ +#ifndef __clitkVectorBSplineResampleImageFunctionWithLUT_h +#define __clitkVectorBSplineResampleImageFunctionWithLUT_h + +#include "clitkVectorBSplineInterpolateImageFunctionWithLUT.h" + +namespace clitk +{ +/** \class VectorBSplineResampleImageFunctionWithLUT + * \brief Resample image intensity from a VectorBSpline coefficient image using a LUT. + * + * This class resample the image intensity at a non-integer position + * from the input VectorBSpline coefficient image using a LUT. + * + * Spline order may be from 0 to 5. + * + * In ITK, VectorBSpline coefficient can be generated using a + * VectorBSplineDecompositionImageFilter. Using this image function in + * conjunction with ResampleImageFunction allows the reconstruction + * of the original image at different resolution and size. + * + * \sa VectorBSplineInterpolateImageFunctionWithLUT + * \sa VectorBSplineDecompositionImageFilter + * \sa ResampleImageFilter + * + * \ingroup ImageFunctions + */ +template +class ITK_EXPORT VectorBSplineResampleImageFunctionWithLUT : + public VectorBSplineInterpolateImageFunctionWithLUT< + TImageType,TCoordRep,ITK_TYPENAME TImageType::PixelType::ValueType > +{ +public: + /** Standard class typedefs. */ + typedef VectorBSplineResampleImageFunctionWithLUT Self; + typedef VectorBSplineInterpolateImageFunctionWithLUT< + TImageType,TCoordRep, ITK_TYPENAME TImageType::PixelType::ValueType > Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(VectorBSplineReconstructionImageFunction, + VectorBSplineInterpolateImageFunctionWithLUT); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Set the input image representing the BSplineCoefficients */ + virtual void SetInputImage(const TImageType * inputData) + { + // bypass my superclass + this->itk::VectorInterpolateImageFunction::SetInputImage(inputData); + this->m_Coefficients = inputData; + if ( this->m_Coefficients.IsNotNull() ) + { + this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + + // JV specific for BLUT ( contains the call to UpdatePrecomputedWeights() ) + this->UpdateWeightsProperties(); + } + } + +protected: + VectorBSplineResampleImageFunctionWithLUT() {}; + virtual ~VectorBSplineResampleImageFunctionWithLUT() {}; + void PrintSelf(std::ostream& os, itk::Indent indent) const + { + this->Superclass::PrintSelf( os, indent ); + } + +private: + VectorBSplineResampleImageFunctionWithLUT(const Self&);//purposely not implemented +}; + +} // namespace clitk + + +#endif diff --git a/itk/itkBSplineDecompositionImageFilterWithOBD.h b/itk/itkBSplineDecompositionImageFilterWithOBD.h new file mode 100644 index 0000000..3eb2471 --- /dev/null +++ b/itk/itkBSplineDecompositionImageFilterWithOBD.h @@ -0,0 +1,137 @@ +#ifndef __itkBSplineDecompositionImageFilterWithOBD_h +#define __itkBSplineDecompositionImageFilterWithOBD_h + +#include + +#include "itkImageLinearIteratorWithIndex.h" +#include "vnl/vnl_matrix.h" + +#include "itkImageToImageFilter.h" + +namespace itk +{ + +template +class ITK_EXPORT BSplineDecompositionImageFilterWithOBD : + public ImageToImageFilter +{ +public: + /** Standard class typedefs. */ + typedef BSplineDecompositionImageFilterWithOBD Self; + typedef ImageToImageFilter Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(BSplineDecompositionImageFilterWithOBD, itk::ImageToImageFilter); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Inherit input and output image types from Superclass. */ + typedef typename Superclass::InputImageType InputImageType; + typedef typename Superclass::InputImagePointer InputImagePointer; + typedef typename Superclass::InputImageConstPointer InputImageConstPointer; + typedef typename Superclass::OutputImagePointer OutputImagePointer; + + //JV add the size + typedef typename InputImageType::SizeType SizeType; + + /** Dimension underlying input image. */ + itkStaticConstMacro(ImageDimension, unsigned int,TInputImage::ImageDimension); + itkStaticConstMacro(OutputImageDimension, unsigned int, TOutputImage::ImageDimension); + + /** Iterator typedef support */ + typedef ImageLinearIteratorWithIndex OutputLinearIterator; + + /** Get/Sets the Spline Order, supports 0th - 5th order splines. The default + * is a 3rd order spline. */ + //JV only used to set the current order + void SetSplineOrder(unsigned int SplineOrder); + //JV Set the order by Dimension + void SetSplineOrders(SizeType); + + itkGetMacro(SplineOrder, int); + +#ifdef ITK_USE_CONCEPT_CHECKING + /** Begin concept checking */ + itkConceptMacro(DimensionCheck, + (Concept::SameDimension)); + itkConceptMacro(InputConvertibleToDoubleCheck, + (Concept::Convertible)); + itkConceptMacro(OutputConvertibleToDoubleCheck, + (Concept::Convertible)); + itkConceptMacro(InputConvertibleToOutputCheck, + (Concept::Convertible)); + itkConceptMacro(DoubleConvertibleToOutputCheck, + (Concept::Convertible)); + /** End concept checking */ +#endif + +protected: + BSplineDecompositionImageFilterWithOBD(); + virtual ~BSplineDecompositionImageFilterWithOBD() {}; + void PrintSelf(std::ostream& os, Indent indent) const; + + void GenerateData( ); + + /** This filter requires all of the input image. */ + void GenerateInputRequestedRegion(); + + /** This filter must produce all of its output at once. */ + void EnlargeOutputRequestedRegion( DataObject *output ); + + /** These are needed by the smoothing spline routine. */ + std::vector m_Scratch; // temp storage for processing of Coefficients + typename TInputImage::SizeType m_DataLength; // Image size + unsigned int m_SplineOrder; // User specified spline order (3rd or cubic is the default) + + //JV multiple splineOrders + SizeType m_SplineOrders; //SplineOrder by dimension + + double m_SplinePoles[3];// Poles calculated for a given spline order + int m_NumberOfPoles; // number of poles + double m_Tolerance; // Tolerance used for determining initial causal coefficient + unsigned int m_IteratorDirection; // Direction for iterator incrementing + + +private: + BSplineDecompositionImageFilterWithOBD( const Self& ); //purposely not implemented + void operator=( const Self& ); //purposely not implemented + + /** Determines the poles given the Spline Order. */ + virtual void SetPoles(); + + /** Converts a vector of data to a vector of Spline coefficients. */ + virtual bool DataToCoefficients1D(); + + /** Converts an N-dimension image of data to an equivalent sized image + * of spline coefficients. */ + void DataToCoefficientsND(); + + /** Determines the first coefficient for the causal filtering of the data. */ + virtual void SetInitialCausalCoefficient(double z); + + /** Determines the first coefficient for the anti-causal filtering of the data. */ + virtual void SetInitialAntiCausalCoefficient(double z); + + /** Used to initialize the Coefficients image before calculation. */ + void CopyImageToImage(); + + /** Copies a vector of data from the Coefficients image to the m_Scratch vector. */ + void CopyCoefficientsToScratch( OutputLinearIterator & ); + + /** Copies a vector of data from m_Scratch to the Coefficients image. */ + void CopyScratchToCoefficients( OutputLinearIterator & ); + +}; + + +} // namespace itk +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkBSplineDecompositionImageFilterWithOBD.txx" +#endif + +#endif + diff --git a/itk/itkBSplineDecompositionImageFilterWithOBD.txx b/itk/itkBSplineDecompositionImageFilterWithOBD.txx new file mode 100644 index 0000000..1ed152b --- /dev/null +++ b/itk/itkBSplineDecompositionImageFilterWithOBD.txx @@ -0,0 +1,421 @@ +#ifndef _itkBSplineDecompositionImageFilterWithOBD_txx +#define _itkBSplineDecompositionImageFilterWithOBD_txx + +#include "itkBSplineDecompositionImageFilterWithOBD.h" +#include "itkImageRegionConstIteratorWithIndex.h" +#include "itkImageRegionIterator.h" +#include "itkProgressReporter.h" +#include "itkVector.h" + +namespace itk +{ + +/** + * Constructor + */ +template +BSplineDecompositionImageFilterWithOBD +::BSplineDecompositionImageFilterWithOBD() +{ + m_SplineOrder = 0; + int SplineOrder = 3; + m_Tolerance = 1e-10; // Need some guidance on this one...what is reasonable? + m_IteratorDirection = 0; + this->SetSplineOrder(SplineOrder); +} + + +/** + * Standard "PrintSelf" method + */ +template +void +BSplineDecompositionImageFilterWithOBD +::PrintSelf( + std::ostream& os, + Indent indent) const +{ + Superclass::PrintSelf( os, indent ); + os << indent << "Spline Order: " << m_SplineOrder << std::endl; + +} + + +template +bool +BSplineDecompositionImageFilterWithOBD +::DataToCoefficients1D() +{ + + // See Unser, 1993, Part II, Equation 2.5, + // or Unser, 1999, Box 2. for an explaination. + + double c0 = 1.0; + + if (m_DataLength[m_IteratorDirection] == 1) //Required by mirror boundaries + { + return false; + } + + // Compute overall gain + for (int k = 0; k < m_NumberOfPoles; k++) + { + // Note for cubic splines lambda = 6 + c0 = c0 * (1.0 - m_SplinePoles[k]) * (1.0 - 1.0 / m_SplinePoles[k]); + } + + // apply the gain + for (unsigned int n = 0; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] *= c0; + } + + // loop over all poles + for (int k = 0; k < m_NumberOfPoles; k++) + { + // causal initialization + this->SetInitialCausalCoefficient(m_SplinePoles[k]); + // causal recursion + for (unsigned int n = 1; n < m_DataLength[m_IteratorDirection]; n++) + { + m_Scratch[n] += m_SplinePoles[k] * m_Scratch[n - 1]; + } + + // anticausal initialization + this->SetInitialAntiCausalCoefficient(m_SplinePoles[k]); + // anticausal recursion + for ( int n = m_DataLength[m_IteratorDirection] - 2; 0 <= n; n--) + { + m_Scratch[n] = m_SplinePoles[k] * (m_Scratch[n + 1] - m_Scratch[n]); + } + } + return true; + +} + + +template +void +BSplineDecompositionImageFilterWithOBD +::SetSplineOrder(unsigned int SplineOrder) +{ + if (SplineOrder == m_SplineOrder) + { + return; + } + m_SplineOrder = SplineOrder; + this->SetPoles(); + this->Modified(); + +} + +//JV +template +void +BSplineDecompositionImageFilterWithOBD +::SetSplineOrders(SizeType SplineOrders) +{ + m_SplineOrders=SplineOrders; +} + +template +void +BSplineDecompositionImageFilterWithOBD +::SetPoles() +{ + /* See Unser, 1997. Part II, Table I for Pole values */ + // See also, Handbook of Medical Imaging, Processing and Analysis, Ed. Isaac N. Bankman, + // 2000, pg. 416. + switch (m_SplineOrder) + { + + case 3: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(3.0) - 2.0; + break; + case 0: + m_NumberOfPoles = 0; + break; + case 1: + m_NumberOfPoles = 0; + break; + case 2: + m_NumberOfPoles = 1; + m_SplinePoles[0] = vcl_sqrt(8.0) - 3.0; + break; + case 4: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(664.0 - vcl_sqrt(438976.0)) + vcl_sqrt(304.0) - 19.0; + m_SplinePoles[1] = vcl_sqrt(664.0 + vcl_sqrt(438976.0)) - vcl_sqrt(304.0) - 19.0; + break; + case 5: + m_NumberOfPoles = 2; + m_SplinePoles[0] = vcl_sqrt(135.0 / 2.0 - vcl_sqrt(17745.0 / 4.0)) + vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + m_SplinePoles[1] = vcl_sqrt(135.0 / 2.0 + vcl_sqrt(17745.0 / 4.0)) - vcl_sqrt(105.0 / 4.0) + - 13.0 / 2.0; + break; + default: + // SplineOrder not implemented yet. + ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION); + err.SetDescription( "SplineOrder must be between 0 and 5. Requested spline order has not been implemented yet." ); + throw err; + break; + } +} + + +template +void +BSplineDecompositionImageFilterWithOBD +::SetInitialCausalCoefficient(double z) +{ + /* begining InitialCausalCoefficient */ + /* See Unser, 1999, Box 2 for explaination */ + + double sum, zn, z2n, iz; + unsigned long horizon; + + /* this initialization corresponds to mirror boundaries */ + horizon = m_DataLength[m_IteratorDirection]; + zn = z; + if (m_Tolerance > 0.0) + { + horizon = (long)vcl_ceil(log(m_Tolerance) / vcl_log(fabs(z))); + } + if (horizon < m_DataLength[m_IteratorDirection]) + { + /* accelerated loop */ + sum = m_Scratch[0]; // verify this + for (unsigned int n = 1; n < horizon; n++) + { + sum += zn * m_Scratch[n]; + zn *= z; + } + m_Scratch[0] = sum; + } + else { + /* full loop */ + iz = 1.0 / z; + z2n = vcl_pow(z, (double)(m_DataLength[m_IteratorDirection] - 1L)); + sum = m_Scratch[0] + z2n * m_Scratch[m_DataLength[m_IteratorDirection] - 1L]; + z2n *= z2n * iz; + for (unsigned int n = 1; n <= (m_DataLength[m_IteratorDirection] - 2); n++) + { + sum += (zn + z2n) * m_Scratch[n]; + zn *= z; + z2n *= iz; + } + m_Scratch[0] = sum / (1.0 - zn * zn); + } +} + + +template +void +BSplineDecompositionImageFilterWithOBD +::SetInitialAntiCausalCoefficient(double z) +{ + // this initialization corresponds to mirror boundaries + /* See Unser, 1999, Box 2 for explaination */ + // Also see erratum at http://bigwww.epfl.ch/publications/unser9902.html + m_Scratch[m_DataLength[m_IteratorDirection] - 1] = + (z / (z * z - 1.0)) * + (z * m_Scratch[m_DataLength[m_IteratorDirection] - 2] + m_Scratch[m_DataLength[m_IteratorDirection] - 1]); +} + + +template +void +BSplineDecompositionImageFilterWithOBD +::DataToCoefficientsND() +{ + OutputImagePointer output = this->GetOutput(); + + Size size = output->GetBufferedRegion().GetSize(); + + unsigned int count = output->GetBufferedRegion().GetNumberOfPixels() / size[0] * ImageDimension; + + ProgressReporter progress(this, 0, count, 10); + + // Initialize coeffient array + this->CopyImageToImage(); // Coefficients are initialized to the input data + + for (unsigned int n=0; n < ImageDimension; n++) + { + m_IteratorDirection = n; + // Loop through each dimension + + //JV Set the correct order by dimension! + SetSplineOrder(m_SplineOrders[n]); + + // Initialize iterators + OutputLinearIterator CIterator( output, output->GetBufferedRegion() ); + CIterator.SetDirection( m_IteratorDirection ); + // For each data vector + while ( !CIterator.IsAtEnd() ) + { + // Copy coefficients to scratch + this->CopyCoefficientsToScratch( CIterator ); + + // Perform 1D BSpline calculations + this->DataToCoefficients1D(); + + // Copy scratch back to coefficients. + // Brings us back to the end of the line we were working on. + CIterator.GoToBeginOfLine(); + this->CopyScratchToCoefficients( CIterator ); // m_Scratch = m_Image; + CIterator.NextLine(); + progress.CompletedPixel(); + } + } +} + + +/** + * Copy the input image into the output image + */ +template +void +BSplineDecompositionImageFilterWithOBD +::CopyImageToImage() +{ + + typedef ImageRegionConstIteratorWithIndex< TInputImage > InputIterator; + typedef ImageRegionIterator< TOutputImage > OutputIterator; + typedef typename TOutputImage::PixelType OutputPixelType; + + InputIterator inIt( this->GetInput(), this->GetInput()->GetBufferedRegion() ); + OutputIterator outIt( this->GetOutput(), this->GetOutput()->GetBufferedRegion() ); + + inIt = inIt.Begin(); + outIt = outIt.Begin(); + + while ( !outIt.IsAtEnd() ) + { + outIt.Set( static_cast( inIt.Get() ) ); + ++inIt; + ++outIt; + } + +} + + +/** + * Copy the scratch to one line of the output image + */ +template +void +BSplineDecompositionImageFilterWithOBD +::CopyScratchToCoefficients(OutputLinearIterator & Iter) +{ + typedef typename TOutputImage::PixelType OutputPixelType; + unsigned long j = 0; + while ( !Iter.IsAtEndOfLine() ) + { + Iter.Set( static_cast( m_Scratch[j] ) ); + ++Iter; + ++j; + } + +} + + +/** + * Copy one line of the output image to the scratch + */ +template +void +BSplineDecompositionImageFilterWithOBD +::CopyCoefficientsToScratch(OutputLinearIterator & Iter) +{ + unsigned long j = 0; + while ( !Iter.IsAtEndOfLine() ) + { + m_Scratch[j] = static_cast( Iter.Get() ) ; + ++Iter; + ++j; + } +} + + +/** + * GenerateInputRequestedRegion method. + */ +template +void +BSplineDecompositionImageFilterWithOBD +::GenerateInputRequestedRegion() +{ + // this filter requires the all of the input image to be in + // the buffer + InputImagePointer inputPtr = const_cast< TInputImage * > ( this->GetInput() ); + if( inputPtr ) + { + inputPtr->SetRequestedRegionToLargestPossibleRegion(); + } +} + + +/** + * EnlargeOutputRequestedRegion method. + */ +template +void +BSplineDecompositionImageFilterWithOBD +::EnlargeOutputRequestedRegion( + DataObject *output ) +{ + + // this filter requires the all of the output image to be in + // the buffer + TOutputImage *imgData; + imgData = dynamic_cast( output ); + if( imgData ) + { + imgData->SetRequestedRegionToLargestPossibleRegion(); + } + +} + +/** + * Generate data + */ +template +void +BSplineDecompositionImageFilterWithOBD +::GenerateData() +{ + + // Allocate scratch memory + InputImageConstPointer inputPtr = this->GetInput(); + m_DataLength = inputPtr->GetBufferedRegion().GetSize(); + + unsigned long maxLength = 0; + for ( unsigned int n = 0; n < ImageDimension; n++ ) + { + if ( m_DataLength[n] > maxLength ) + { + maxLength = m_DataLength[n]; + } + } + m_Scratch.resize( maxLength ); + + // Allocate memory for output image + OutputImagePointer outputPtr = this->GetOutput(); + outputPtr->SetBufferedRegion( outputPtr->GetRequestedRegion() ); + outputPtr->Allocate(); + + // Calculate actual output + this->DataToCoefficientsND(); + + // Clean up + m_Scratch.clear(); + +} + + +} // namespace itk + +#endif diff --git a/itk/itkBSplineInterpolateImageFunctionWithLUT.h b/itk/itkBSplineInterpolateImageFunctionWithLUT.h new file mode 100644 index 0000000..85b3436 --- /dev/null +++ b/itk/itkBSplineInterpolateImageFunctionWithLUT.h @@ -0,0 +1,134 @@ +#ifndef ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H +#define ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H + +/* ========================================================================= + + @file itkBSplineInterpolateImageFunctionWithLUT.h + @author David Sarrut + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ + +#include "itkBSplineWeightsCalculator.h" +//#include "clitkTimer.h" +#include + +namespace itk { + + template < + class TImageType, + class TCoordRep = double, + class TCoefficientType = double > + class ITK_EXPORT BSplineInterpolateImageFunctionWithLUT : + public itk::BSplineInterpolateImageFunction { + + public: + /** Class typedefs */ + typedef BSplineInterpolateImageFunctionWithLUT Self; + typedef BSplineInterpolateImageFunction Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + typedef typename Superclass::OutputType OutputType; + typedef typename Superclass::ContinuousIndexType ContinuousIndexType; + typedef typename TImageType::IndexType IndexType; + typedef typename TImageType::IndexValueType IndexValueType; + typedef typename TImageType::SizeType SizeType; + typedef typename TImageType::SpacingType SpacingType; + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro(Self); + + /** Setting LUT sampling (one parameters by dimension or a single + one for all dim); Default is 10 (for each dim) **/ + void SetLUTSamplingFactor(const int& s); + void SetLUTSamplingFactors(const SizeType& s); + + /** Get/Sets the Spline Order, supports 0th - 5th order + * splines. The default is a 3rd order spline. */ + void SetSplineOrder(const unsigned int & SplineOrder); + + //JV this is added to support different degrees over each dimension + void SetSplineOrders(const SizeType & SplineOrders); + + /** Set the input image. This must be set by the user. */ + virtual void SetInputImage(const TImageType * inputData); + //void SetOutputSpacing(const SpacingType & s); + //void SetInputImageIsCoefficient(bool inputIsCoef) { mInputIsCoef = inputIsCoef; } + + /** Evaluate the function at a ContinuousIndex position. + Overwritten for taking LUT into account */ + virtual OutputType EvaluateAtContinuousIndex(const ContinuousIndexType & index ) const; + + /** Static convenient functions to compute BSpline weights for + various order, dimension, sampling ... **/ + static void ComputeBlendingWeights(int dim, int order, int sampling, TCoefficientType * weights); + + /** Timer giving computation time for coefficients computation **/ + // const clitk::Timer & GetCoefTimer() const { return mCoefficientTimer; } + + /** Get estimated error **/ + + double GetIntrinsicError() const { return *mIntrinsecError; } + long GetNumberOfError() const { return *mNumberOfError; } + double GetIntrinsicErrorMax() const { return *mIntrinsecErrorMax; } + + protected: + BSplineInterpolateImageFunctionWithLUT(); + ~BSplineInterpolateImageFunctionWithLUT(){;} + + SizeType mSupport; // nb of coef values used for interpolation (order+1) in 1 dimension + SizeType mHalfSupport; // half size of the previous + unsigned int mSupportSize; // Total support size for all dimension + std::vector mSupportOffset; // Memory pointer offset for going from one coef position to the other (inside the whole support) + std::vector mSupportIndex; // nD Index of all support values + IndexType mInputMemoryOffset; // Memory dimension offsets for input image + + /** Sampling factors for LUT weights **/ + SizeType mSamplingFactors; + bool mWeightsAreUpToDate; + //SpacingType mOutputSpacing; + + double * mIntrinsecError; + double * mIntrinsecErrorMax; + long * mNumberOfError; + + //JV add iscoeff, and splineorders + // bool mInputIsCoef; + SizeType mSplineOrders; + + // Filter to compute weights + itk::BSplineWeightsCalculator mWeightsCalculator; + + // Convenient functions + void UpdatePrecomputedWeights(); + void UpdateWeightsProperties(); + IndexType GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const; + + // Timing options + // clitk::Timer mCoefficientTimer; + // clitk::Timer mLUTTimer; + bool mTimerEnabled; + + //JV threadsafety: everything on the stack + //std::vector mCorrectedSupportOffset; + //std::vector mCorrectedSupportIndex; + TCoefficientType * coef; + + }; // end class itkBSplineInterpolateImageFunctionWithLUT +} // end namespace + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkBSplineInterpolateImageFunctionWithLUT.txx" +#endif + +#endif /* end #define ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H */ diff --git a/itk/itkBSplineInterpolateImageFunctionWithLUT.h.original b/itk/itkBSplineInterpolateImageFunctionWithLUT.h.original new file mode 100644 index 0000000..1f92e50 --- /dev/null +++ b/itk/itkBSplineInterpolateImageFunctionWithLUT.h.original @@ -0,0 +1,132 @@ +/* ========================================================================= + + @file itkBSplineInterpolateImageFunctionWithLUT.h + @author David Sarrut + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ + +#ifndef ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H +#define ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H +#include "itkCastImageFilter.h" +#include "itkBSplineWeightsCalculator.h" +//#include "clitkTimer.h" + +#include + +namespace itk { + + template < + class TImageType, + class TCoordRep = double, + class TCoefficientType = double > + class ITK_EXPORT BSplineInterpolateImageFunctionWithLUT : + public itk::BSplineInterpolateImageFunction { + + public: + /** Class typedefs */ + typedef BSplineInterpolateImageFunctionWithLUT Self; + typedef BSplineInterpolateImageFunction Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + typedef typename Superclass::OutputType OutputType; + typedef typename Superclass::ContinuousIndexType ContinuousIndexType; + typedef typename TImageType::IndexType IndexType; + typedef typename TImageType::IndexValueType IndexValueType; + typedef typename TImageType::SizeType SizeType; + typedef typename TImageType::SpacingType SpacingType; + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro(Self); + BSplineInterpolateImageFunctionWithLUT(); + + /** Setting LUT sampling (one parameters by dimension or a single + one for all dim); Default is 10 (for each dim) **/ + void SetLUTSamplingFactor(int s); + void SetLUTSamplingFactors(int * s); + + /** Get/Sets the Spline Order, supports 0th - 5th order + * splines. The default is a 3rd order spline. */ + void SetSplineOrder(unsigned int SplineOrder); + + //JV this is added to support different degrees over each dimension + void SetSplineOrders( SizeType SplineOrders); + + /** Set the input image. This must be set by the user. */ + virtual void SetInputImage(const TImageType * inputData); + void SetOutputSpacing(const SpacingType & s); + void SetInputImageIsCoefficient(bool inputIsCoef) { mInputIsCoef = inputIsCoef; } + + /** Evaluate the function at a ContinuousIndex position. + Overwritten for taking LUT into account */ + virtual OutputType EvaluateAtContinuousIndex(const ContinuousIndexType & index ) const; + + /** Static convenient functions to compute BSpline weights for + various order, dimension, sampling ... **/ + static void ComputeBlendingWeights(int dim, int order, int sampling, TCoefficientType * weights); + + /** Timer giving computation time for coefficients computation **/ + // const clitk::Timer & GetCoefTimer() const { return mCoefficientTimer; } + + /** Get estimated error **/ + + double GetIntrinsicError() const { return *mIntrinsecError; } + long GetNumberOfError() const { return *mNumberOfError; } + double GetIntrinsicErrorMax() const { return *mIntrinsecErrorMax; } + + protected: + SizeType mSupport; // nb of coef values used for interpolation (order+1) in 1 dimension + SizeType mHalfSupport; // half size of the previous + unsigned int mSupportSize; // Total support size for all dimension + std::vector mSupportOffset; // Memory pointer offset for going from one coef position to the other (inside the whole support) + std::vector mSupportIndex; // nD Index of all support values + IndexType mInputMemoryOffset; // Memory dimension offsets for input image + + /** Sampling factors for LUT weights **/ + SizeType mSamplingFactors; + bool mWeightsAreUpToDate; + SpacingType mOutputSpacing; + + double * mIntrinsecError; + double * mIntrinsecErrorMax; + long * mNumberOfError; + + //JV add iscoeff, and splineorders + bool mInputIsCoef; + SizeType mSplineOrders; + + // Filter to compute weights + itk::BSplineWeightsCalculator mWeightsCalculator; + + // Convenient functions + void UpdatePrecomputedWeights(); + IndexType GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const; + + // Timing options + // clitk::Timer mCoefficientTimer; + // clitk::Timer mLUTTimer; + bool mTimerEnabled; + + std::vector mCorrectedSupportOffset; + TCoefficientType * coef; + + std::vector mCorrectedSupportIndex; + + }; // end class itkBSplineInterpolateImageFunctionWithLUT + +#include "itkBSplineInterpolateImageFunctionWithLUT.txx" + +} // end namespace + +#endif /* end #define ITKBSPLINEINTERPOLATEIMAGEFUNCTIONWITHLUT_H */ + diff --git a/itk/itkBSplineInterpolateImageFunctionWithLUT.txx b/itk/itkBSplineInterpolateImageFunctionWithLUT.txx new file mode 100644 index 0000000..275bc53 --- /dev/null +++ b/itk/itkBSplineInterpolateImageFunctionWithLUT.txx @@ -0,0 +1,395 @@ +#ifndef _ITKINTERPOLATEIMAGEFUNCTIONWITHLUT_TXX +#define _ITKINTERPOLATEIMAGEFUNCTIONWITHLUT_TXX + +/* ========================================================================= + +@file itkBSplineInterpolateImageFunctionWithLUT.txx +@author David Sarrut + +Copyright (c) +* CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). +All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. +* Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France +* http://www.creatis.insa-lyon.fr/rio + +This software is distributed WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +========================================================================= */ +namespace itk +{ + //==================================================================== + template + BSplineInterpolateImageFunctionWithLUT:: + BSplineInterpolateImageFunctionWithLUT():Superclass() { + // Set default values + //for(int i=0; i + void BSplineInterpolateImageFunctionWithLUT:: + SetLUTSamplingFactor(const int& s) { + for(int i=0; i + void BSplineInterpolateImageFunctionWithLUT:: + SetLUTSamplingFactors(const SizeType& s) { + for(int i=0; i + // void BSplineInterpolateImageFunctionWithLUT:: + // SetOutputSpacing(const SpacingType & s) { + // for(int i=0; i + void BSplineInterpolateImageFunctionWithLUT:: + SetSplineOrder(const unsigned int& SplineOrder) { + Superclass::SetSplineOrder(SplineOrder); + // Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l + void BSplineInterpolateImageFunctionWithLUT:: + SetSplineOrders(const SizeType& SplineOrders) { + mSplineOrders=SplineOrders; + + // Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l + void BSplineInterpolateImageFunctionWithLUT:: + SetInputImage(const TImageType * inputData) { + + //============================== + // if (!mInputIsCoef) + // { + Superclass::SetInputImage(inputData); + // } + + //============================== + // //JV Don't call superclass (decomposition filter is executeed each time!) + // else + // { + // this->m_Coefficients = inputData; + // if ( this->m_Coefficients.IsNotNull()) + // { + // this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + // } + + // //Call super-superclass in case more input arrives + // itk::ImageFunction::RealType, TCoefficientType>::SetInputImage(inputData); + // } + if (!inputData) return; + UpdateWeightsProperties(); + + } + + //==================================================================== + template + void BSplineInterpolateImageFunctionWithLUT:: + UpdateWeightsProperties() { + + // Compute Memory offset inside coefficients images (for looping over coefficients) + static const unsigned int d = TImageType::ImageDimension; + mInputMemoryOffset[0] = 1; + for(unsigned int l=1; lm_Coefficients->GetLargestPossibleRegion().GetSize(l-1); + } + + //JV Put here? + if (!mWeightsAreUpToDate) + { + // Compute mSupportOffset according to input size + mSupportOffset.resize(mSupportSize); + mSupportIndex.resize(mSupportSize); + for(unsigned int l=0; l(mSupportIndex[k], mInputMemoryOffset); + // next coefficient index + if (k != mSupportSize-1) { + for(unsigned int l=0; l(mSupportIndex[k+1][l]) == mSupport[l]) { + mSupportIndex[k+1][l] = 0; + l++; + } + else stop = true; + } + } + } + + // // Check + // for(unsigned int l=0; l + void BSplineInterpolateImageFunctionWithLUT:: + UpdatePrecomputedWeights() { + // mLUTTimer.Reset(); + // mLUTTimer.Start(); + mWeightsCalculator.SetSplineOrders(mSplineOrders); + mWeightsCalculator.SetSamplingFactors(mSamplingFactors); + mWeightsCalculator.ComputeTensorProducts(); + mWeightsAreUpToDate = true; + //DS + // coef = new TCoefficientType[mSupportSize]; + // mCorrectedSupportIndex.resize(mSupportSize); + // mCorrectedSupportOffset.resize(mSupportSize); + // mLUTTimer.Stop(); + // mLUTTimer.Print("LUT \t"); + } + //==================================================================== + + //==================================================================== + template + typename BSplineInterpolateImageFunctionWithLUT::IndexType + BSplineInterpolateImageFunctionWithLUT:: + GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const { + + /* + WARNING : sometimes, a floating number x could not really be + represented in memory. In this case, the difference between x and + floor(x) can be almost 1 (instead of 0). So we take into account + such special case, otherwise it could lead to annoying results. + */ + // static const TCoefficientType tiny = 1.0e-7; + IndexType index; + + for(int l=0; l *mIntrinsecErrorMax) *mIntrinsecErrorMax = fabs(index[l]-t2); + */ + + // When to close to 1, take the next coefficient for odd order, but + // only change index for odd + if (index[l] == (int)mSamplingFactors[l]) { + index[l] = 0; + if (mSplineOrders[l] & 1) EvaluateIndex[l] = EvaluateIndex[l]+1; + } + } + + // The end + return index; + } + + + //==================================================================== + + //==================================================================== + template + typename BSplineInterpolateImageFunctionWithLUT::OutputType + BSplineInterpolateImageFunctionWithLUT:: + EvaluateAtContinuousIndex(const ContinuousIndexType & x) const { + + // For shorter coding + static const unsigned int d = TImageType::ImageDimension; + + // Compute the index of the first interpolation coefficient in the coefficient image + IndexType evaluateIndex; + long indx; + for (unsigned int l=0; lm_SplineOrder / 2; + evaluateIndex[l] = indx; + } + else { // Use this index calculation for even splineOrder + if (mSplineOrders[l] == 0) evaluateIndex[l] = (long)rint(x[l]); + else { + indx = (long)vcl_floor((x[l]+ 0.5)) - mSplineOrders[l] / 2; //this->m_SplineOrder / 2; + evaluateIndex[l] = indx; + } + } + } + + // Compute index of precomputed weights and get pointer to first weights + const IndexType weightIndex = GetSampleIndexOfPixelPosition(x, evaluateIndex); + const TCoefficientType * pweights = mWeightsCalculator.GetFirstTensorProduct(weightIndex); + + // Check boundaries + bool boundaryCase = false; + for (unsigned int l=0; l= this->m_Coefficients->GetLargestPossibleRegion().GetSize(l)) { + boundaryCase = true; + } + } + + // Pointer to support offset + const int * psupport; + + // Special case for boundary (to be changed ....) + std::vector correctedSupportOffset; + if (boundaryCase) { + // return -1000; + //std::vector coef(mSupportSize); + // DD(EvaluateIndex); + //std::vector CorrectedSupportOffset;//(mSupportSize); + std::vector correctedSupportIndex;//(mSupportSize); + correctedSupportIndex.resize(mSupportSize); + correctedSupportOffset.resize(mSupportSize); + for(unsigned int i=0; im_Coefficients->GetLargestPossibleRegion().GetSize(l); + // DD(a); + // DD(b); + long d2 = 2 * b - 2; + if (a < 0) { + correctedSupportIndex[i][l] = -a - d2*(-a/d2) - evaluateIndex[l];//mSupportIndex[i][l]-a; + } + else { + if (a>=b) { + correctedSupportIndex[i][l] = d2 - a - evaluateIndex[l]; + } + else { + correctedSupportIndex[i][l] = mSupportIndex[i][l]; //a - d2*(a/d2) - EvaluateIndex[l]; + } + /* + if (a>=b) { + correctedSupportIndex[i][l] = d2 - a - EvaluateIndex[l];//mSupportIndex[i][l] - (a-(b-1)); + } + else { + correctedSupportIndex[i][l] = mSupportIndex[i][l]; + } + */ + } + } + // DD(correctedSupportIndex[i]); + correctedSupportOffset[i] = itk::Index2Offset(correctedSupportIndex[i], mInputMemoryOffset); + } + // for (unsigned int l=0; lm_Coefficients->GetPixel(evaluateIndex)); + + // Main loop over BSpline support + TCoefficientType interpolated = 0.0; + for (unsigned int p=0; p + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * L�on B�rard cancer center, 28 rue La�nnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ +#include "itkCastImageFilter.h" + +//==================================================================== +template +BSplineInterpolateImageFunctionWithLUT:: +BSplineInterpolateImageFunctionWithLUT():Superclass() { + // Set default values + for(int i=0; i +void BSplineInterpolateImageFunctionWithLUT:: +SetLUTSamplingFactor(int s) { + for(int i=0; i +void BSplineInterpolateImageFunctionWithLUT:: +SetOutputSpacing(const SpacingType & s) { + for(int i=0; i +void BSplineInterpolateImageFunctionWithLUT:: +SetSplineOrder(unsigned int SplineOrder) { + Superclass::SetSplineOrder(SplineOrder); + // Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l +void BSplineInterpolateImageFunctionWithLUT:: +SetSplineOrders(SizeType SplineOrders) { + mSplineOrders=SplineOrders; + DD(mSplineOrders); +// Compute support and half size + static const int d = TImageType::ImageDimension; + for(int l=0; l +void BSplineInterpolateImageFunctionWithLUT:: +SetInputImage(const TImageType * inputData) { + + // Call superclass SetInputImage and return if input is null + // clitk::Timer t; + // t.Start(); + //ds + // this->InterpolateImageFunction::SetInputImage(inputData); + + //============================== + if (!mInputIsCoef) { + Superclass::SetInputImage(inputData); + // t.Stop(); + } + //============================== + else { + // If inputData is not float/double, we do not want to set + // mInputIsCoef to true, but the compiler goes here ... + + if (typeid(typename TImageType::PixelType) != typeid(TCoefficientType)) { + std::cerr << "Input should be float or double to be set as 'coefficients' with SetInputImageIsCoefficient(true) and should be the same type than TCoefficientType" << std::endl; + exit(0); + } + else { + itkStaticConstMacro(ImageDimension, unsigned int, Superclass::ImageDimension); + typedef Image CoefficientImageType; + typedef itk::CastImageFilter< TImageType, CoefficientImageType> CastFilterType; + typename CastFilterType::Pointer castFilter=CastFilterType::New(); + castFilter->SetInput(inputData); + castFilter->Update(); + this->m_Coefficients=castFilter->GetOutput(); + if ( this->m_Coefficients.IsNotNull()) + this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + } + +// //JV input should be double or float. To keep it generic: cast to the CoefficientImageType +// /** Dimension underlying input image. */ +// itkStaticConstMacro(ImageDimension, unsigned int, Superclass::ImageDimension); +// /** Internal Coefficient typedef support */ +// DD( ImageDimension); +// typedef Image CoefficientImageType; +// typedef itk::CastImageFilter< TImageType, CoefficientImageType> CastFilterType; +// typename CastFilterType::Pointer castFilter=CastFilterType::New(); +// castFilter->SetInput(inputData); +// castFilter->Update(); +// DS this->InterpolateImageFunction::m_Coefficients = inputData; + +// //JV cast to the coeff type, don't tell my mother +// this->InterpolateImageFunction::SetInputImage(inputData); +// this->m_Coefficients=castFilter->GetOutput(); +// DS ?????? this->m_Coefficients = inputData; + +// // //============================== old not generic solution +// // this->InterpolateImageFunction::SetInputImage(inputData); +// // DS this->InterpolateImageFunction::m_Coefficients = inputData; +// // this->m_Coefficients = inputData; +// // //============================== +// if ( this->m_Coefficients.IsNotNull()) { +// this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); +// } + } + + // t.Stop(); + if (!inputData) return; + // mCoefficientTimer = t; + + // Compute Memory offset inside coefficients images (for looping over coefficients) + static const int d = TImageType::ImageDimension; + mInputMemoryOffset[0] = 1; + for(int l=1; lm_Coefficients->GetLargestPossibleRegion().GetSize(l-1); + } + + // Compute mSupportOffset according to input size + mSupportOffset.resize(mSupportSize); + mSupportIndex.resize(mSupportSize); + for(int l=0; l(mSupportIndex[k], mInputMemoryOffset); + // next coefficient index + if (k != mSupportSize-1) { + for(int l=0; l +void BSplineInterpolateImageFunctionWithLUT:: +UpdatePrecomputedWeights() { +// mLUTTimer.Reset(); +// mLUTTimer.Start(); + mWeightsCalculator.SetSplineOrders(mSplineOrders); + mWeightsCalculator.SetSamplingFactors(mSamplingFactors); + mWeightsCalculator.ComputeTensorProducts(); + mWeightsAreUpToDate = true; + //DS + // coef = new TCoefficientType[mSupportSize]; + // mCorrectedSupportIndex.resize(mSupportSize); + // mCorrectedSupportOffset.resize(mSupportSize); + // mLUTTimer.Stop(); +// mLUTTimer.Print("LUT \t"); +} +//==================================================================== + +//==================================================================== +template +typename BSplineInterpolateImageFunctionWithLUT::IndexType +BSplineInterpolateImageFunctionWithLUT:: +GetSampleIndexOfPixelPosition(const ContinuousIndexType & x, IndexType & EvaluateIndex) const { + + /* + WARNING : sometimes, a floating number x could not really be + represented in memory. In this case, the difference between x and + floor(x) can be almost 1 (instead of 0). So we take into account + such special case, otherwise it could lead to annoying results. + */ + // static const TCoefficientType tiny = 1.0e-7; + IndexType index; + + for(int l=0; l *mIntrinsecErrorMax) *mIntrinsecErrorMax = fabs(index[l]-t2); + */ + + // When to close to 1, take the next coefficient for ordd order, but + // only change index for odd + if (index[l] == (int)mSamplingFactors[l]) { + index[l] = 0; + if (mSplineOrders[l] & 1) EvaluateIndex[l] = EvaluateIndex[l]+1; + } + } + + // The end + return index; +} +//==================================================================== + +//==================================================================== +template +typename BSplineInterpolateImageFunctionWithLUT::OutputType +BSplineInterpolateImageFunctionWithLUT:: +EvaluateAtContinuousIndex(const ContinuousIndexType & x) const { + + // For shorter coding + static const unsigned int d = TImageType::ImageDimension; + + // Compute the indexe of the first interpolation coefficient in the + // coefficient image + IndexType EvaluateIndex; + long indx; + for (unsigned int l=0; lm_SplineOrder / 2; + EvaluateIndex[l] = indx; + } + else { // Use this index calculation for even splineOrder + if (mSplineOrders[l] == 0) EvaluateIndex[l] = (long)rint(x[l]); + else { + indx = (long)vcl_floor((x[l]+ 0.5)) - mSplineOrders[l] / 2; //this->m_SplineOrder / 2; + EvaluateIndex[l] = indx; + } + } + } + + // Compute index of precomputed weights and get pointer to first weights + const IndexType weightIndex = GetSampleIndexOfPixelPosition(x, EvaluateIndex); + const TCoefficientType * pweights = mWeightsCalculator.GetFirstTensorProduct(weightIndex); + + // Check boundaries + bool mBoundaryCase = false; + for (unsigned int l=0; l= this->m_Coefficients->GetLargestPossibleRegion().GetSize(l)) { + mBoundaryCase = true; + } + } + + // Pointer to support offset + const int * psupport; + + // Special case for boundary (to be changed ....) + std::vector mCorrectedSupportOffset;//(mSupportSize); + if (mBoundaryCase) { + // return -1000; + //std::vector coef(mSupportSize); + // DD(EvaluateIndex); + std::vector mCorrectedSupportIndex;//(mSupportSize); + mCorrectedSupportIndex.resize(mSupportSize); + mCorrectedSupportOffset.resize(mSupportSize); + for(unsigned int i=0; im_Coefficients->GetLargestPossibleRegion().GetSize(l); + // DD(a); + // DD(b); + long d2 = 2 * b - 2; + if (a < 0) { + mCorrectedSupportIndex[i][l] = -a - d2*(-a/d2) - EvaluateIndex[l];//mSupportIndex[i][l]-a; + } + else { + if (a>=b) { + mCorrectedSupportIndex[i][l] = d2 - a - EvaluateIndex[l]; + } + else { + mCorrectedSupportIndex[i][l] = mSupportIndex[i][l]; //a - d2*(a/d2) - EvaluateIndex[l]; + } + /* + if (a>=b) { + mCorrectedSupportIndex[i][l] = d2 - a - EvaluateIndex[l];//mSupportIndex[i][l] - (a-(b-1)); + } + else { + mCorrectedSupportIndex[i][l] = mSupportIndex[i][l]; + } + */ + } + } + // DD(mCorrectedSupportIndex[i]); + mCorrectedSupportOffset[i] = Index2Offset(mCorrectedSupportIndex[i], mInputMemoryOffset); + } + // for (unsigned int l=0; lm_Coefficients->GetPixel(EvaluateIndex)); + + // Main loop over BSpline support + TCoefficientType interpolated = 0.0; + for (unsigned int p=0; p +class ITK_EXPORT BSplineResampleImageFunctionWithLUT : + public BSplineInterpolateImageFunctionWithLUT< + TImageType,TCoordRep,ITK_TYPENAME TImageType::PixelType > +{ +public: + /** Standard class typedefs. */ + typedef BSplineResampleImageFunctionWithLUT Self; + typedef BSplineInterpolateImageFunctionWithLUT< + TImageType,TCoordRep, ITK_TYPENAME TImageType::PixelType > Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Run-time type information (and related methods). */ + itkTypeMacro(BSplineReconstructionImageFunction, + BSplineInterpolateImageFunctionWithLUT); + + /** New macro for creation of through a Smart Pointer */ + itkNewMacro( Self ); + + /** Set the input image representing the BSplineCoefficients */ + virtual void SetInputImage(const TImageType * inputData) + { + // bypass my superclass + this->InterpolateImageFunction::SetInputImage(inputData); + this->m_Coefficients = inputData; + if ( this->m_Coefficients.IsNotNull() ) + { + this->m_DataLength = this->m_Coefficients->GetBufferedRegion().GetSize(); + + // JV specific for BLUT ( contains the call to UpdatePrecomputedWeights() ) + this->UpdateWeightsProperties(); + } + } + +protected: + BSplineResampleImageFunctionWithLUT() {}; + virtual ~BSplineResampleImageFunctionWithLUT() {}; + void PrintSelf(std::ostream& os, Indent indent) const + { + this->Superclass::PrintSelf( os, indent ); + } + +private: + BSplineResampleImageFunctionWithLUT(const Self&);//purposely not implemented +}; + +} // namespace itk + + +#endif + diff --git a/itk/itkBSplineWeightsCalculator.h b/itk/itkBSplineWeightsCalculator.h new file mode 100644 index 0000000..18402e8 --- /dev/null +++ b/itk/itkBSplineWeightsCalculator.h @@ -0,0 +1,113 @@ +/* ========================================================================= + + @file itkBSplineWeightsCalculator.h + @author David Sarrut + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ + +#ifndef ITKBSPLINEWEIGHTSCALCULATOR_H +#define ITKBSPLINEWEIGHTSCALCULATOR_H + +#include +#include +#include + +namespace itk { + + //==================================================================== + template + typename Index::IndexValueType Index2Offset(const Index & index, + const Index & offsetTable); + + //==================================================================== + template + class BSplineWeightsCalculator { + + public: + // Some typedef + typedef Index IndexType; + typedef Size SizeType; + typedef ContinuousIndex ContinuousIndexType; + typedef typename IndexType::IndexValueType IndexValueType; + typedef typename SizeType::SizeValueType SizeValueType; + typedef std::vector > InitialWeightsType; + + // Constructor + BSplineWeightsCalculator(); + + // Set order of the spline (could be different in each dimension) + void SetSplineOrder(int splineOrder); + void SetSplineOrders(const SizeType & splineOrder); + + // Set the sampling factor (could be different in each dimension) + void SetSamplingFactor(int sampling); + void SetSamplingFactors(const SizeType & sampling); + + // Main function : compute the tensor product at sampling positions + void ComputeTensorProducts(); + + // Must be used only after ComputeTensorProducts ! + const TCoefficientType * GetFirstTensorProduct(const IndexType & index) const; + + protected: + SizeType mSplineOrders; + SizeType mSplineSupport; + SizeType mSamplingFactors; + + // Number of points in the BSpline support + int mSupportSize; + + // nD Index of all points in the BSpline support + std::vector mSupportIndex; + + // mBasisFunctionCoefficientsMatrix : map of 2D matrix for basic function of arbitrary order + // Could be computed once for all if needed. + // index map = BSpline order + // X = support size + // Y = support size + std::map mBasisFunctionCoefficientsMatrix; + + // mWeights : 3D array with : + // X = dimension number + // Y = support position 1D index + // Z = sampling position 1D index + std::vector > > mWeights; + + // mTensorProducts : 2D array with : + // X = sampling position 1D index + // Y = support position 1D index + std::vector > mTensorProducts; + + + IndexType mTensorProductMemoryOffset; + + bool mWeightsAreUpToDate; + std::map mBasisFunctionCoefficientsMatrixAreUpToDate; + bool mTensorProductsAreUpToDate; + + void ComputeSampledWeights(); + void ComputeSampledWeights1D(std::vector > & w, int order, int sampling); + TCoefficientType BSplineEvaluate(int order, int b, double e); + InitialWeightsType & GetInitialWeights(int order); + void ComputeBasisFunctionCoefficientsMatrix(int order); + double BinomialCoefficient(int i, int j); + + }; // end class itkBSplineWeightsCalculator + +#include "itkBSplineWeightsCalculator.txx" + +} // end namespace + +#endif /* end #define ITKBSPLINEWEIGHTSCALCULATOR_H */ + diff --git a/itk/itkBSplineWeightsCalculator.txx b/itk/itkBSplineWeightsCalculator.txx new file mode 100644 index 0000000..d612768 --- /dev/null +++ b/itk/itkBSplineWeightsCalculator.txx @@ -0,0 +1,273 @@ +/* ========================================================================= + + @file itkBSplineWeightsCalculator.h + @author David Sarrut + + Copyright (c) + * CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). + All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + * Léon Bérard cancer center, 28 rue Laënnec, 69373 Lyon cedex 08, France + * http://www.creatis.insa-lyon.fr/rio + + This software is distributed WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +========================================================================= */ + +#ifndef ITKBSPLINEWEIGHTSCALCULATOR_TXX +#define ITKBSPLINEWEIGHTSCALCULATOR_TXX + +//==================================================================== +template +typename Index::IndexValueType Index2Offset(const Index & index, const Index & offsetTable) { + long v = index[0]; + for(int l=1; l +BSplineWeightsCalculator:: +BSplineWeightsCalculator() { + mWeightsAreUpToDate = false; +} +//==================================================================== + +//==================================================================== +template +void BSplineWeightsCalculator:: +SetSplineOrder(int splineOrder) { + SizeType temp; + for(int l=0; l +void BSplineWeightsCalculator:: +SetSplineOrders(const SizeType & splineOrder) { + // Compute support size + mSupportSize = 1; + for(int l=0; l +void BSplineWeightsCalculator:: +SetSamplingFactor(int sampling) { + for(int l=0; l +void BSplineWeightsCalculator:: +SetSamplingFactors(const SizeType & sampling) { + for(int l=0; l +typename BSplineWeightsCalculator::InitialWeightsType & +BSplineWeightsCalculator:: +GetInitialWeights(int order) { + if (!mBasisFunctionCoefficientsMatrixAreUpToDate[order]) ComputeBasisFunctionCoefficientsMatrix(order); + return mBasisFunctionCoefficientsMatrix[order]; +} +//==================================================================== + +//==================================================================== +template inline T factorial(T rhs) { + T lhs = (T)1; + for(T x=(T)1; x<=rhs; ++x) { + lhs *= x; + } + return lhs; +} +//==================================================================== + +//==================================================================== +template +double BSplineWeightsCalculator:: +BinomialCoefficient(int i, int j) { + double f = (factorial(i))/(factorial(j) * factorial(i-j)); + return f; +} +//==================================================================== + +//==================================================================== +template +void BSplineWeightsCalculator:: +ComputeBasisFunctionCoefficientsMatrix(int order) { + // Compute the sxs matrix of coefficients used to build the different + // polynomials. With s the support is order+1. + int s = order+1; + mBasisFunctionCoefficientsMatrix[order] = InitialWeightsType(); + mBasisFunctionCoefficientsMatrix[order].resize(s); + for(int i=0; i +TCoefficientType BSplineWeightsCalculator:: +BSplineEvaluate(int order, int k, double e) { + // Evaluate a BSpline + int s=order+1; + TCoefficientType v = 0.0; + for(int p=0; p +void BSplineWeightsCalculator:: +ComputeSampledWeights1D(std::vector > & w, int order, int sampling) { + int s = order+1; + w.resize(s); + for(int k=0; k + +namespace itk +{ + +/** \class BinaryGuerreroFilter + * \brief * + * The images to be added are set using the methods: + * SetInput1( image1 ); + * SetInput2( image2 ); + * + * \warning No numeric overflow checking is performed in this filter. + * + * \ingroup IntensityImageFilters Multithreaded + */ +namespace Functor { + +template< class TInput1, class TInput2=TInput1, class TOutput=TInput1> +class GuerreroFunctor +{ + public: + GuerreroFunctor() : use_correct_formula(false) + {}; + ~GuerreroFunctor() {}; + bool operator!=( const GuerreroFunctor & ) const + { + return false; + } + bool operator==( const GuerreroFunctor & other ) const + { + return !(*this != other); + } + inline TOutput operator() ( const TInput1 & A, const TInput2 & B) const + { + //A is the reference image + TInput2 Bstar = B - 1000.*blood_mass_factor*(1+B/1000.); + TOutput vol_change; + if (use_correct_formula) + vol_change=static_cast( (A-Bstar) / (1000.+Bstar) ); + else //Use the original formula as described in Guerrero's paper + vol_change=static_cast( 1000. * (Bstar-A) / (A*(1000.+Bstar)) ); + + if (std::isnormal(vol_change)) + return vol_change; + else + return 0.; + } + double blood_mass_factor; + bool use_correct_formula; +}; + +} + +//========================================================================== +template +class ITK_EXPORT BinaryGuerreroFilter : + public +BinaryFunctorImageFilter > + + +{ +public: + /** Standard class typedefs. */ + typedef BinaryGuerreroFilter Self; + typedef BinaryFunctorImageFilter > Superclass; + + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Runtime information support. */ + itkTypeMacro(BinaryGuerreroFilter, + BinaryFunctorImageFilter); + void SetBloodCorrectionFactor(double f) + { + this->GetFunctor().blood_mass_factor=f; + } + void SetUseCorrectFormula(bool use_correct_formula) + { + this->GetFunctor().use_correct_formula=use_correct_formula; + } + + +protected: + BinaryGuerreroFilter() {} + virtual ~BinaryGuerreroFilter() {} + +private: + BinaryGuerreroFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + +}; + +} // end namespace itk + + +#endif diff --git a/itk/itkImageToVTKImageFilter.h b/itk/itkImageToVTKImageFilter.h new file mode 100644 index 0000000..ef36774 --- /dev/null +++ b/itk/itkImageToVTKImageFilter.h @@ -0,0 +1,103 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkImageToVTKImageFilter.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __itkImageToVTKImageFilter_h +#define __itkImageToVTKImageFilter_h + +#include "itkVTKImageExport.h" +#include "vtkImageImport.h" +#include "vtkImageData.h" + +namespace itk +{ + +/** \class ImageToVTKImageFilter + * \brief Converts an ITK image into a VTK image and plugs a + * itk data pipeline to a VTK datapipeline. + * + * This class puts together an itkVTKImageExporter and a vtkImageImporter. + * It takes care of the details related to the connection of ITK and VTK + * pipelines. The User will perceive this filter as an adaptor to which + * an itk::Image can be plugged as input and a vtkImage is produced as + * output. + * + * \ingroup ImageFilters + */ +template +class ITK_EXPORT ImageToVTKImageFilter : public ProcessObject +{ +public: + /** Standard class typedefs. */ + typedef ImageToVTKImageFilter Self; + typedef ProcessObject Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(ImageToVTKImageFilter, ProcessObject); + + /** Some typedefs. */ + typedef TInputImage InputImageType; + typedef typename InputImageType::ConstPointer InputImagePointer; + typedef VTKImageExport< InputImageType> ExporterFilterType; + typedef typename ExporterFilterType::Pointer ExporterFilterPointer; + + /** Get the output in the form of a vtkImage. + This call is delegated to the internal vtkImageImporter filter */ + vtkImageData * GetOutput() const; + + /** Set the input in the form of an itk::Image */ + void SetInput( const InputImageType * ); + + /** Return the internal VTK image importer filter. + This is intended to facilitate users the access + to methods in the importer */ + vtkImageImport * GetImporter() const; + + /** Return the internal ITK image exporter filter. + This is intended to facilitate users the access + to methods in the exporter */ + ExporterFilterType * GetExporter() const; + + /** This call delegate the update to the importer */ + void Update(); + +protected: + ImageToVTKImageFilter(); + virtual ~ImageToVTKImageFilter(); + +private: + ImageToVTKImageFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + ExporterFilterPointer m_Exporter; + vtkImageImport * m_Importer; + +}; + +} // end namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkImageToVTKImageFilter.txx" +#endif + +#endif + + + diff --git a/itk/itkImageToVTKImageFilter.txx b/itk/itkImageToVTKImageFilter.txx new file mode 100644 index 0000000..e50d53b --- /dev/null +++ b/itk/itkImageToVTKImageFilter.txx @@ -0,0 +1,144 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkImageToVTKImageFilter.txx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef _itkImageToVTKImageFilter_txx +#define _itkImageToVTKImageFilter_txx + +#include "itkImageToVTKImageFilter.h" + +namespace itk +{ + + + +/** + * Constructor + */ +template +ImageToVTKImageFilter +::ImageToVTKImageFilter() +{ + + m_Importer = vtkImageImport::New(); + + m_Exporter = ExporterFilterType::New(); + + m_Importer->SetUpdateInformationCallback(m_Exporter->GetUpdateInformationCallback()); + m_Importer->SetPipelineModifiedCallback(m_Exporter->GetPipelineModifiedCallback()); + m_Importer->SetWholeExtentCallback(m_Exporter->GetWholeExtentCallback()); + m_Importer->SetSpacingCallback(m_Exporter->GetSpacingCallback()); + m_Importer->SetOriginCallback(m_Exporter->GetOriginCallback()); + m_Importer->SetScalarTypeCallback(m_Exporter->GetScalarTypeCallback()); + m_Importer->SetNumberOfComponentsCallback(m_Exporter->GetNumberOfComponentsCallback()); + m_Importer->SetPropagateUpdateExtentCallback(m_Exporter->GetPropagateUpdateExtentCallback()); + m_Importer->SetUpdateDataCallback(m_Exporter->GetUpdateDataCallback()); + m_Importer->SetDataExtentCallback(m_Exporter->GetDataExtentCallback()); + m_Importer->SetBufferPointerCallback(m_Exporter->GetBufferPointerCallback()); + m_Importer->SetCallbackUserData(m_Exporter->GetCallbackUserData()); + +} + + + + +/** + * Destructor + */ +template +ImageToVTKImageFilter +::~ImageToVTKImageFilter() +{ + if ( m_Importer ) + { + m_Importer->Delete(); + m_Importer = 0; + } +} + + + +/** + * Set an itk::Image as input + */ +template +void +ImageToVTKImageFilter +::SetInput( const InputImageType * inputImage ) +{ + m_Exporter->SetInput( inputImage ); +} + + + +/** + * Get a vtkImage as output + */ +template +vtkImageData * +ImageToVTKImageFilter +::GetOutput() const +{ + return m_Importer->GetOutput(); +} + + + + +/** + * Get the importer filter + */ +template +vtkImageImport * +ImageToVTKImageFilter +::GetImporter() const +{ + return m_Importer; +} + + + +/** + * Get the exporter filter + */ +template +typename ImageToVTKImageFilter::ExporterFilterType * +ImageToVTKImageFilter +::GetExporter() const +{ + return m_Exporter.GetPointer(); +} + + + +/** + * Delegate the Update to the importer + */ +template +void +ImageToVTKImageFilter +::Update() +{ + m_Importer->Update(); +} + + + + + +} // end namespace itk + +#endif + diff --git a/itk/itkRayCastInterpolateImageFunctionWithOrigin.h b/itk/itkRayCastInterpolateImageFunctionWithOrigin.h new file mode 100644 index 0000000..6e8b2ec --- /dev/null +++ b/itk/itkRayCastInterpolateImageFunctionWithOrigin.h @@ -0,0 +1,206 @@ +/*========================================================================= + +Program: Insight Segmentation & Registration Toolkit +Module: $RCSfile: itkRayCastInterpolateImageFunctionWithOrigin.h,v $ +Language: C++ +Date: $Date: 2010/01/06 13:32:01 $ +Version: $Revision: 1.1 $ + +Copyright (c) Insight Software Consortium. All rights reserved. +See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +//JV Support to origin is added, and the implicit shift to the center of the center of the volume removed by two patches + +#ifndef __itkRayCastInterpolateImageFunctionWithOrigin_h +#define __itkRayCastInterpolateImageFunctionWithOrigin_h + +#include "itkInterpolateImageFunction.h" +#include "itkTransform.h" +#include "itkVector.h" + +namespace itk +{ + +/** \class RayCastInterpolateImageFunctionWithOrigin + * \brief Projective interpolation of an image at specified positions. + * + * RayCastInterpolateImageFunctionWithOrigin casts rays through a 3-dimensional + * image and uses bilinear interpolation to integrate each plane of + * voxels traversed. + * + * \warning This interpolator works for 3-dimensional images only. + * + * \ingroup ImageFunctions + */ +template +class ITK_EXPORT RayCastInterpolateImageFunctionWithOrigin : + public InterpolateImageFunction +{ +public: + /** Standard class typedefs. */ + typedef RayCastInterpolateImageFunctionWithOrigin Self; + typedef InterpolateImageFunction Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Constants for the image dimensions */ + itkStaticConstMacro(InputImageDimension, unsigned int, + TInputImage::ImageDimension); + + /** + * Type of the Transform Base class + * The fixed image should be a 3D image + */ + typedef Transform TransformType; + + typedef typename TransformType::Pointer TransformPointer; + typedef typename TransformType::InputPointType InputPointType; + typedef typename TransformType::OutputPointType OutputPointType; + typedef typename TransformType::ParametersType TransformParametersType; + typedef typename TransformType::JacobianType TransformJacobianType; + + typedef typename Superclass::InputPixelType PixelType; + + typedef typename TInputImage::SizeType SizeType; + + typedef Vector DirectionType; + + /** Type of the Interpolator Base class */ + typedef InterpolateImageFunction InterpolatorType; + + typedef typename InterpolatorType::Pointer InterpolatorPointer; + + + /** Run-time type information (and related methods). */ + itkTypeMacro(RayCastInterpolateImageFunctionWithOrigin, InterpolateImageFunction); + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** OutputType typedef support. */ + typedef typename Superclass::OutputType OutputType; + + /** InputImageType typedef support. */ + typedef typename Superclass::InputImageType InputImageType; + + /** RealType typedef support. */ + typedef typename Superclass::RealType RealType; + + /** Dimension underlying input image. */ + itkStaticConstMacro(ImageDimension, unsigned int,Superclass::ImageDimension); + + /** Point typedef support. */ + typedef typename Superclass::PointType PointType; + + /** Index typedef support. */ + typedef typename Superclass::IndexType IndexType; + + /** ContinuousIndex typedef support. */ + typedef typename Superclass::ContinuousIndexType ContinuousIndexType; + + /** \brief + * Interpolate the image at a point position. + * + * Returns the interpolated image intensity at a + * specified point position. No bounds checking is done. + * The point is assume to lie within the image buffer. + * + * ImageFunction::IsInsideBuffer() can be used to check bounds before + * calling the method. + */ + virtual OutputType Evaluate( const PointType& point ) const; + + /** Interpolate the image at a continuous index position + * + * Returns the interpolated image intensity at a + * specified index position. No bounds checking is done. + * The point is assume to lie within the image buffer. + * + * Subclasses must override this method. + * + * ImageFunction::IsInsideBuffer() can be used to check bounds before + * calling the method. + */ + virtual OutputType EvaluateAtContinuousIndex( + const ContinuousIndexType &index ) const; + + + /** Connect the Transform. */ + itkSetObjectMacro( Transform, TransformType ); + /** Get a pointer to the Transform. */ + itkGetObjectMacro( Transform, TransformType ); + + /** Connect the Interpolator. */ + itkSetObjectMacro( Interpolator, InterpolatorType ); + /** Get a pointer to the Interpolator. */ + itkGetObjectMacro( Interpolator, InterpolatorType ); + + /** Connect the Interpolator. */ + itkSetMacro( FocalPoint, InputPointType ); + /** Get a pointer to the Interpolator. */ + itkGetMacro( FocalPoint, InputPointType ); + + /** Connect the Transform. */ + itkSetMacro( Threshold, double ); + /** Get a pointer to the Transform. */ + itkGetMacro( Threshold, double ); + + /** Check if a point is inside the image buffer. + * \warning For efficiency, no validity checking of + * the input image pointer is done. */ + inline bool IsInsideBuffer( const PointType & ) const + { + return true; + } + bool IsInsideBuffer( const ContinuousIndexType & ) const + { + return true; + } + bool IsInsideBuffer( const IndexType & ) const + { + return true; + } + +protected: + + /// Constructor + RayCastInterpolateImageFunctionWithOrigin(); + + /// Destructor + ~RayCastInterpolateImageFunctionWithOrigin(){}; + + /// Print the object + void PrintSelf(std::ostream& os, Indent indent) const; + + /// Transformation used to calculate the new focal point position + TransformPointer m_Transform; + + /// The focal point or position of the ray source + InputPointType m_FocalPoint; + + /// The threshold above which voxels along the ray path are integrated. + double m_Threshold; + + /// Pointer to the interpolator + InterpolatorPointer m_Interpolator; + + +private: + RayCastInterpolateImageFunctionWithOrigin( const Self& ); //purposely not implemented + void operator=( const Self& ); //purposely not implemented + + +}; + +} // namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkRayCastInterpolateImageFunctionWithOrigin.txx" +#endif + +#endif diff --git a/itk/itkRayCastInterpolateImageFunctionWithOrigin.txx b/itk/itkRayCastInterpolateImageFunctionWithOrigin.txx new file mode 100644 index 0000000..d6504a4 --- /dev/null +++ b/itk/itkRayCastInterpolateImageFunctionWithOrigin.txx @@ -0,0 +1,1569 @@ +/*========================================================================= + +Program: Insight Segmentation & Registration Toolkit +Module: $RCSfile: itkRayCastInterpolateImageFunctionWithOrigin.txx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:32:01 $ +Version: $Revision: 1.1 $ + +Copyright (c) Insight Software Consortium. All rights reserved. +See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef __itkRayCastInterpolateImageFunctionWithOrigin_txx +#define __itkRayCastInterpolateImageFunctionWithOrigin_txx + +#include "itkRayCastInterpolateImageFunctionWithOrigin.h" + +#include "vnl/vnl_math.h" + + +// Put the helper class in an anonymous namespace so that it is not +// exposed to the user +namespace { + +/** \class Helper class to maintain state when casting a ray. + * This helper class keeps the RayCastInterpolateImageFunctionWithOrigin thread safe. + */ +template +class RayCastHelper +{ +public: + /** Constants for the image dimensions */ + itkStaticConstMacro(InputImageDimension, unsigned int, + TInputImage::ImageDimension); + + /** + * Type of the Transform Base class + * The fixed image should be a 3D image + */ + typedef itk::Transform TransformType; + + typedef typename TransformType::Pointer TransformPointer; + typedef typename TransformType::InputPointType InputPointType; + typedef typename TransformType::OutputPointType OutputPointType; + typedef typename TransformType::ParametersType TransformParametersType; + typedef typename TransformType::JacobianType TransformJacobianType; + + typedef typename TInputImage::SizeType SizeType; + typedef itk::Vector DirectionType; + typedef itk::Point PointType; + + typedef TInputImage InputImageType; + typedef typename InputImageType::PixelType PixelType; + typedef typename InputImageType::IndexType IndexType; + + /** + * Set the image class + */ + void SetImage(const InputImageType *input) + { + m_Image = input; + } + + /** + * Initialise the ray using the position and direction of a line. + * + * \param RayPosn The position of the ray in 3D (mm). + * \param RayDirn The direction of the ray in 3D (mm). + * + * \return True if this is a valid ray. + */ + bool SetRay(OutputPointType RayPosn, DirectionType RayDirn); + + + /** \brief + * Integrate the interpolated intensities along the ray and + * return the result. + * + * This routine can be called after instantiating the ray and + * calling SetProjectionCoord2D() or Reset(). It may then be called + * as many times thereafter for different 2D projection + * coordinates. + * + * \param integral The integrated intensities along the ray. + * + * \return True if a valid ray was specified. + */ + bool Integrate(double &integral) + { + return IntegrateAboveThreshold(integral, 0); + }; + + + /** \brief + * Integrate the interpolated intensities above a given threshold, + * along the ray and return the result. + * + * This routine can be called after instantiating the ray and + * calling SetProjectionCoord2D() or Reset(). It may then be called + * as many times thereafter for different 2D projection + * coordinates. + * + * \param integral The integrated intensities along the ray. + * \param threshold The integration threshold [default value: 0] + * + * \return True if a valid ray was specified. + */ + bool IntegrateAboveThreshold(double &integral, double threshold); + + /** \brief + * Increment each of the intensities of the 4 planar voxels + * surrounding the current ray point. + * + * \parameter increment Intensity increment for each of the current 4 voxels + */ + void IncrementIntensities(double increment=1); + + /// Reset the iterator to the start of the ray. + void Reset(void); + + /// Return the interpolated intensity of the current ray point. + double GetCurrentIntensity(void) const; + + /// Return the ray point spacing in mm + double GetRayPointSpacing(void) const { + typename InputImageType::SpacingType spacing=this->m_Image->GetSpacing(); + + if (m_ValidRay) + return vcl_sqrt(m_VoxelIncrement[0]*spacing[0]*m_VoxelIncrement[0]*spacing[0] + + m_VoxelIncrement[1]*spacing[1]*m_VoxelIncrement[1]*spacing[1] + + m_VoxelIncrement[2]*spacing[2]*m_VoxelIncrement[2]*spacing[2] ); + else + return 0.; + }; + + /// Set the initial zero state of the object + void ZeroState(); + + /// Initialise the object + void Initialise(void); + +protected: + /// Calculate the endpoint coordinats of the ray in voxels. + void EndPointsInVoxels(void); + + /** + * Calculate the incremental direction vector in voxels, 'dVoxel', + * required to traverse the ray. + */ + void CalcDirnVector(void); + + /** + * Reduce the length of the ray until both start and end + * coordinates lie inside the volume. + * + * \return True if a valid ray has been, false otherwise. + */ + bool AdjustRayLength(void); + + /** + * Obtain pointers to the four voxels surrounding the point where the ray + * enters the volume. + */ + void InitialiseVoxelPointers(void); + + /// Increment the voxel pointers surrounding the current point on the ray. + void IncrementVoxelPointers(void); + + /// Record volume dimensions and resolution + void RecordVolumeDimensions(void); + + /// Define the corners of the volume + void DefineCorners(void); + + /** \brief + * Calculate the planes which define the volume. + * + * Member function to calculate the equations of the planes of 4 of + * the sides of the volume, calculate the positions of the 8 corners + * of the volume in mm in World, also calculate the values of the + * slopes of the lines which go to make up the volume( defined as + * lines in cube x,y,z dirn and then each of these lines has a slope + * in the world x,y,z dirn [3]) and finally also to return the length + * of the sides of the lines in mm. + */ + void CalcPlanesAndCorners(void); + + /** \brief + * Calculate the ray intercepts with the volume. + * + * See where the ray cuts the volume, check that truncation does not occur, + * if not, then start ray where it first intercepts the volume and set + * x_max to be where it leaves the volume. + * + * \return True if a valid ray has been specified, false otherwise. + */ + bool CalcRayIntercepts(void); + + /** + * The ray is traversed by stepping in the axial direction + * that enables the greatest number of planes in the volume to be + * intercepted. + */ + typedef enum { + UNDEFINED_DIRECTION=0, //!< Undefined + TRANSVERSE_IN_X, //!< x + TRANSVERSE_IN_Y, //!< y + TRANSVERSE_IN_Z, //!< z + LAST_DIRECTION + } TraversalDirection; + + // Cache the image in the structure. Skip the smart pointer for + // efficiency. This inner class will go in/out of scope with every + // call to Evaluate() + const InputImageType *m_Image; + + /// Flag indicating whether the current ray is valid + bool m_ValidRay; + + /** \brief + * The start position of the ray in voxels. + * + * NB. Two of the components of this coordinate (i.e. those lying within + * the planes of voxels being traversed) will be shifted by half a + * voxel. This enables indices of the neighbouring voxels within the plane + * to be determined by simply casting to 'int' and optionally adding 1. + */ + double m_RayVoxelStartPosition[3]; + + /** \brief + * The end coordinate of the ray in voxels. + * + * NB. Two of the components of this coordinate (i.e. those lying within + * the planes of voxels being traversed) will be shifted by half a + * voxel. This enables indices of the neighbouring voxels within the plane + * to be determined by simply casting to 'int' and optionally adding 1. + */ + double m_RayVoxelEndPosition[3]; + + + /** \brief + * The current coordinate on the ray in voxels. + * + * NB. Two of the components of this coordinate (i.e. those lying within + * the planes of voxels being traversed) will be shifted by half a + * voxel. This enables indices of the neighbouring voxels within the plane + * to be determined by simply casting to 'int' and optionally adding 1. + */ + double m_Position3Dvox[3]; + + /** The incremental direction vector of the ray in voxels. */ + double m_VoxelIncrement[3]; + + /// The direction in which the ray is incremented thorough the volume (x, y or z). + TraversalDirection m_TraversalDirection; + + /// The total number of planes of voxels traversed by the ray. + int m_TotalRayVoxelPlanes; + + /// The current number of planes of voxels traversed by the ray. + int m_NumVoxelPlanesTraversed; + + /// Pointers to the current four voxels surrounding the ray's trajectory. + const PixelType *m_RayIntersectionVoxels[4]; + + /** + * The voxel coordinate of the bottom-left voxel of the current + * four voxels surrounding the ray's trajectory. + */ + int m_RayIntersectionVoxelIndex[3]; + + /// The dimension in voxels of the 3D volume in along the x axis + int m_NumberOfVoxelsInX; + /// The dimension in voxels of the 3D volume in along the y axis + int m_NumberOfVoxelsInY; + /// The dimension in voxels of the 3D volume in along the z axis + int m_NumberOfVoxelsInZ; + + /// Voxel dimension in x + double m_VoxelDimensionInX; + /// Voxel dimension in y + double m_VoxelDimensionInY; + /// Voxel dimension in z + double m_VoxelDimensionInZ; + + /// The coordinate of the point at which the ray enters the volume in mm. + double m_RayStartCoordInMM[3]; + /// The coordinate of the point at which the ray exits the volume in mm. + double m_RayEndCoordInMM[3]; + + + /** \brief + Planes which define the boundary of the volume in mm + (six planes and four parameters: Ax+By+Cz+D). */ + double m_BoundingPlane[6][4]; + /// The eight corners of the volume (x,y,z coordinates for each). + double m_BoundingCorner[8][3]; + + /// The position of the ray + double m_CurrentRayPositionInMM[3]; + + /// The direction of the ray + double m_RayDirectionInMM[3]; + +}; + +/* ----------------------------------------------------------------------- + Initialise() - Initialise the object + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::Initialise(void) +{ + // Save the dimensions of the volume and calculate the bounding box + this->RecordVolumeDimensions(); + + // Calculate the planes and corners which define the volume. + this->DefineCorners(); + this->CalcPlanesAndCorners(); +} + + +/* ----------------------------------------------------------------------- + RecordVolumeDimensions() - Record volume dimensions and resolution + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::RecordVolumeDimensions(void) +{ + typename InputImageType::SpacingType spacing=this->m_Image->GetSpacing(); + SizeType dim=this->m_Image->GetLargestPossibleRegion().GetSize(); + + m_NumberOfVoxelsInX = dim[0]; + m_NumberOfVoxelsInY = dim[1]; + m_NumberOfVoxelsInZ = dim[2]; + + m_VoxelDimensionInX = spacing[0]; + m_VoxelDimensionInY = spacing[1]; + m_VoxelDimensionInZ = spacing[2]; +} + + +/* ----------------------------------------------------------------------- + DefineCorners() - Define the corners of the volume + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::DefineCorners(void) +{ + // Define corner positions as if at the origin + + m_BoundingCorner[0][0] = + m_BoundingCorner[1][0] = + m_BoundingCorner[2][0] = + m_BoundingCorner[3][0] = 0; + + m_BoundingCorner[4][0] = + m_BoundingCorner[5][0] = + m_BoundingCorner[6][0] = + m_BoundingCorner[7][0] = m_VoxelDimensionInX*m_NumberOfVoxelsInX; + + m_BoundingCorner[1][1] = + m_BoundingCorner[3][1] = + m_BoundingCorner[5][1] = + m_BoundingCorner[7][1] = m_VoxelDimensionInY*m_NumberOfVoxelsInY; + + m_BoundingCorner[0][1] = + m_BoundingCorner[2][1] = + m_BoundingCorner[4][1] = + m_BoundingCorner[6][1] = 0; + + m_BoundingCorner[0][2] = + m_BoundingCorner[1][2] = + m_BoundingCorner[4][2] = + m_BoundingCorner[5][2] = + m_VoxelDimensionInZ*m_NumberOfVoxelsInZ; + + m_BoundingCorner[2][2] = + m_BoundingCorner[3][2] = + m_BoundingCorner[6][2] = + m_BoundingCorner[7][2] = 0; + +} + +/* ----------------------------------------------------------------------- + CalcPlanesAndCorners() - Calculate the planes and corners of the volume. + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::CalcPlanesAndCorners(void) +{ + int j; + + + // find the equations of the planes + + int c1=0, c2=0, c3=0; + + for (j=0; j<6; j++) + { // loop around for planes + switch (j) + { // which corners to take + case 0: + c1=1; c2=2; c3=3; + break; + case 1: + c1=4; c2=5; c3=6; + break; + case 2: + c1=5; c2=3; c3=7; + break; + case 3: + c1=2; c2=4; c3=6; + break; + case 4: + c1=1; c2=5; c3=0; + break; + case 5: + c1=3; c2=7; c3=2; + break; + } + + + double line1x, line1y, line1z; + double line2x, line2y, line2z; + + // lines from one corner to another in x,y,z dirns + line1x = m_BoundingCorner[c1][0] - m_BoundingCorner[c2][0]; + line2x = m_BoundingCorner[c1][0] - m_BoundingCorner[c3][0]; + + line1y = m_BoundingCorner[c1][1] - m_BoundingCorner[c2][1]; + line2y = m_BoundingCorner[c1][1] - m_BoundingCorner[c3][1]; + + line1z = m_BoundingCorner[c1][2] - m_BoundingCorner[c2][2]; + line2z = m_BoundingCorner[c1][2] - m_BoundingCorner[c3][2]; + + double A, B, C, D; + + // take cross product + A = line1y*line2z - line2y*line1z; + B = line2x*line1z - line1x*line2z; + C = line1x*line2y - line2x*line1y; + + // find constant + D = -( A*m_BoundingCorner[c1][0] + + B*m_BoundingCorner[c1][1] + + C*m_BoundingCorner[c1][2] ); + + // initialise plane value and normalise + m_BoundingPlane[j][0] = A/vcl_sqrt(A*A + B*B + C*C); + m_BoundingPlane[j][1] = B/vcl_sqrt(A*A + B*B + C*C); + m_BoundingPlane[j][2] = C/vcl_sqrt(A*A + B*B + C*C); + m_BoundingPlane[j][3] = D/vcl_sqrt(A*A + B*B + C*C); + + if ( (A*A + B*B + C*C) == 0 ) + { + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "Division by zero (planes) " + "- CalcPlanesAndCorners()."); + throw err; + } + } + +} + + +/* ----------------------------------------------------------------------- + CalcRayIntercepts() - Calculate the ray intercepts with the volume. + ----------------------------------------------------------------------- */ + +template +bool +RayCastHelper +::CalcRayIntercepts() +{ + double maxInterDist, interDist; + double cornerVect[4][3]; + int cross[4][3], noInterFlag[6]; + int nSidesCrossed, crossFlag, c[4]; + double ax, ay, az, bx, by, bz; + double cubeInter[6][3]; + double denom; + + int i,j, k; + int NoSides = 6; // =6 to allow truncation: =4 to remove truncated rays + + // Calculate intercept of ray with planes + + double interceptx[6], intercepty[6], interceptz[6]; + double d[6]; + + for( j=0; j=0 + && cross[1][i]>=0 + && cross[2][i]>=0 + && cross[3][i]>=0) ) + { + crossFlag++; + } + } + + + if( crossFlag==3 && noInterFlag[j]==1 ) + { + cubeInter[nSidesCrossed][0] = interceptx[j]; + cubeInter[nSidesCrossed][1] = intercepty[j]; + cubeInter[nSidesCrossed][2] = interceptz[j]; + nSidesCrossed++; + } + + } // End of loop over all four planes + + m_RayStartCoordInMM[0] = cubeInter[0][0]; + m_RayStartCoordInMM[1] = cubeInter[0][1]; + m_RayStartCoordInMM[2] = cubeInter[0][2]; + + m_RayEndCoordInMM[0] = cubeInter[1][0]; + m_RayEndCoordInMM[1] = cubeInter[1][1]; + m_RayEndCoordInMM[2] = cubeInter[1][2]; + + if( nSidesCrossed >= 5 ) + { + std::cerr << "WARNING: No. of sides crossed equals: " << nSidesCrossed << std::endl; + } + + // If 'nSidesCrossed' is larger than 2, this means that the ray goes through + // a corner of the volume and due to rounding errors, the ray is + // deemed to go through more than two planes. To obtain the correct + // start and end positions we choose the two intercept values which + // are furthest from each other. + + + if( nSidesCrossed >= 3 ) + { + maxInterDist = 0; + for( j=0; j maxInterDist ) + { + maxInterDist = interDist; + + m_RayStartCoordInMM[0] = cubeInter[j][0]; + m_RayStartCoordInMM[1] = cubeInter[j][1]; + m_RayStartCoordInMM[2] = cubeInter[j][2]; + + m_RayEndCoordInMM[0] = cubeInter[k][0]; + m_RayEndCoordInMM[1] = cubeInter[k][1]; + m_RayEndCoordInMM[2] = cubeInter[k][2]; + } + } + } + nSidesCrossed = 2; + } + + if (nSidesCrossed == 2 ) + { + return true; + } + else + { + return false; + } +} + + +/* ----------------------------------------------------------------------- + SetRay() - Set the position and direction of the ray + ----------------------------------------------------------------------- */ + +template +bool +RayCastHelper +::SetRay(OutputPointType RayPosn, DirectionType RayDirn) +{ + + // Store the position and direction of the ray + typename TInputImage::SpacingType spacing=this->m_Image->GetSpacing(); + SizeType dim=this->m_Image->GetLargestPossibleRegion().GetSize(); + + // we need to translate the _center_ of the volume to the origin + m_NumberOfVoxelsInX = dim[0]; + m_NumberOfVoxelsInY = dim[1]; + m_NumberOfVoxelsInZ = dim[2]; + + m_VoxelDimensionInX = spacing[0]; + m_VoxelDimensionInY = spacing[1]; + m_VoxelDimensionInZ = spacing[2]; + + // (Aviv) Incorporating a fix by Jian Wu + // http://public.kitware.com/pipermail/insight-users/2006-March/017265.html + m_CurrentRayPositionInMM[0] = RayPosn[0]; + m_CurrentRayPositionInMM[1] = RayPosn[1]; + m_CurrentRayPositionInMM[2] = RayPosn[2]; + + m_RayDirectionInMM[0] = RayDirn[0]; + m_RayDirectionInMM[1] = RayDirn[1]; + m_RayDirectionInMM[2] = RayDirn[2]; + + // Compute the ray path for this coordinate in mm + + m_ValidRay = this->CalcRayIntercepts(); + + if (! m_ValidRay) + { + Reset(); + return false; + } + + // Convert the start and end coordinates of the ray to voxels + + this->EndPointsInVoxels(); + + /* Calculate the ray direction vector in voxels and hence the voxel + increment required to traverse the ray, and the number of + interpolation points on the ray. + + This routine also shifts the coordinate frame by half a voxel for + two of the directional components (i.e. those lying within the + planes of voxels being traversed). */ + + this->CalcDirnVector(); + + + /* Reduce the length of the ray until both start and end + coordinates lie inside the volume. */ + + m_ValidRay = this->AdjustRayLength(); + + // Reset the iterator to the start of the ray. + + Reset(); + + return m_ValidRay; +} + + +/* ----------------------------------------------------------------------- + EndPointsInVoxels() - Convert the endpoints to voxels + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::EndPointsInVoxels(void) +{ + m_RayVoxelStartPosition[0] = m_RayStartCoordInMM[0]/m_VoxelDimensionInX; + m_RayVoxelStartPosition[1] = m_RayStartCoordInMM[1]/m_VoxelDimensionInY; + m_RayVoxelStartPosition[2] = m_RayStartCoordInMM[2]/m_VoxelDimensionInZ; + + m_RayVoxelEndPosition[0] = m_RayEndCoordInMM[0]/m_VoxelDimensionInX; + m_RayVoxelEndPosition[1] = m_RayEndCoordInMM[1]/m_VoxelDimensionInY; + m_RayVoxelEndPosition[2] = m_RayEndCoordInMM[2]/m_VoxelDimensionInZ; + +} + + +/* ----------------------------------------------------------------------- + CalcDirnVector() - Calculate the incremental direction vector in voxels. + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::CalcDirnVector(void) +{ + double xNum, yNum, zNum; + + // Calculate the number of voxels in each direction + + xNum = vcl_fabs(m_RayVoxelStartPosition[0] - m_RayVoxelEndPosition[0]); + yNum = vcl_fabs(m_RayVoxelStartPosition[1] - m_RayVoxelEndPosition[1]); + zNum = vcl_fabs(m_RayVoxelStartPosition[2] - m_RayVoxelEndPosition[2]); + + // The direction iterated in is that with the greatest number of voxels + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Iterate in X direction + + if( (xNum >= yNum) && (xNum >= zNum) ) + { + if( m_RayVoxelStartPosition[0] < m_RayVoxelEndPosition[0] ) + { + m_VoxelIncrement[0] = 1; + + m_VoxelIncrement[1] + = (m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1])/(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0]); + + m_VoxelIncrement[2] + = (m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2])/(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0]); + } + else + { + m_VoxelIncrement[0] = -1; + + m_VoxelIncrement[1] + = -(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1])/(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0]); + + m_VoxelIncrement[2] + = -(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2])/(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0]); + } + + // This section is to alter the start position in order to + // place the center of the voxels in there correct positions, + // rather than placing them at the corner of voxels which is + // what happens if this is not carried out. The reason why + // x has no -0.5 is because this is the direction we are going + // to iterate in and therefore we wish to go from center to + // center rather than finding the surrounding voxels. + + m_RayVoxelStartPosition[1] += ( (int)m_RayVoxelStartPosition[0] + - m_RayVoxelStartPosition[0])*m_VoxelIncrement[1]*m_VoxelIncrement[0] + + 0.5*m_VoxelIncrement[1] - 0.5; + + m_RayVoxelStartPosition[2] += ( (int)m_RayVoxelStartPosition[0] + - m_RayVoxelStartPosition[0])*m_VoxelIncrement[2]*m_VoxelIncrement[0] + + 0.5*m_VoxelIncrement[2] - 0.5; + + m_RayVoxelStartPosition[0] = (int)m_RayVoxelStartPosition[0] + 0.5*m_VoxelIncrement[0]; + + m_TotalRayVoxelPlanes = (int)xNum; + + m_TraversalDirection = TRANSVERSE_IN_X; + } + + // Iterate in Y direction + + else if( (yNum >= xNum) && (yNum >= zNum) ) + { + + if( m_RayVoxelStartPosition[1] < m_RayVoxelEndPosition[1] ) + { + m_VoxelIncrement[1] = 1; + + m_VoxelIncrement[0] + = (m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0])/(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1]); + + m_VoxelIncrement[2] + = (m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2])/(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1]); + } + else + { + m_VoxelIncrement[1] = -1; + + m_VoxelIncrement[0] + = -(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0])/(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1]); + + m_VoxelIncrement[2] + = -(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2])/(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1]); + } + + m_RayVoxelStartPosition[0] += ( (int)m_RayVoxelStartPosition[1] + - m_RayVoxelStartPosition[1])*m_VoxelIncrement[0]*m_VoxelIncrement[1] + + 0.5*m_VoxelIncrement[0] - 0.5; + + m_RayVoxelStartPosition[2] += ( (int)m_RayVoxelStartPosition[1] + - m_RayVoxelStartPosition[1])*m_VoxelIncrement[2]*m_VoxelIncrement[1] + + 0.5*m_VoxelIncrement[2] - 0.5; + + m_RayVoxelStartPosition[1] = (int)m_RayVoxelStartPosition[1] + 0.5*m_VoxelIncrement[1]; + + m_TotalRayVoxelPlanes = (int)yNum; + + m_TraversalDirection = TRANSVERSE_IN_Y; + } + + // Iterate in Z direction + + else + { + + if( m_RayVoxelStartPosition[2] < m_RayVoxelEndPosition[2] ) + { + m_VoxelIncrement[2] = 1; + + m_VoxelIncrement[0] + = (m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0])/(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2]); + + m_VoxelIncrement[1] + = (m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1])/(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2]); + } + else + { + m_VoxelIncrement[2] = -1; + + m_VoxelIncrement[0] + = -(m_RayVoxelStartPosition[0] + - m_RayVoxelEndPosition[0])/(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2]); + + m_VoxelIncrement[1] + = -(m_RayVoxelStartPosition[1] + - m_RayVoxelEndPosition[1])/(m_RayVoxelStartPosition[2] + - m_RayVoxelEndPosition[2]); + } + + m_RayVoxelStartPosition[0] += ( (int)m_RayVoxelStartPosition[2] + - m_RayVoxelStartPosition[2])*m_VoxelIncrement[0]*m_VoxelIncrement[2] + + 0.5*m_VoxelIncrement[0] - 0.5; + + m_RayVoxelStartPosition[1] += ( (int)m_RayVoxelStartPosition[2] + - m_RayVoxelStartPosition[2])*m_VoxelIncrement[1]*m_VoxelIncrement[2] + + 0.5*m_VoxelIncrement[1] - 0.5; + + m_RayVoxelStartPosition[2] = (int)m_RayVoxelStartPosition[2] + 0.5*m_VoxelIncrement[2]; + + m_TotalRayVoxelPlanes = (int)zNum; + + m_TraversalDirection = TRANSVERSE_IN_Z; + } +} + + +/* ----------------------------------------------------------------------- + AdjustRayLength() - Ensure that the ray lies within the volume + ----------------------------------------------------------------------- */ + +template +bool +RayCastHelper +::AdjustRayLength(void) +{ + bool startOK, endOK; + + int Istart[3]; + int Idirn[3]; + + if (m_TraversalDirection == TRANSVERSE_IN_X) + { + Idirn[0] = 0; + Idirn[1] = 1; + Idirn[2] = 1; + } + else if (m_TraversalDirection == TRANSVERSE_IN_Y) + { + Idirn[0] = 1; + Idirn[1] = 0; + Idirn[2] = 1; + } + else if (m_TraversalDirection == TRANSVERSE_IN_Z) + { + Idirn[0] = 1; + Idirn[1] = 1; + Idirn[2] = 0; + } + else + { + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "The ray traversal direction is unset " + "- AdjustRayLength()."); + throw err; + return false; + } + + + do + { + + startOK = false; + endOK = false; + + Istart[0] = (int) vcl_floor(m_RayVoxelStartPosition[0]); + Istart[1] = (int) vcl_floor(m_RayVoxelStartPosition[1]); + Istart[2] = (int) vcl_floor(m_RayVoxelStartPosition[2]); + + if( (Istart[0] >= 0) && (Istart[0] + Idirn[0] < m_NumberOfVoxelsInX) && + (Istart[1] >= 0) && (Istart[1] + Idirn[1] < m_NumberOfVoxelsInY) && + (Istart[2] >= 0) && (Istart[2] + Idirn[2] < m_NumberOfVoxelsInZ) ) + { + + startOK = true; + } + else + { + m_RayVoxelStartPosition[0] += m_VoxelIncrement[0]; + m_RayVoxelStartPosition[1] += m_VoxelIncrement[1]; + m_RayVoxelStartPosition[2] += m_VoxelIncrement[2]; + + m_TotalRayVoxelPlanes--; + } + + Istart[0] = (int) vcl_floor(m_RayVoxelStartPosition[0] + + m_TotalRayVoxelPlanes*m_VoxelIncrement[0]); + + Istart[1] = (int) vcl_floor(m_RayVoxelStartPosition[1] + + m_TotalRayVoxelPlanes*m_VoxelIncrement[1]); + + Istart[2] = (int) vcl_floor(m_RayVoxelStartPosition[2] + + m_TotalRayVoxelPlanes*m_VoxelIncrement[2]); + + if( (Istart[0] >= 0) && (Istart[0] + Idirn[0] < m_NumberOfVoxelsInX) && + (Istart[1] >= 0) && (Istart[1] + Idirn[1] < m_NumberOfVoxelsInY) && + (Istart[2] >= 0) && (Istart[2] + Idirn[2] < m_NumberOfVoxelsInZ) ) + { + + endOK = true; + } + else + { + m_TotalRayVoxelPlanes--; + } + + } while ( (! (startOK && endOK)) && (m_TotalRayVoxelPlanes > 1) ); + + + return (startOK && endOK); +} + + +/* ----------------------------------------------------------------------- + Reset() - Reset the iterator to the start of the ray. + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::Reset(void) +{ + int i; + + m_NumVoxelPlanesTraversed = -1; + + // If this is a valid ray... + + if (m_ValidRay) + { + for (i=0; i<3; i++) + { + m_Position3Dvox[i] = m_RayVoxelStartPosition[i]; + } + this->InitialiseVoxelPointers(); + } + + // otherwise set parameters to zero + + else + { + for (i=0; i<3; i++) + { + m_RayVoxelStartPosition[i] = 0.; + } + for (i=0; i<3; i++) + { + m_RayVoxelEndPosition[i] = 0.; + } + for (i=0; i<3; i++) + { + m_VoxelIncrement[i] = 0.; + } + m_TraversalDirection = UNDEFINED_DIRECTION; + + m_TotalRayVoxelPlanes = 0; + + for (i=0; i<4; i++) + { + m_RayIntersectionVoxels[i] = 0; + } + for (i=0; i<3; i++) + { + m_RayIntersectionVoxelIndex[i] = 0; + } + } +} + + +/* ----------------------------------------------------------------------- + InitialiseVoxelPointers() - Obtain pointers to the first four voxels + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::InitialiseVoxelPointers(void) +{ + IndexType index; + + int Ix, Iy, Iz; + + Ix = (int)(m_RayVoxelStartPosition[0]); + Iy = (int)(m_RayVoxelStartPosition[1]); + Iz = (int)(m_RayVoxelStartPosition[2]); + + m_RayIntersectionVoxelIndex[0] = Ix; + m_RayIntersectionVoxelIndex[1] = Iy; + m_RayIntersectionVoxelIndex[2] = Iz; + + switch( m_TraversalDirection ) + { + case TRANSVERSE_IN_X: + { + + if( (Ix >= 0) && (Ix < m_NumberOfVoxelsInX) && + (Iy >= 0) && (Iy + 1 < m_NumberOfVoxelsInY) && + (Iz >= 0) && (Iz + 1 < m_NumberOfVoxelsInZ)) + { + + index[0]=Ix; index[1]=Iy; index[2]=Iz; + m_RayIntersectionVoxels[0] + = this->m_Image->GetBufferPointer() + this->m_Image->ComputeOffset(index); + + index[0]=Ix; index[1]=Iy+1; index[2]=Iz; + m_RayIntersectionVoxels[1] + = ( this->m_Image->GetBufferPointer() + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix; index[1]=Iy; index[2]=Iz+1; + m_RayIntersectionVoxels[2] + = ( this->m_Image->GetBufferPointer() + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix; index[1]=Iy+1; index[2]=Iz+1; + m_RayIntersectionVoxels[3] + = ( this->m_Image->GetBufferPointer() + this->m_Image->ComputeOffset(index) ); + } + else + { + m_RayIntersectionVoxels[0] = + m_RayIntersectionVoxels[1] = + m_RayIntersectionVoxels[2] = + m_RayIntersectionVoxels[3] = NULL; + } + break; + } + + case TRANSVERSE_IN_Y: + { + + if( (Ix >= 0) && (Ix + 1 < m_NumberOfVoxelsInX) && + (Iy >= 0) && (Iy < m_NumberOfVoxelsInY) && + (Iz >= 0) && (Iz + 1 < m_NumberOfVoxelsInZ)) + { + + index[0]=Ix; index[1]=Iy; index[2]=Iz; + m_RayIntersectionVoxels[0] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix+1; index[1]=Iy; index[2]=Iz; + m_RayIntersectionVoxels[1] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix; index[1]=Iy; index[2]=Iz+1; + m_RayIntersectionVoxels[2] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix+1; index[1]=Iy; index[2]=Iz+1; + m_RayIntersectionVoxels[3] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + } + else + { + m_RayIntersectionVoxels[0] + = m_RayIntersectionVoxels[1] + = m_RayIntersectionVoxels[2] + = m_RayIntersectionVoxels[3] = NULL; + } + break; + } + + case TRANSVERSE_IN_Z: + { + + if( (Ix >= 0) && (Ix + 1 < m_NumberOfVoxelsInX) && + (Iy >= 0) && (Iy + 1 < m_NumberOfVoxelsInY) && + (Iz >= 0) && (Iz < m_NumberOfVoxelsInZ)) + { + + index[0]=Ix; index[1]=Iy; index[2]=Iz; + m_RayIntersectionVoxels[0] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix+1; index[1]=Iy; index[2]=Iz; + m_RayIntersectionVoxels[1] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix; index[1]=Iy+1; index[2]=Iz; + m_RayIntersectionVoxels[2] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + index[0]=Ix+1; index[1]=Iy+1; index[2]=Iz; + m_RayIntersectionVoxels[3] = ( this->m_Image->GetBufferPointer() + + this->m_Image->ComputeOffset(index) ); + + } + else + { + m_RayIntersectionVoxels[0] + = m_RayIntersectionVoxels[1] + = m_RayIntersectionVoxels[2] + = m_RayIntersectionVoxels[3] = NULL; + } + break; + } + + default: + { + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "The ray traversal direction is unset " + "- InitialiseVoxelPointers()."); + throw err; + return; + } + } +} + +/* ----------------------------------------------------------------------- + IncrementVoxelPointers() - Increment the voxel pointers + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::IncrementVoxelPointers(void) +{ + double xBefore = m_Position3Dvox[0]; + double yBefore = m_Position3Dvox[1]; + double zBefore = m_Position3Dvox[2]; + + m_Position3Dvox[0] += m_VoxelIncrement[0]; + m_Position3Dvox[1] += m_VoxelIncrement[1]; + m_Position3Dvox[2] += m_VoxelIncrement[2]; + + int dx = ((int) m_Position3Dvox[0]) - ((int) xBefore); + int dy = ((int) m_Position3Dvox[1]) - ((int) yBefore); + int dz = ((int) m_Position3Dvox[2]) - ((int) zBefore); + + m_RayIntersectionVoxelIndex[0] += dx; + m_RayIntersectionVoxelIndex[1] += dy; + m_RayIntersectionVoxelIndex[2] += dz; + + int totalRayVoxelPlanes + = dx + dy*m_NumberOfVoxelsInX + dz*m_NumberOfVoxelsInX*m_NumberOfVoxelsInY; + + m_RayIntersectionVoxels[0] += totalRayVoxelPlanes; + m_RayIntersectionVoxels[1] += totalRayVoxelPlanes; + m_RayIntersectionVoxels[2] += totalRayVoxelPlanes; + m_RayIntersectionVoxels[3] += totalRayVoxelPlanes; +} + + +/* ----------------------------------------------------------------------- + GetCurrentIntensity() - Get the intensity of the current ray point. + ----------------------------------------------------------------------- */ + +template +double +RayCastHelper +::GetCurrentIntensity(void) const +{ + double a, b, c, d; + double y, z; + + if (! m_ValidRay) + { + return 0; + } + a = (double) (*m_RayIntersectionVoxels[0]); + b = (double) (*m_RayIntersectionVoxels[1] - a); + c = (double) (*m_RayIntersectionVoxels[2] - a); + d = (double) (*m_RayIntersectionVoxels[3] - a - b - c); + + switch( m_TraversalDirection ) + { + case TRANSVERSE_IN_X: + { + y = m_Position3Dvox[1] - vcl_floor(m_Position3Dvox[1]); + z = m_Position3Dvox[2] - vcl_floor(m_Position3Dvox[2]); + break; + } + case TRANSVERSE_IN_Y: + { + y = m_Position3Dvox[0] - vcl_floor(m_Position3Dvox[0]); + z = m_Position3Dvox[2] - vcl_floor(m_Position3Dvox[2]); + break; + } + case TRANSVERSE_IN_Z: + { + y = m_Position3Dvox[0] - vcl_floor(m_Position3Dvox[0]); + z = m_Position3Dvox[1] - vcl_floor(m_Position3Dvox[1]); + break; + } + default: + { + itk::ExceptionObject err(__FILE__, __LINE__); + err.SetLocation( ITK_LOCATION ); + err.SetDescription( "The ray traversal direction is unset " + "- GetCurrentIntensity()."); + throw err; + return 0; + } + } + + return a + b*y + c*z + d*y*z; +} + +/* ----------------------------------------------------------------------- + IncrementIntensities() - Increment the intensities of the current ray point + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::IncrementIntensities(double increment) +{ + short inc = (short) vcl_floor(increment + 0.5); + + if (! m_ValidRay) + { + return; + } + *m_RayIntersectionVoxels[0] += inc; + *m_RayIntersectionVoxels[1] += inc; + *m_RayIntersectionVoxels[2] += inc; + *m_RayIntersectionVoxels[3] += inc; + + return; +} + + +/* ----------------------------------------------------------------------- + IntegrateAboveThreshold() - Integrate intensities above a threshold. + ----------------------------------------------------------------------- */ + +template +bool +RayCastHelper +::IntegrateAboveThreshold(double &integral, double threshold) +{ + double intensity; +// double posn3D_x, posn3D_y, posn3D_z; + + integral = 0.; + + // Check if this is a valid ray + + if (! m_ValidRay) + { + return false; + } + /* Step along the ray as quickly as possible + integrating the interpolated intensities. */ + + for (m_NumVoxelPlanesTraversed=0; + m_NumVoxelPlanesTraversedGetCurrentIntensity(); + + if (intensity > threshold) + { + integral += intensity - threshold; + } + this->IncrementVoxelPointers(); + } + + /* The ray passes through the volume one plane of voxels at a time, + however, if its moving diagonally the ray points will be further + apart so account for this by scaling by the distance moved. */ + + integral *= this->GetRayPointSpacing(); + + return true; +} + +/* ----------------------------------------------------------------------- + ZeroState() - Set the default (zero) state of the object + ----------------------------------------------------------------------- */ + +template +void +RayCastHelper +::ZeroState() +{ + int i; + + m_ValidRay = false; + + m_NumberOfVoxelsInX = 0; + m_NumberOfVoxelsInY = 0; + m_NumberOfVoxelsInZ = 0; + + m_VoxelDimensionInX = 0; + m_VoxelDimensionInY = 0; + m_VoxelDimensionInZ = 0; + + for (i=0; i<3; i++) + { + m_CurrentRayPositionInMM[i] = 0.; + } + for (i=0; i<3; i++) + { + m_RayDirectionInMM[i] = 0.; + } + for (i=0; i<3; i++) + { + m_RayVoxelStartPosition[i] = 0.; + } + for (i=0; i<3; i++) + { + m_RayVoxelEndPosition[i] = 0.; + } + for (i=0; i<3; i++) + { + m_VoxelIncrement[i] = 0.; + } + m_TraversalDirection = UNDEFINED_DIRECTION; + + m_TotalRayVoxelPlanes = 0; + m_NumVoxelPlanesTraversed = -1; + + for (i=0; i<4; i++) + { + m_RayIntersectionVoxels[i] = 0; + } + for (i=0; i<3; i++) + { + m_RayIntersectionVoxelIndex[i] = 0; + } +} +}; // end of anonymous namespace + + +namespace itk +{ + +/************************************************************************** + * + * + * Rest of this code is the actual RayCastInterpolateImageFunctionWithOrigin + * class + * + * + **************************************************************************/ + +/* ----------------------------------------------------------------------- + Constructor + ----------------------------------------------------------------------- */ + +template +RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::RayCastInterpolateImageFunctionWithOrigin() +{ + m_Threshold = 0.; + + m_FocalPoint[0] = 0.; + m_FocalPoint[1] = 0.; + m_FocalPoint[2] = 0.; +} + + +/* ----------------------------------------------------------------------- + PrintSelf + ----------------------------------------------------------------------- */ + +template +void +RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::PrintSelf(std::ostream& os, Indent indent) const +{ + this->Superclass::PrintSelf(os,indent); + + os << indent << "Threshold: " << m_Threshold << std::endl; + os << indent << "FocalPoint: " << m_FocalPoint << std::endl; + os << indent << "Transform: " << m_Transform.GetPointer() << std::endl; + os << indent << "Interpolator: " << m_Interpolator.GetPointer() << std::endl; + +} + +/* ----------------------------------------------------------------------- + Evaluate at image index position + ----------------------------------------------------------------------- */ + +template +typename RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::OutputType +RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::Evaluate( const PointType& point ) const +{ + double integral = 0; + + OutputPointType transformedFocalPoint + = m_Transform->TransformPoint( m_FocalPoint ); + + DirectionType direction = transformedFocalPoint - point; + + RayCastHelper ray; + ray.SetImage( this->m_Image ); + ray.ZeroState(); + ray.Initialise(); + + // (Aviv) Added support for images with non-zero origin + // ray.SetRay(point, direction); + ray.SetRay(point - this->m_Image->GetOrigin().GetVectorFromOrigin(), direction); + ray.IntegrateAboveThreshold(integral, m_Threshold); + + return ( static_cast( integral )); +} + +template +typename RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::OutputType +RayCastInterpolateImageFunctionWithOrigin< TInputImage, TCoordRep > +::EvaluateAtContinuousIndex( const ContinuousIndexType& index ) const +{ + OutputPointType point; + this->m_Image->TransformContinuousIndexToPhysicalPoint(index, point); + + return this->Evaluate( point ); +} + +} // namespace itk + + +#endif diff --git a/itk/itkVTKImageToImageFilter.h b/itk/itkVTKImageToImageFilter.h new file mode 100644 index 0000000..b11b4b0 --- /dev/null +++ b/itk/itkVTKImageToImageFilter.h @@ -0,0 +1,107 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkVTKImageToImageFilter.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __itkVTKImageToImageFilter_h +#define __itkVTKImageToImageFilter_h + +#include "itkVTKImageImport.h" +#include "vtkImageExport.h" +#include "vtkImageData.h" + +#ifndef vtkFloatingPointType +#define vtkFloatingPointType float +#endif + +namespace itk +{ + +/** \class VTKImageToImageFilter + * \brief Converts a VTK image into an ITK image and plugs a + * vtk data pipeline to an ITK datapipeline. + * + * This class puts together an itkVTKImageImporter and a vtkImageExporter. + * It takes care of the details related to the connection of ITK and VTK + * pipelines. The User will perceive this filter as an adaptor to which + * a vtkImage can be plugged as input and an itk::Image is produced as + * output. + * + * \ingroup ImageFilters + */ +template +class ITK_EXPORT VTKImageToImageFilter : public ProcessObject +{ +public: + /** Standard class typedefs. */ + typedef VTKImageToImageFilter Self; + typedef ProcessObject Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(VTKImageToImageFilter, ProcessObject); + + /** Some typedefs. */ + typedef TOutputImage OutputImageType; + typedef typename OutputImageType::ConstPointer OutputImagePointer; + typedef VTKImageImport< OutputImageType > ImporterFilterType; + typedef typename ImporterFilterType::Pointer ImporterFilterPointer; + + /** Get the output in the form of a vtkImage. + This call is delegated to the internal vtkImageImporter filter */ + const OutputImageType * GetOutput() const; + + /** Set the input in the form of a vtkImageData */ + void SetInput( vtkImageData * ); + + /** Return the internal VTK image exporter filter. + This is intended to facilitate users the access + to methods in the exporter */ + vtkImageExport * GetExporter() const; + + /** Return the internal ITK image importer filter. + This is intended to facilitate users the access + to methods in the importer */ + ImporterFilterType * GetImporter() const; + + /** This call delegate the update to the importer */ + void Update(); + +protected: + VTKImageToImageFilter(); + virtual ~VTKImageToImageFilter(); + +private: + VTKImageToImageFilter(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + ImporterFilterPointer m_Importer; + vtkImageExport * m_Exporter; + +}; + +} // end namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkVTKImageToImageFilter.txx" +#endif + +#endif + + + diff --git a/itk/itkVTKImageToImageFilter.txx b/itk/itkVTKImageToImageFilter.txx new file mode 100644 index 0000000..b06ccd8 --- /dev/null +++ b/itk/itkVTKImageToImageFilter.txx @@ -0,0 +1,144 @@ +/*========================================================================= + + Program: Insight Segmentation & Registration Toolkit + Module: $RCSfile: itkVTKImageToImageFilter.txx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:32:01 $ + Version: $Revision: 1.1 $ + + Copyright (c) 2002 Insight Consortium. All rights reserved. + See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef _itkVTKImageToImageFilter_txx +#define _itkVTKImageToImageFilter_txx + +#include "itkVTKImageToImageFilter.h" + +namespace itk +{ + + + +/** + * Constructor + */ +template +VTKImageToImageFilter +::VTKImageToImageFilter() +{ + + m_Exporter = vtkImageExport::New(); + + m_Importer = ImporterFilterType::New(); + + m_Importer->SetUpdateInformationCallback( m_Exporter->GetUpdateInformationCallback()); + m_Importer->SetPipelineModifiedCallback( m_Exporter->GetPipelineModifiedCallback()); + m_Importer->SetWholeExtentCallback( m_Exporter->GetWholeExtentCallback()); + m_Importer->SetSpacingCallback( m_Exporter->GetSpacingCallback()); + m_Importer->SetOriginCallback( m_Exporter->GetOriginCallback()); + m_Importer->SetScalarTypeCallback( m_Exporter->GetScalarTypeCallback()); + m_Importer->SetNumberOfComponentsCallback( m_Exporter->GetNumberOfComponentsCallback()); + m_Importer->SetPropagateUpdateExtentCallback( m_Exporter->GetPropagateUpdateExtentCallback()); + m_Importer->SetUpdateDataCallback( m_Exporter->GetUpdateDataCallback()); + m_Importer->SetDataExtentCallback( m_Exporter->GetDataExtentCallback()); + m_Importer->SetBufferPointerCallback( m_Exporter->GetBufferPointerCallback()); + m_Importer->SetCallbackUserData( m_Exporter->GetCallbackUserData()); + +} + + + + +/** + * Destructor + */ +template +VTKImageToImageFilter +::~VTKImageToImageFilter() +{ + if ( m_Exporter ) + { + m_Exporter->Delete(); + m_Exporter = 0; + } +} + + + +/** + * Set a vtkImageData as input + */ +template +void +VTKImageToImageFilter +::SetInput( vtkImageData * inputImage ) +{ + m_Exporter->SetInput( inputImage ); +} + + + +/** + * Get an itk::Image as output + */ +template +const typename VTKImageToImageFilter::OutputImageType * +VTKImageToImageFilter +::GetOutput() const +{ + return m_Importer->GetOutput(); +} + + + + +/** + * Get the exporter filter + */ +template +vtkImageExport * +VTKImageToImageFilter +::GetExporter() const +{ + return m_Exporter; +} + + + +/** + * Get the importer filter + */ +template +typename VTKImageToImageFilter::ImporterFilterType * +VTKImageToImageFilter +::GetImporter() const +{ + return m_Importer; +} + + + + +/** + * Delegate the Update to the importer + */ +template +void +VTKImageToImageFilter +::Update() +{ + m_Importer->Update(); +} + + + + +} // end namespace itk + +#endif + diff --git a/make_meta.sh b/make_meta.sh new file mode 100755 index 0000000..29a496e --- /dev/null +++ b/make_meta.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#This script creates the files necessary for developement: vim tags files, doxygen documentation, ... +ROOT_DIR=$(pwd) +echo $ROOT_DIR +#ROOT_DIR=${HOME}/workspace/vv +cd ${ROOT_DIR} +[ "$1" = "--full" ] && doxygen clitk.doxygen& + +for i in $(find $(pwd) -type d | grep -v "^\.$") +do + cd $i && [ -n "$(find . -maxdepth 1 -name '*.c??')" ] && + { + rm .vimrc + ln -s ${ROOT_DIR}/.vimrc . + ctags -R --languages=c,c++ --exclude=build --langmap=c++:.c++.cc.cp.cpp.cxx.h.h++.hh.hp.hpp.hxx.C.H.txx --exclude=doc --exclude=tests_jef ${ROOT_DIR} & + } +done +wait +echo "done!" diff --git a/tools/.cvsignore b/tools/.cvsignore new file mode 100644 index 0000000..59659d6 --- /dev/null +++ b/tools/.cvsignore @@ -0,0 +1 @@ +*_ggo.* diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 0000000..a1a6f92 --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,78 @@ + +#========================================================= +INCLUDE(${PROJECT_SOURCE_DIR}/cmake/common.cmake) +#========================================================= + +ADD_EXECUTABLE(clitkDicomInfo clitkDicomInfo.cxx clitkDicomInfo_ggo.c) +TARGET_LINK_LIBRARIES(clitkDicomInfo ITKIO clitkCommon) + +ADD_EXECUTABLE(clitkImageInfo clitkImageInfo.cxx clitkImageInfo_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageInfo ITKIO clitkCommon) + +ADD_EXECUTABLE(clitkImageConvert clitkImageConvert.cxx clitkImageConvert_ggo.c ) +TARGET_LINK_LIBRARIES(clitkImageConvert ITKIO clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkImageResample clitkImageResample.cxx clitkImageResample_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageResample ITKIO clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkVFResample clitkVFResample.cxx clitkImageResample_ggo.c) +TARGET_LINK_LIBRARIES(clitkVFResample ITKIO clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkImageArithm clitkImageArithm.cxx clitkImageArithm_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageArithm ITKIO ITKStatistics clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkImageCreate clitkImageCreate.cxx clitkImageCreate_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageCreate ITKIO ITKStatistics clitkCommon) + +ADD_EXECUTABLE(clitkImageFillRegion clitkImageFillRegion.cxx clitkImageFillRegion_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageFillRegion ITKIO ITKStatistics clitkCommon +clitkFilters) + +ADD_EXECUTABLE(clitkZeroVF clitkZeroVF.cxx clitkZeroVF_ggo.c +clitkZeroVFGenericFilter.cxx) +TARGET_LINK_LIBRARIES(clitkZeroVF ITKIO ITKStatistics clitkCommon ) + +ADD_EXECUTABLE(clitkImageExtractLine clitkImageExtractLine.cxx clitkImageExtractLine_ggo.c) +TARGET_LINK_LIBRARIES(clitkImageExtractLine ITKIO ITKStatistics clitkCommon) + +ADD_EXECUTABLE(clitkSplitImage clitkSplitImage.cxx clitkSplitImage_ggo.c + ) +TARGET_LINK_LIBRARIES(clitkSplitImage ITKBasicFilters ITKIO clitkCommon +clitkFilters) + +ADD_EXECUTABLE(clitkVFMerge clitkVFMerge.cxx clitkVFMerge_ggo.c) +TARGET_LINK_LIBRARIES(clitkVFMerge ITKBasicFilters ITKIO clitkCommon ) + +ADD_EXECUTABLE(clitkWriteDicomSeries clitkWriteDicomSeries.cxx clitkWriteDicomSeries_ggo.c) +TARGET_LINK_LIBRARIES(clitkWriteDicomSeries ITKIO clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkAverageTemporalDimension clitkAverageTemporalDimension.cxx clitkAverageTemporalDimension_ggo.c) +TARGET_LINK_LIBRARIES(clitkAverageTemporalDimension ITKIO clitkCommon +clitkFilters) + +ADD_EXECUTABLE(clitkWarpImage clitkWarpImage.cxx clitkWarpImage_ggo.c +clitkWarpImageGenericFilter.cxx) +TARGET_LINK_LIBRARIES(clitkWarpImage ITKBasicFilters ITKIO clitkCommon +) + +ADD_EXECUTABLE(clitkInvertVF clitkInvertVF.cxx clitkInvertVF_ggo.c) +TARGET_LINK_LIBRARIES(clitkInvertVF ITKIO clitkCommon clitkFilters) + +ADD_EXECUTABLE(clitkAffineTransform clitkAffineTransform.cxx clitkAffineTransform_ggo.c) +TARGET_LINK_LIBRARIES(clitkAffineTransform clitkCommon ITKIO clitkFilters) + +ADD_EXECUTABLE(clitkSignalMeanPositionTracking clitkSignalMeanPositionTracking.cxx clitkSignalMeanPositionFilter.cxx clitkEllipse.cxx clitkSignalMeanPositionTracking_ggo.c) +TARGET_LINK_LIBRARIES(clitkSignalMeanPositionTracking clitkCommon ITKIO fftw3) + +ADD_EXECUTABLE(clitkSignalFilter clitkSignalFilter.cxx clitkSignalFilter_ggo.c) +TARGET_LINK_LIBRARIES(clitkSignalFilter ITKIO clitkCommon fftw3) + +ADD_EXECUTABLE(clitkSetBackground clitkSetBackground.cxx +clitkSetBackgroundGenericFilter.cxx clitkSetBackground_ggo.c) +TARGET_LINK_LIBRARIES(clitkSetBackground clitkCommon ITKIO ) + +ADD_EXECUTABLE(clitkGuerreroVentilation clitkGuerreroVentilation.cxx + clitkGuerreroVentilation_ggo.c +) +TARGET_LINK_LIBRARIES(clitkGuerreroVentilation clitkCommon ITKIO ITKBasicFilters +clitkFilters) diff --git a/tools/clitkAffineTransform.cxx b/tools/clitkAffineTransform.cxx new file mode 100644 index 0000000..3717b6b --- /dev/null +++ b/tools/clitkAffineTransform.cxx @@ -0,0 +1,45 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkAffineTransform.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk +#include "clitkAffineTransform_ggo.h" +#include "clitkIO.h" +#include "clitkAffineTransformGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkAffineTransform, args_info); + CLITK_INIT; + + // Filter + typedef clitk::AffineTransformGenericFilter FilterType; + FilterType::Pointer genericFilter = FilterType::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkAffineTransform.ggo b/tools/clitkAffineTransform.ggo new file mode 100644 index 0000000..ac8c2d0 --- /dev/null +++ b/tools/clitkAffineTransform.ggo @@ -0,0 +1,31 @@ +#File clitkAffineTransform.ggo +Package "clitkAffineTransform" +version "1.0" +purpose "Resample with or without affine transform of 2D, 3D, 4D images or vector fields" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off + +section "I/O" +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "like" l "Resample output this image (size, spacing,origin)" string no + +section "Options" +option "size" - "New output size if different from input" int no multiple +option "spacing" - "New output spacing if different from input" double no multiple +option "origin" - "New output origin if different from input" double no multiple +option "matrix" m "Affine matrix (homogene) filename" string no +option "pad" - "Edge padding value" double no default="0.0" + +section "Interpolation" +option "interp" - "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT" int no default="1" +option "interpOrder" - "Order if BLUT or BSpline (0-5)" int no default="3" +option "interpSF" - "Sampling factor if BLUT" int no default="20" +option "interpVF" - "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT" int no default="1" +option "interpVFOrder" - "Order if BLUT or BSpline (0-5)" int no default="3" +option "interpVFSF" - "Sampling factor if BLUT" int no default="20" + + + + diff --git a/tools/clitkAffineTransformGenericFilter.cxx b/tools/clitkAffineTransformGenericFilter.cxx new file mode 100644 index 0000000..828e829 --- /dev/null +++ b/tools/clitkAffineTransformGenericFilter.cxx @@ -0,0 +1,23 @@ +#ifndef clitkAffineTransformGenericFilter_cxx +#define clitkAffineTransformGenericFilter_cxx + +/* ================================================= + * @file clitkAffineTransformGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkAffineTransformGenericFilter.h" + + +namespace clitk +{ + + + +} //end clitk + +#endif //#define clitkAffineTransformGenericFilter_cxx diff --git a/tools/clitkAffineTransformGenericFilter.h b/tools/clitkAffineTransformGenericFilter.h new file mode 100644 index 0000000..2be7ec6 --- /dev/null +++ b/tools/clitkAffineTransformGenericFilter.h @@ -0,0 +1,105 @@ +#ifndef clitkAffineTransformGenericFilter_h +#define clitkAffineTransformGenericFilter_h + +/* ================================================= + * @file clitkAffineTransformGenericFilter.h + * @author jefvdmb@gmail.com + * @date + * + * @brief + * + ===================================================*/ + + +// clitk include +#include "clitkIO.h" +#include "clitkCommon.h" +#include "clitkAffineTransform_ggo.h" +#include "clitkTransformUtilities.h" +#include "clitkGenericInterpolator.h" +#include "clitkGenericVectorInterpolator.h" + +//itk include +#include "itkLightObject.h" +#include "itkAffineTransform.h" +#include "itkResampleImageFilter.h" +#include "itkVectorResampleImageFilter.h" + + +namespace clitk +{ + + + template + class ITK_EXPORT AffineTransformGenericFilter : public itk::LightObject + { + public: + //---------------------------------------- + // ITK + //---------------------------------------- + typedef AffineTransformGenericFilter Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( AffineTransformGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const args_info_type & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + AffineTransformGenericFilter(); + ~AffineTransformGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(std::string PixelType, int Components); + template void UpdateWithDimAndPixelType(); + template void UpdateWithDimAndVectorType(); + + //---------------------------------------- + // Data members + //---------------------------------------- + args_info_type m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkAffineTransformGenericFilter.txx" +#endif + +#endif // #define clitkAffineTransformGenericFilter_h diff --git a/tools/clitkAffineTransformGenericFilter.txx b/tools/clitkAffineTransformGenericFilter.txx new file mode 100644 index 0000000..958b2fa --- /dev/null +++ b/tools/clitkAffineTransformGenericFilter.txx @@ -0,0 +1,342 @@ +#ifndef clitkAffineTransformGenericFilter_txx +#define clitkAffineTransformGenericFilter_txx + +/* ================================================= + * @file clitkAffineTransformGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + template + AffineTransformGenericFilter::AffineTransformGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + template + void AffineTransformGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension, Components; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType, Components); + + + // Call UpdateWithDim + if(Dimension==2) UpdateWithDim<2>(PixelType, Components); + else if(Dimension==3) UpdateWithDim<3>(PixelType, Components); + else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); + else + { + std::cout<<"Error, Only for 2, 3 or 4 Dimensions!!!"< + template + void + AffineTransformGenericFilter::UpdateWithDim(std::string PixelType, int Components) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + else if (Components==3) + { + if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + UpdateWithDimAndVectorType >(); + } + + else std::cerr<<"Number of components is "< + template + void + AffineTransformGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + typename InputImageType::Pointer input= reader->GetOutput(); + + //Filter + typedef itk::ResampleImageFilter< InputImageType,OutputImageType > ResampleFilterType; + typename ResampleFilterType::Pointer resampler = ResampleFilterType::New(); + + // Matrix + typename itk::Matrix matrix; + if (m_ArgsInfo.matrix_given) + { + matrix= clitk::ReadMatrix(m_ArgsInfo.matrix_arg); + if (m_Verbose) std::cout<<"Reading the matrix..."< rotationMatrix=clitk::GetRotationalPartMatrix(matrix); + typename itk::Vector translationPart= clitk::GetTranslationPartMatrix(matrix); + + // Transform + typedef itk::AffineTransform AffineTransformType; + typename AffineTransformType::Pointer affineTransform=AffineTransformType::New(); + affineTransform->SetMatrix(rotationMatrix); + affineTransform->SetTranslation(translationPart); + + // Interp + typedef clitk::GenericInterpolator GenericInterpolatorType; + typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New(); + genericInterpolator->SetArgsInfo(m_ArgsInfo); + + // Properties + if (m_ArgsInfo.like_given) + { + typename InputReaderType::Pointer likeReader=InputReaderType::New(); + likeReader->SetFileName(m_ArgsInfo.like_arg); + likeReader->Update(); + resampler->SetOutputParametersFromImage(likeReader->GetOutput()); + } + else + { + //Size + typename OutputImageType::SizeType outputSize; + if (m_ArgsInfo.size_given) + { + for(unsigned int i=0; i< Dimension; i++) + outputSize[i]=m_ArgsInfo.size_arg[i]; + } + else outputSize=input->GetLargestPossibleRegion().GetSize(); + std::cout<<"Setting the size to "<GetSpacing(); + std::cout<<"Setting the spacing to "<GetOrigin(); + std::cout<<"Setting the origin to "<SetSize( outputSize ); + resampler->SetOutputSpacing( outputSpacing ); + resampler->SetOutputOrigin( outputOrigin ); + + } + + resampler->SetInput( input ); + resampler->SetTransform( affineTransform ); + resampler->SetInterpolator( genericInterpolator->GetInterpolatorPointer()); + resampler->SetDefaultPixelValue( static_cast(m_ArgsInfo.pad_arg) ); + + try + { + resampler->Update(); + } + catch(itk::ExceptionObject) + { + std::cerr<<"Error resampling the image"<GetOutput(); + + // Output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + + } + + //------------------------------------------------------------------- + // Update with the number of dimensions and the pixeltype (components) + //------------------------------------------------------------------- + template + template + void AffineTransformGenericFilter::UpdateWithDimAndVectorType() + { + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + typename InputImageType::Pointer input= reader->GetOutput(); + + //Filter + typedef itk::VectorResampleImageFilter< InputImageType,OutputImageType, double > ResampleFilterType; + typename ResampleFilterType::Pointer resampler = ResampleFilterType::New(); + + // Matrix + typename itk::Matrix matrix; + if (m_ArgsInfo.matrix_given) + matrix= clitk::ReadMatrix(m_ArgsInfo.matrix_arg); + else + matrix.SetIdentity(); + if (m_Verbose) std::cout<<"Using the following matrix:"< rotationMatrix=clitk::GetRotationalPartMatrix(matrix); + typename itk::Vector translationPart= clitk::GetTranslationPartMatrix(matrix); + + // Transform + typedef itk::AffineTransform AffineTransformType; + typename AffineTransformType::Pointer affineTransform=AffineTransformType::New(); + affineTransform->SetMatrix(rotationMatrix); + affineTransform->SetTranslation(translationPart); + + // Interp + typedef clitk::GenericVectorInterpolator GenericInterpolatorType; + typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New(); + genericInterpolator->SetArgsInfo(m_ArgsInfo); + + // Properties + if (m_ArgsInfo.like_given) + { + typename InputReaderType::Pointer likeReader=InputReaderType::New(); + likeReader->SetFileName(m_ArgsInfo.like_arg); + likeReader->Update(); + resampler->SetSize( likeReader->GetOutput()->GetLargestPossibleRegion().GetSize() ); + resampler->SetOutputSpacing( likeReader->GetOutput()->GetSpacing() ); + resampler->SetOutputOrigin( likeReader->GetOutput()->GetOrigin() ); + } + else + { + //Size + typename OutputImageType::SizeType outputSize; + if (m_ArgsInfo.size_given) + { + for(unsigned int i=0; i< Dimension; i++) + outputSize[i]=m_ArgsInfo.size_arg[i]; + } + else outputSize=input->GetLargestPossibleRegion().GetSize(); + std::cout<<"Setting the size to "<GetSpacing(); + std::cout<<"Setting the spacing to "<GetOrigin(); + std::cout<<"Setting the origin to "<SetSize( outputSize ); + resampler->SetOutputSpacing( outputSpacing ); + resampler->SetOutputOrigin( outputOrigin ); + + } + + resampler->SetInput( input ); + resampler->SetTransform( affineTransform ); + resampler->SetInterpolator( genericInterpolator->GetInterpolatorPointer()); + resampler->SetDefaultPixelValue( static_cast(m_ArgsInfo.pad_arg) ); + + try + { + resampler->Update(); + } + catch(itk::ExceptionObject) + { + std::cerr<<"Error resampling the image"<GetOutput(); + + // Output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + + } + + +} //end clitk + +#endif //#define clitkAffineTransformGenericFilter_txx diff --git a/tools/clitkAverageTemporalDimension.cxx b/tools/clitkAverageTemporalDimension.cxx new file mode 100644 index 0000000..fb50ce3 --- /dev/null +++ b/tools/clitkAverageTemporalDimension.cxx @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkAverageTemporalDimension.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk +#include "clitkAverageTemporalDimension_ggo.h" +#include "clitkIO.h" +#include "clitkAverageTemporalDimensionGenericFilter.h" + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkAverageTemporalDimension, args_info); + CLITK_INIT; + + // Filter + typedef clitk::AverageTemporalDimensionGenericFilter FilterType; + FilterType::Pointer genericFilter = FilterType::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkAverageTemporalDimension.ggo b/tools/clitkAverageTemporalDimension.ggo new file mode 100644 index 0000000..f8b3342 --- /dev/null +++ b/tools/clitkAverageTemporalDimension.ggo @@ -0,0 +1,12 @@ +#File clitkAverageTemporalDimension.ggo +Package "clitkAverageTemporalDimension" +version "1.0" +purpose "Average the last dimension to an (n-1)D image. Input is either nD or multiple (n-1)D image or DVF" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off + +option "input" i "Input image filename" string yes multiple +option "output" o "Output image filename" string yes + + diff --git a/tools/clitkAverageTemporalDimensionGenericFilter.cxx b/tools/clitkAverageTemporalDimensionGenericFilter.cxx new file mode 100644 index 0000000..da9a9c6 --- /dev/null +++ b/tools/clitkAverageTemporalDimensionGenericFilter.cxx @@ -0,0 +1,24 @@ +#ifndef clitkAverageTemporalDimensionGenericFilter_cxx +#define clitkAverageTemporalDimensionGenericFilter_cxx + +/* ================================================= + * @file clitkAverageTemporalDimensionGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkAverageTemporalDimensionGenericFilter.h" + + +namespace clitk +{ + + + + +} //end clitk + +#endif //#define clitkAverageTemporalDimensionGenericFilter_cxx diff --git a/tools/clitkAverageTemporalDimensionGenericFilter.h b/tools/clitkAverageTemporalDimensionGenericFilter.h new file mode 100644 index 0000000..08820b2 --- /dev/null +++ b/tools/clitkAverageTemporalDimensionGenericFilter.h @@ -0,0 +1,97 @@ +#ifndef clitkAverageTemporalDimensionGenericFilter_h +#define clitkAverageTemporalDimensionGenericFilter_h + +/* ================================================= + * @file clitkAverageTemporalDimensionGenericFilter.h + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk include +#include "clitkIO.h" +#include "clitkCommon.h" +#include "clitkAverageTemporalDimension_ggo.h" + +//itk include +#include "itkLightObject.h" + +namespace clitk +{ + + template + class ITK_EXPORT AverageTemporalDimensionGenericFilter : public itk::LightObject + { + public: + //---------------------------------------- + // ITK + //---------------------------------------- + typedef AverageTemporalDimensionGenericFilter Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( AverageTemporalDimensionGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const args_info_type & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg[0]; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + AverageTemporalDimensionGenericFilter(); + ~AverageTemporalDimensionGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(const std::string PixelType, const int Components); + template void UpdateWithDimAndPixelType(); + + + //---------------------------------------- + // Data members + //---------------------------------------- + args_info_type m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkAverageTemporalDimensionGenericFilter.txx" +#endif + +#endif // #define clitkAverageTemporalDimensionGenericFilter_h diff --git a/tools/clitkAverageTemporalDimensionGenericFilter.txx b/tools/clitkAverageTemporalDimensionGenericFilter.txx new file mode 100644 index 0000000..525f0dd --- /dev/null +++ b/tools/clitkAverageTemporalDimensionGenericFilter.txx @@ -0,0 +1,227 @@ +#ifndef clitkAverageTemporalDimensionGenericFilter_txx +#define clitkAverageTemporalDimensionGenericFilter_txx + +/* ================================================= + * @file clitkAverageTemporalDimensionGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + template + AverageTemporalDimensionGenericFilter::AverageTemporalDimensionGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + template + void AverageTemporalDimensionGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension, Components; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType, Components); + + + // Call UpdateWithDim + if (m_ArgsInfo.input_given>1) Dimension+=1; + if(Dimension==2) UpdateWithDim<2>(PixelType, Components); + else if(Dimension==3)UpdateWithDim<3>(PixelType, Components); + else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); + else + { + std::cout<<"Error, Only for 2, 3 or 4D!!!"< + template + void + AverageTemporalDimensionGenericFilter::UpdateWithDim(const std::string PixelType, const int Components) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + // else if (Components==2) + // { + // if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + // UpdateWithDimAndPixelType >(); + // } + + else if (Components==3) + { + if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + UpdateWithDimAndPixelType >(); + } + + // else if (Components==4) + // { + // if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + // UpdateWithDimAndPixelType >(); + // } + else std::cerr<<"Number of components is "< + template + void + AverageTemporalDimensionGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + typename InputImageType::Pointer input; + + if (m_ArgsInfo.input_given ==1 ) + { + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + input= reader->GetOutput(); + } + + else + { + // Read and join multiple inputs + if (m_Verbose) std::cout< filenames; + for(unsigned int i=0; i ImageReaderType; + typename ImageReaderType::Pointer reader= ImageReaderType::New(); + reader->SetFileNames(filenames); + reader->Update(); + input =reader->GetOutput(); + } + + + // Output properties + typename OutputImageType::RegionType region; + typename OutputImageType::RegionType::SizeType size; + typename OutputImageType::IndexType index; + typename OutputImageType::SpacingType spacing; + typename OutputImageType::PointType origin; + typename InputImageType::RegionType region4D=input->GetLargestPossibleRegion(); + typename InputImageType::RegionType::SizeType size4D=region4D.GetSize(); + typename InputImageType::IndexType index4D=region4D.GetIndex(); + typename InputImageType::SpacingType spacing4D=input->GetSpacing(); + typename InputImageType::PointType origin4D=input->GetOrigin(); + + for (unsigned int i=0; i< Dimension-1; i++) + { + size[i]=size4D[i]; + index[i]=index4D[i]; + spacing[i]=spacing4D[i]; + origin[i]=origin4D[i]; + } + region.SetSize(size); + region.SetIndex(index); + typename OutputImageType::Pointer output= OutputImageType::New(); + output->SetRegions(region); + output->SetSpacing(spacing); + output->SetOrigin(origin); + output->Allocate(); + + + // Region iterators + typedef itk::ImageRegionIterator IteratorType; + std::vector iterators(size4D[Dimension-1]); + for (unsigned int i=0; i< size4D[Dimension-1]; i++) + { + typename InputImageType::RegionType regionIt=region4D; + typename InputImageType::RegionType::SizeType sizeIt=regionIt.GetSize(); + sizeIt[Dimension-1]=1; + regionIt.SetSize(sizeIt); + typename InputImageType::IndexType indexIt=regionIt.GetIndex(); + indexIt[Dimension-1]=i; + regionIt.SetIndex(indexIt); + iterators[i]=IteratorType(input, regionIt); + } + + typedef itk::ImageRegionIterator OutputIteratorType; + OutputIteratorType avIt(output, output->GetLargestPossibleRegion()); + + // Average + PixelType vector; + PixelType zeroVector=itk::NumericTraits::Zero; + //zeroVector.Fill(0.0); + while (!(iterators[0]).IsAtEnd()) + { + vector=zeroVector; + for (unsigned int i=0; i WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + + } + + +}//end clitk + +#endif //#define clitkAverageTemporalDimensionGenericFilter_txx diff --git a/tools/clitkCorrelationRatioImageToImageMetric.h b/tools/clitkCorrelationRatioImageToImageMetric.h new file mode 100644 index 0000000..d82d960 --- /dev/null +++ b/tools/clitkCorrelationRatioImageToImageMetric.h @@ -0,0 +1,165 @@ + +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkCorrelationRatioImageToImageMetric.h + Language: C++ + Date: $Date: 2010/01/06 13:31:56 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + + +#ifndef __clitkCorrelationRatioImageToImageMetric_h +#define __clitkCorrelationRatioImageToImageMetric_h + +/** + * @file clitkCorrelationRatioImageToImageMetric.h + * @author Jef Vandemeulebroucke + * @date July 30 18:14:53 2007 + * + * @brief Compute the correlation ratio between 2 images + * + * + */ + +/* This computes the correlation ratio between 2 images + * + * This class is templated over the FixedImage type and the MovingImage + * type. + * + * The fixed and moving images are set via methods SetFixedImage() and + * SetMovingImage(). This metric makes use of user specified Transform and + * Interpolator. The Transform is used to map points from the fixed image to + * the moving image domain. The Interpolator is used to evaluate the image + * intensity at user specified geometric points in the moving image. + * The Transform and Interpolator are set via methods SetTransform() and + * SetInterpolator(). + * + * The method GetValue() computes of the mutual information + * while method GetValueAndDerivative() computes + * both the mutual information and its derivatives with respect to the + * transform parameters. + * + * The calculations are based on the method of Alexis Roche. + * + * The number of intensity bins used can be set through the SetNumberOfBins() method + * + * On Initialize(), we find the min and max intensities in the fixed image and compute the width of + * the intensity bins. The data structures which hold the bins and related measures are initialised. + */ + + +#include "itkImageToImageMetric.h" +#include "itkCovariantVector.h" +#include "itkPoint.h" + +using namespace itk; +namespace clitk +{ + +template < class TFixedImage, class TMovingImage > +class ITK_EXPORT CorrelationRatioImageToImageMetric: + public ImageToImageMetric< TFixedImage, TMovingImage> +{ +public: + + /** Standard class typedefs. */ + typedef CorrelationRatioImageToImageMetric Self; + typedef ImageToImageMetric Superclass; + + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(CorrelationRatioImageToImageMetric, ImageToImageMetric); + + + /** Types transferred from the base class */ + typedef typename Superclass::RealType RealType; + typedef typename Superclass::TransformType TransformType; + typedef typename Superclass::TransformPointer TransformPointer; + typedef typename Superclass::TransformParametersType TransformParametersType; + typedef typename Superclass::TransformJacobianType TransformJacobianType; + typedef typename Superclass::GradientPixelType GradientPixelType; + + typedef typename Superclass::MeasureType MeasureType; + typedef typename Superclass::DerivativeType DerivativeType; + typedef typename Superclass::FixedImageType FixedImageType; + typedef typename Superclass::MovingImageType MovingImageType; + typedef typename Superclass::FixedImageConstPointer FixedImageConstPointer; + typedef typename Superclass::MovingImageConstPointer MovingImageConstPointer; + + + /** + * Initialize the Metric by + * (1) making sure that all the components are present and plugged + * together correctly, + * (3) allocate memory for bin data structures. */ + virtual void Initialize(void) throw ( ExceptionObject ); + + /** Get the derivatives of the match measure. */ + void GetDerivative( const TransformParametersType & parameters, + DerivativeType & derivative ) const; + + /** Get the value for single valued optimizers. */ + MeasureType GetValue( const TransformParametersType & parameters ) const; + + /** Get value and derivatives for multiple valued optimizers. */ + void GetValueAndDerivative( const TransformParametersType & parameters, + MeasureType& Value, DerivativeType& Derivative ) const; + + /** Number of bins to used in the calculation. Typical value is 50. */ + itkSetClampMacro( NumberOfBins, unsigned long, + 1, NumericTraits::max() ); + itkGetConstReferenceMacro( NumberOfBins, unsigned long); + +protected: + CorrelationRatioImageToImageMetric(); + virtual ~CorrelationRatioImageToImageMetric() {}; + +private: + CorrelationRatioImageToImageMetric(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + + //the min and max in the fixed image intensity range + double m_FixedImageMin; + + //The bin size in intensity + double m_FixedImageBinSize; + + //The number of pixels in the fixed image bins are stored in a vector + mutable std::vector m_NumberOfPixelsCountedPerBin; + + //The mMSVPB and the mSMVPB are stored in vectors of realtype + typedef float ValueType; + typedef std::vector MeasurePerBinType; + mutable MeasurePerBinType m_mMSVPB; + mutable MeasurePerBinType m_mSMVPB; + unsigned long m_NumberOfBins; + + +}; + +} // end namespace itk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkCorrelationRatioImageToImageMetric.txx" +#endif + +#endif + + + diff --git a/tools/clitkCorrelationRatioImageToImageMetric.txx b/tools/clitkCorrelationRatioImageToImageMetric.txx new file mode 100644 index 0000000..f95574f --- /dev/null +++ b/tools/clitkCorrelationRatioImageToImageMetric.txx @@ -0,0 +1,482 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkCorrelationRatioImageToImageMetric.h + Language: C++ + Date: $Date: 2010/01/06 13:31:57 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef _clitkCorrelationRatioImageToImageMetric_txx +#define _clitkCorrelationRatioImageToImageMetric_txx + +/** + * @file clitkCorrelationRatioImageToImageMetric.txx + * @author Jef Vandemeulebroucke + * @date July 30 18:14:53 2007 + * + * @brief Compute the correlation ratio between 2 images + * + * + */ + +#include "clitkCorrelationRatioImageToImageMetric.h" +#include "itkImageRegionConstIteratorWithIndex.h" +#include "itkImageRegionConstIterator.h" +#include "itkImageRegionIterator.h" + +namespace clitk +{ + +/* + * Constructor + */ +template +CorrelationRatioImageToImageMetric +::CorrelationRatioImageToImageMetric() +{ + m_NumberOfBins = 50; + +} + +template +void +CorrelationRatioImageToImageMetric +::Initialize(void) throw ( ExceptionObject ) +{ + + this->Superclass::Initialize(); + + // Compute the minimum and maximum for the FixedImage over the FixedImageRegion. + // We can't use StatisticsImageFilter to do this because the filter computes the min/max for the largest possible region + double fixedImageMin = NumericTraits::max(); + double fixedImageMax = NumericTraits::NonpositiveMin(); + + typedef ImageRegionConstIterator FixedIteratorType; + FixedIteratorType fixedImageIterator( + this->m_FixedImage, this->GetFixedImageRegion() ); + + for ( fixedImageIterator.GoToBegin(); + !fixedImageIterator.IsAtEnd(); ++fixedImageIterator ) + { + + double sample = static_cast( fixedImageIterator.Get() ); + + if ( sample < fixedImageMin ) + { + fixedImageMin = sample; + } + + if ( sample > fixedImageMax ) + { + fixedImageMax = sample; + } + } + + // Compute binsize for the fixedImage + m_FixedImageBinSize = ( fixedImageMax - fixedImageMin ) / m_NumberOfBins; + m_FixedImageMin=fixedImageMin; + //Allocate mempry and initialise the fixed image bin + m_NumberOfPixelsCountedPerBin.resize( m_NumberOfBins, 0 ); + m_mMSVPB.resize( m_NumberOfBins, 0.0 ); + m_mSMVPB.resize( m_NumberOfBins, 0.0 ); +} + + +/* + * Get the match Measure + */ +template +typename CorrelationRatioImageToImageMetric::MeasureType +CorrelationRatioImageToImageMetric +::GetValue( const TransformParametersType & parameters ) const +{ + + itkDebugMacro("GetValue( " << parameters << " ) "); + + FixedImageConstPointer fixedImage = this->m_FixedImage; + + if( !fixedImage ) + { + itkExceptionMacro( << "Fixed image has not been assigned" ); + } + + typedef itk::ImageRegionConstIteratorWithIndex FixedIteratorType; + + + FixedIteratorType ti( fixedImage, this->GetFixedImageRegion() ); + + typename FixedImageType::IndexType index; + + MeasureType measure = itk::NumericTraits< MeasureType >::Zero; + + this->m_NumberOfPixelsCounted = 0; + this->SetTransformParameters( parameters ); + + + //temporary measures for the calculation + RealType mSMV=0; + RealType mMSV=0; + + while(!ti.IsAtEnd()) + { + + index = ti.GetIndex(); + + typename Superclass::InputPointType inputPoint; + fixedImage->TransformIndexToPhysicalPoint( index, inputPoint ); + + // Verify that the point is in the fixed Image Mask + if( this->m_FixedImageMask && !this->m_FixedImageMask->IsInside( inputPoint ) ) + { + ++ti; + continue; + } + + typename Superclass::OutputPointType transformedPoint = this->m_Transform->TransformPoint( inputPoint ); + + //Verify that the point is in the moving Image Mask + if( this->m_MovingImageMask && !this->m_MovingImageMask->IsInside( transformedPoint ) ) + { + ++ti; + continue; + } + + // Verify is the interpolated value is in the buffer + if( this->m_Interpolator->IsInsideBuffer( transformedPoint ) ) + { + //Accumulate calculations for the correlation ratio + //For each pixel the is in both masks and the buffer we adapt the following measures: + //movingMeanSquaredValue mMSV; movingSquaredMeanValue mSMV; + //movingMeanSquaredValuePerBin[i] mSMVPB; movingSquaredMeanValuePerBin[i] mSMVPB + //NumberOfPixelsCounted, NumberOfPixelsCountedPerBin[i] + + //get the value of the moving image + const RealType movingValue = this->m_Interpolator->Evaluate( transformedPoint ); + // for the variance of the overlapping moving image we accumulate the following measures + const RealType movingSquaredValue=movingValue*movingValue; + mMSV+=movingSquaredValue; + mSMV+=movingValue; + + //get the fixed value + const RealType fixedValue = ti.Get(); + + //check in which bin the fixed value belongs, get the index + const double fixedImageBinTerm = (fixedValue - m_FixedImageMin) / m_FixedImageBinSize; + const unsigned int fixedImageBinIndex = static_cast( vcl_floor(fixedImageBinTerm ) ); + //adapt the measures per bin + this->m_mMSVPB[fixedImageBinIndex]+=movingSquaredValue; + this->m_mSMVPB[fixedImageBinIndex]+=movingValue; + //increase the fixed image bin and the total pixel count + this->m_NumberOfPixelsCountedPerBin[fixedImageBinIndex]+=1; + this->m_NumberOfPixelsCounted++; + } + + ++ti; + } + + if( !this->m_NumberOfPixelsCounted ) + { + itkExceptionMacro(<<"All the points mapped to outside of the moving image"); + } + else + { + + //apdapt the measures per bin + for (unsigned int i=0; i< m_NumberOfBins; i++ ){ + if (this->m_NumberOfPixelsCountedPerBin[i]>0){ + measure+=(this->m_mMSVPB[i]-((this->m_mSMVPB[i]*this->m_mSMVPB[i])/this->m_NumberOfPixelsCountedPerBin[i])); + } + } + + //Normalize with the global measures + measure /= (mMSV-((mSMV*mSMV)/ this->m_NumberOfPixelsCounted)); + return measure; + + } +} + + + + + +/* + * Get the Derivative Measure + */ +template < class TFixedImage, class TMovingImage> +void +CorrelationRatioImageToImageMetric +::GetDerivative( const TransformParametersType & parameters, + DerivativeType & derivative ) const +{ + + itkDebugMacro("GetDerivative( " << parameters << " ) "); + + if( !this->GetGradientImage() ) + { + itkExceptionMacro(<<"The gradient image is null, maybe you forgot to call Initialize()"); + } + + FixedImageConstPointer fixedImage = this->m_FixedImage; + + if( !fixedImage ) + { + itkExceptionMacro( << "Fixed image has not been assigned" ); + } + + const unsigned int ImageDimension = FixedImageType::ImageDimension; + + + typedef itk::ImageRegionConstIteratorWithIndex< + FixedImageType> FixedIteratorType; + + typedef itk::ImageRegionConstIteratorWithIndex< + ITK_TYPENAME Superclass::GradientImageType> GradientIteratorType; + + + FixedIteratorType ti( fixedImage, this->GetFixedImageRegion() ); + + typename FixedImageType::IndexType index; + + this->m_NumberOfPixelsCounted = 0; + + this->SetTransformParameters( parameters ); + + const unsigned int ParametersDimension = this->GetNumberOfParameters(); + derivative = DerivativeType( ParametersDimension ); + derivative.Fill( itk::NumericTraits::Zero ); + + ti.GoToBegin(); + + while(!ti.IsAtEnd()) + { + + index = ti.GetIndex(); + + typename Superclass::InputPointType inputPoint; + fixedImage->TransformIndexToPhysicalPoint( index, inputPoint ); + + if( this->m_FixedImageMask && !this->m_FixedImageMask->IsInside( inputPoint ) ) + { + ++ti; + continue; + } + + typename Superclass::OutputPointType transformedPoint = this->m_Transform->TransformPoint( inputPoint ); + + if( this->m_MovingImageMask && !this->m_MovingImageMask->IsInside( transformedPoint ) ) + { + ++ti; + continue; + } + + if( this->m_Interpolator->IsInsideBuffer( transformedPoint ) ) + { + const RealType movingValue = this->m_Interpolator->Evaluate( transformedPoint ); + + const TransformJacobianType & jacobian = + this->m_Transform->GetJacobian( inputPoint ); + + + const RealType fixedValue = ti.Value(); + this->m_NumberOfPixelsCounted++; + const RealType diff = movingValue - fixedValue; + + // Get the gradient by NearestNeighboorInterpolation: + // which is equivalent to round up the point components. + typedef typename Superclass::OutputPointType OutputPointType; + typedef typename OutputPointType::CoordRepType CoordRepType; + typedef ContinuousIndex + MovingImageContinuousIndexType; + + MovingImageContinuousIndexType tempIndex; + this->m_MovingImage->TransformPhysicalPointToContinuousIndex( transformedPoint, tempIndex ); + + typename MovingImageType::IndexType mappedIndex; + for( unsigned int j = 0; j < MovingImageType::ImageDimension; j++ ) + { + mappedIndex[j] = static_cast( vnl_math_rnd( tempIndex[j] ) ); + } + + const GradientPixelType gradient = + this->GetGradientImage()->GetPixel( mappedIndex ); + + for(unsigned int par=0; par::Zero; + for(unsigned int dim=0; dimm_NumberOfPixelsCounted ) + { + itkExceptionMacro(<<"All the points mapped to outside of the moving image"); + } + else + { + for(unsigned int i=0; im_NumberOfPixelsCounted; + } + } + +} + + +/* + * Get both the match Measure and the Derivative Measure + */ +template +void +CorrelationRatioImageToImageMetric +::GetValueAndDerivative(const TransformParametersType & parameters, + MeasureType & value, DerivativeType & derivative) const +{ + + itkDebugMacro("GetValueAndDerivative( " << parameters << " ) "); + + if( !this->GetGradientImage() ) + { + itkExceptionMacro(<<"The gradient image is null, maybe you forgot to call Initialize()"); + } + + FixedImageConstPointer fixedImage = this->m_FixedImage; + + if( !fixedImage ) + { + itkExceptionMacro( << "Fixed image has not been assigned" ); + } + + const unsigned int ImageDimension = FixedImageType::ImageDimension; + + typedef itk::ImageRegionConstIteratorWithIndex< + FixedImageType> FixedIteratorType; + + typedef itk::ImageRegionConstIteratorWithIndex< + ITK_TYPENAME Superclass::GradientImageType> GradientIteratorType; + + + FixedIteratorType ti( fixedImage, this->GetFixedImageRegion() ); + + typename FixedImageType::IndexType index; + + MeasureType measure = NumericTraits< MeasureType >::Zero; + + this->m_NumberOfPixelsCounted = 0; + + this->SetTransformParameters( parameters ); + + const unsigned int ParametersDimension = this->GetNumberOfParameters(); + derivative = DerivativeType( ParametersDimension ); + derivative.Fill( NumericTraits::Zero ); + + ti.GoToBegin(); + + while(!ti.IsAtEnd()) + { + + index = ti.GetIndex(); + + typename Superclass::InputPointType inputPoint; + fixedImage->TransformIndexToPhysicalPoint( index, inputPoint ); + + if( this->m_FixedImageMask && !this->m_FixedImageMask->IsInside( inputPoint ) ) + { + ++ti; + continue; + } + + typename Superclass::OutputPointType transformedPoint = this->m_Transform->TransformPoint( inputPoint ); + + if( this->m_MovingImageMask && !this->m_MovingImageMask->IsInside( transformedPoint ) ) + { + ++ti; + continue; + } + + if( this->m_Interpolator->IsInsideBuffer( transformedPoint ) ) + { + const RealType movingValue = this->m_Interpolator->Evaluate( transformedPoint ); + + const TransformJacobianType & jacobian = + this->m_Transform->GetJacobian( inputPoint ); + + + const RealType fixedValue = ti.Value(); + this->m_NumberOfPixelsCounted++; + + const RealType diff = movingValue - fixedValue; + + measure += diff * diff; + + // Get the gradient by NearestNeighboorInterpolation: + // which is equivalent to round up the point components. + typedef typename Superclass::OutputPointType OutputPointType; + typedef typename OutputPointType::CoordRepType CoordRepType; + typedef ContinuousIndex + MovingImageContinuousIndexType; + + MovingImageContinuousIndexType tempIndex; + this->m_MovingImage->TransformPhysicalPointToContinuousIndex( transformedPoint, tempIndex ); + + typename MovingImageType::IndexType mappedIndex; + for( unsigned int j = 0; j < MovingImageType::ImageDimension; j++ ) + { + mappedIndex[j] = static_cast( vnl_math_rnd( tempIndex[j] ) ); + } + + const GradientPixelType gradient = + this->GetGradientImage()->GetPixel( mappedIndex ); + + for(unsigned int par=0; par::Zero; + for(unsigned int dim=0; dimm_NumberOfPixelsCounted ) + { + itkExceptionMacro(<<"All the points mapped to outside of the moving image"); + } + else + { + for(unsigned int i=0; im_NumberOfPixelsCounted; + } + measure /= this->m_NumberOfPixelsCounted; + } + + value = measure; + +} + +} // end namespace itk + + +#endif + diff --git a/tools/clitkDicomInfo.cxx b/tools/clitkDicomInfo.cxx new file mode 100644 index 0000000..ff17d76 --- /dev/null +++ b/tools/clitkDicomInfo.cxx @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------- + +Program: clitk +Module: $RCSfile: clitkDicomInfo.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:31:56 $ +Version: $Revision: 1.1 $ + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +/** + ------------------------------------------------- + * @file clitkDicomInfo.cxx + * @author Laurent ZAGNI + * @date 27 Jul 2006 + -------------------------------------------------*/ + +// clitk includes +#include "clitkDicomInfo_ggo.h" +#include "clitkCommon.h" + +// itk (gdcm) include +#include "gdcmFile.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // init command line + GGO(clitkDicomInfo, args_info); + + // check arg + if (args_info.inputs_num == 0) return 0; + + // Loop files + for(unsigned int i=0; iSetFileName(args_info.inputs[i]); + header->SetMaxSizeLoadEntry(16384); + header->Load(); + header->Print(); + } + + // this is the end my friend + return 0; +} +//-------------------------------------------------------------------- diff --git a/tools/clitkDicomInfo.ggo b/tools/clitkDicomInfo.ggo new file mode 100644 index 0000000..02351ea --- /dev/null +++ b/tools/clitkDicomInfo.ggo @@ -0,0 +1,5 @@ +# file DicomInfos.ggo +Package "clitk" +version "read and print Dicom header" + +option "config" - "Config file" string no diff --git a/tools/clitkEllipse.cxx b/tools/clitkEllipse.cxx new file mode 100644 index 0000000..a546b79 --- /dev/null +++ b/tools/clitkEllipse.cxx @@ -0,0 +1,285 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkEllipse.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:56 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#include "clitkEllipse.h" + +typedef itk::Vector Vector2d; +typedef itk::Vector Vector6d; +typedef itk::Matrix Matrix6x6d; +typedef itk::Matrix Matrix3x3d; + +//--------------------------------------------------------------------- +clitk::Ellipse::Ellipse():a((*this)[0]), b((*this)[1]), + c((*this)[2]), d((*this)[3]), + e((*this)[4]), f((*this)[5]) { +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +clitk::Ellipse::Ellipse(const Ellipse & e):a((*this)[0]), b((*this)[1]), + c((*this)[2]), d((*this)[3]), + e((*this)[4]), f((*this)[5]) { + for(int i=0; i<7; i++) (*this)[i] = e[i]; +} + +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +Vector2d clitk::Ellipse::ComputeCenter() { + // See http://mathworld.wolfram.com/Ellipse.html + // see Ruan 2008 + Vector2d center; + center[0] = (2*c*d - b*e)/(b*b-4*a*c); + center[1] = (2*a*e - b*d)/(b*b-4*a*c); + return center; +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +Vector2d clitk::Ellipse::ComputeSemiAxeLengths() { + // See http://www.geometrictools.com/Documentation/InformationAboutEllipses.pdf + Vector2d axis; + Vector2d center = ComputeCenter(); + double & k1 = center[0]; + double & k2 = center[1]; + double mu = 1.0/(a*k1*k1 + b*k1*k2 + c*k2*k2 - f); + double m11 = mu * a; + double m12 = mu * 0.5 * b; + double m22 = mu * c; + double l1 = ( (m11+m22) + sqrt((m11-m22)*(m11-m22)+4*m12*m12) )/2.0; + assert(l1>0.0); + axis[1] = 1.0/sqrt(l1); + double l2 = ((m11+m22)-sqrt((m11-m22)*(m11-m22)+4*m12*m12))/2.0; + assert(l2>0.0); + axis[0] = 1.0/sqrt(l2); + return axis; +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +double clitk::Ellipse::ComputeAngleInRad() { + // See http://www.geometrictools.com/Documentation/InformationAboutEllipses.pdf + double theta; + if (b==0) { + if (a extremaX(2); + std::vector extremaY(2); + double x0 = 0.0; + double y0 = 0.0; + extremaX[0] = extremaY[0] = numeric_limits::max(); + extremaX[1] = extremaY[1] = -numeric_limits::max(); + for(unsigned int i=0; i extremaX[1]) extremaX[1] = inputX[i]; + if (inputY[i] < extremaY[0]) extremaY[0] = inputY[i]; + if (inputY[i] > extremaY[1]) extremaY[1] = inputY[i]; + x0 += inputX[i]; + y0 += inputY[i]; + } + x0 /= n; + y0 /= n; + + // initialisation with an ellipse more small than real points extends + double ax1 = (extremaX[1]-extremaX[0])/2.0; + double ax2 = (extremaY[1]-extremaY[0])/2.0; + if (ax2 >= ax1) ax2 = 0.99*ax1; + SetCenterAndSemiAxes(x0, y0, ax1, ax2); + + // Initialisation of C + C.Fill(0.0); + C(0,0) = 0; C(0,1) = 0; C(0,2) = 2; + C(1,0) = 0; C(1,1) = -1; C(1,2) = 0; + C(2,0) = 2; C(2,1) = 0; C(2,2) = 0; + Ct = C.GetVnlMatrix().transpose(); + + // Compute initial S + UpdateSMatrix(0,n, inputX, inputY); +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +void clitk::Ellipse::CopyBlock(Matrix6x6d & out, const Matrix6x6d & in, + int ox, int oy, int l, double factor) { + for(int x=ox; xc) { + std::cerr << "Error major axis should be r1, not r2 (r1=" << r1 + << " r2=" << r2 << ")" << std::endl; + exit(0); + } + d = (-2.0*x0)/(r1*r1); + e = (-2.0*y0)/(r2*r2); + f = (x0*x0)/(r1*r1) + (y0*y0)/(r2*r2) - 1.0; + GetVnlVector().normalize(); +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +void clitk::Ellipse::UpdateSMatrix(unsigned int begin, unsigned int n, + clitk::Signal & inputX, clitk::Signal & inputY) { + // Initialisation of z + z.resize(n); + int j = 0; + for(unsigned int i=begin; i +#include +#include + +namespace clitk { + + //--------------------------------------------------------------------- + class Ellipse : public itk::Vector { + public: + typedef itk::Vector Vector2d; + typedef itk::Vector Vector6d; + typedef itk::Matrix Matrix6x6d; + typedef itk::Matrix Matrix3x3d; + + Ellipse(); + Ellipse(const Ellipse & e); + void InitialiseEllipseFitting(double eta, unsigned int n, clitk::Signal & inputX, clitk::Signal & inputY); + double EllipseFittingNextIteration(); + Vector2d ComputeCenter(); + Vector2d ComputeSemiAxeLengths(); + double ComputeAngleInRad(); + void SetCenterAndSemiAxes(double x0, double y0, double r1, double r2); + void Copy(const Vector6d & a); + double GetEta() { return mEta; } + void UpdateSMatrix(unsigned int begin, unsigned int n, + clitk::Signal & inputX, clitk::Signal & inputY); + + protected: + double mEta; + double & a; + double & b; + double & c; + double & d; + double & e; + double & f; + Matrix6x6d C; + Matrix6x6d Ct; + Matrix6x6d W; + Matrix6x6d Wt; + Matrix6x6d S; + Matrix6x6d Sinv; + Matrix6x6d St; + std::vector z; + clitk::Signal * mInputX; + clitk::Signal * mInputY; + + void CopyBlock(Matrix6x6d & out, const Matrix6x6d & in, + int ox, int oy, int l, double factor=1.0); + void CopyBlock(Matrix6x6d & out, const Matrix3x3d & in, + int ox, int oy, double factor=1.0); + Matrix3x3d GetBlock3x3(const Matrix6x6d & M, int x, int y); + + }; + //--------------------------------------------------------------------- + +} // end namespace + +#endif diff --git a/tools/clitkGuerreroVentilation.cxx b/tools/clitkGuerreroVentilation.cxx new file mode 100644 index 0000000..c234ec9 --- /dev/null +++ b/tools/clitkGuerreroVentilation.cxx @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------=*/ + +/** + ------------------------------------------------= + * @file clitkGuerreroVentilation.cxx + * @author Joël Schaerer + * @date 20 April 2009 + ------------------------------------------------=*/ + +// clitk include +#include "clitkGuerreroVentilation_ggo.h" +#include "clitkGuerreroVentilationGenericFilter.h" +#include "clitkIO.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkGuerreroVentilation, args_info); + CLITK_INIT; + + // Read image dimension + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg); + //unsigned int dim = header->GetNumberOfDimensions(); + + // Check parameters + // Main filter + clitk::GuerreroVentilationGenericFilter filter; + filter.SetInputFilename(args_info.input_arg); + filter.AddInputFilename(args_info.ref_arg); + filter.SetOutputFilename(args_info.output_arg); + filter.SetBloodCorrectionFactor(args_info.factor_arg); + filter.SetUseCorrectFormula(args_info.correct_flag); + filter.Update(); + + // this is the end my friend + return 0; +} // end main diff --git a/tools/clitkGuerreroVentilation.ggo b/tools/clitkGuerreroVentilation.ggo new file mode 100644 index 0000000..26a4ff8 --- /dev/null +++ b/tools/clitkGuerreroVentilation.ggo @@ -0,0 +1,13 @@ +#File clitkGuerreroVentilation.ggo +Package "clitkGuerreroVentilation" +version "1.0" +purpose "Compute the ventilation image from a motion compensated image and the reference (end-expiration) image" + + +option "config" - "Config file" string no +option "input" i "Input image filename" string yes +option "ref" r "Reference image filename" string yes +option "output" o "Output image base filename" string yes +option "factor" f "Blood mass correction factor" double yes +option "verbose" v "Verbose" flag off +option "correct" c "Use the correct formula instead of the original one" flag off diff --git a/tools/clitkImageArithm.cxx b/tools/clitkImageArithm.cxx new file mode 100644 index 0000000..0b7b36e --- /dev/null +++ b/tools/clitkImageArithm.cxx @@ -0,0 +1,110 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEARITHM_CXX +#define CLITKIMAGEARITHM_CXX + +/** + ------------------------------------------------- + * @file clitkImageArithm.cxx + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + -------------------------------------------------*/ + +// clitk include +#include "clitkImageArithm_ggo.h" +#include "clitkImageArithmGenericFilter.h" +#include "clitkIO.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageArithm, args_info); + CLITK_INIT; + + // Check that we have either the 2nd image or the scalar + if ((args_info.input2_given) && (args_info.scalar_given)) { + std::cerr << "ERROR : you cannot provide both --scalar and --input2 option" << std::endl; + exit(-1); + } + if ((!args_info.input2_given) && (!args_info.scalar_given)) { + if (args_info.operation_arg < 5) { + std::cerr << "Such operation need the --scalar option." << std::endl; + exit(-1); + } + } + + // Read input image header1 to check image dimension + itk::ImageIOBase::Pointer header1 = clitk::readImageHeader(args_info.input1_arg); + unsigned int dim1 = header1->GetNumberOfDimensions(); + std::string pixelTypeName = header1->GetComponentTypeAsString(header1->GetComponentType()); + + // Options for arithm operation between 2 images + if (args_info.input2_given) { + + itk::ImageIOBase::Pointer header2 = clitk::readImageHeader(args_info.input2_arg); + unsigned int dim2 = header2->GetNumberOfDimensions(); + std::string pixelTypeName2 = header2->GetComponentTypeAsString(header1->GetComponentType()); + + // Check dimension + if (dim1 != dim2) { + std::cerr << "Images should have the same dimension : " <GetDimensions(1)<< std::endl; + std::cerr << "Dimensions X and Y of input2: = " << header2->GetDimensions(0) <<" "<< header2->GetDimensions(1)<< std::endl; + exit(-1); + } + }//end for + if (dim1 == 3) { + if (header1->GetDimensions(2) < header2->GetDimensions(2)) { + std::cerr << "ERROR: Z size in input1 is greater than in input2. " << std::endl; + std::cerr << "Size input1 : " << header1->GetDimensions(0) << " " << header1->GetDimensions(1)<< " " << header1->GetDimensions(2) << std::endl; + std::cerr << "Size input2 : " << header2->GetDimensions(0) << " " << header2->GetDimensions(1)<< " " << header2->GetDimensions(2) << std::endl; + } + } + } //end if operation between 2 images + + // Creation of a generic filter + clitk::ImageArithmGenericFilter::Pointer filter = clitk::ImageArithmGenericFilter::New(); + filter->AddInputFilename(args_info.input1_arg); + if (args_info.input2_given) filter->AddInputFilename(args_info.input2_arg); + else filter->SetScalar(args_info.scalar_arg); + //if (args_info.binary_given) filter->SetBinaryMaskFilename(args_info.binary_arg); + filter->SetTypeOfOperation(args_info.operation_arg); + filter->SetDefaultPixelValue(args_info.pixelValue_arg); + filter->SetOutputFilename(args_info.output_arg); + + // Go ! + filter->Update(); + + // this is the end my friend + return 0; +} // end main + +#endif //define CLITKIMAGEARITHM_CXX diff --git a/tools/clitkImageArithm.ggo b/tools/clitkImageArithm.ggo new file mode 100644 index 0000000..d3d5ef6 --- /dev/null +++ b/tools/clitkImageArithm.ggo @@ -0,0 +1,17 @@ +#File clitkImageArithm.ggo +Package "clitkImageArithm" +version "1.0" +purpose "Perform an arithmetic operation (+-*/ ...) using two images or using an image and a scalar value." + + +option "config" - "Config file" string no +option "input1" i "Input first image filename" string yes +option "input2" j "Input second image filename" string no +option "output" o "Output image filename" string yes + +option "scalar" s "Scalar value" double no +option "operation" t "Type of operation : \n With another image : 0=add, 1=multiply, 2=divide,\n 3=max, 4=min, 5=absdiff, 6=squareddiff, 7=difference, 8=relativ diff\n For 'scalar' : 0=add, 1=multiply, 2=inverse,\n 3=max, 4=min 5=absval 6=squareval\n 7=log 8=exp 9=sqrt" int default="0" no +option "pixelValue" - "Default value for NaN/Inf" double default="0.0" no +option "verbose" v "Verbose" flag off + +#option "binary" b "Mask for binary operation" string no diff --git a/tools/clitkImageConvert.cxx b/tools/clitkImageConvert.cxx new file mode 100644 index 0000000..ccae952 --- /dev/null +++ b/tools/clitkImageConvert.cxx @@ -0,0 +1,71 @@ +/*------------------------------------------------------------------------- + +Program: clitk +Module: $RCSfile: clitkImageConvert.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:31:56 $ +Version: $Revision: 1.1 $ + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGECONVERT_CXX +#define CLITKIMAGECONVERT_CXX + +/** + ------------------------------------------------- + * @file clitkImageConvert.cxx + * @author David Sarrut + * @date 03 Jul 2006 10:28:32 + -------------------------------------------------*/ + +// clitk include +#include "clitkImageConvert_ggo.h" +#include "clitkIO.h" +#include "clitkImageCommon.h" +#include "clitkImageConvertGenericFilter.h" + +//-------------------------------------------------------------------= +int main(int argc, char * argv[]) { + + // init command line + GGO(clitkImageConvert, args_info); + CLITK_INIT; + + // Get list of filenames + std::vector l; + for(unsigned int i=0; iSetInputFilenames(l); + filter->SetIOVerbose(args_info.verbose_flag); + filter->SetOutputFilename(args_info.output_arg); + if (args_info.type_given) filter->SetOutputPixelType(args_info.type_arg); + + // Go ! + filter->Update(); + + // this is the end my friend + return 0; +} +//-------------------------------------------------------------------= + +#endif /* end #define CLITKIMAGECONVERT_CXX */ + diff --git a/tools/clitkImageConvert.ggo b/tools/clitkImageConvert.ggo new file mode 100644 index 0000000..e3c7507 --- /dev/null +++ b/tools/clitkImageConvert.ggo @@ -0,0 +1,10 @@ +# file clitkImageConvert.ggo +Package "clitkImageConvert" +version "1.0" +purpose "Convert an image into another image.\n\tAllow to change the file format and/or the pixel type. \n\tKnown file formats 2D: jpeg png bmp tif mhd hdr vox dcm \n\tKnown file formats 3D: mhd vox hdr dcm\n\tKnown file formats 4D: mhd \n\tKnown images: 2D 3D or 4D, schar, uchar, short, ushort, int, float and double \nYou can also specify multiple inputs (i.e. \"-i a.mhd,b.mhd,c.mhd\" or \"a.mhd b.mhd ...\" without the '-i' option) having the same size and dimension to build a (n+1)D image." + +option "config" - "Config file" string no +option "input" i "Input image filename" string no multiple +option "output" o "Output image filename" string yes +option "type" t "Output type (float, ushort ...)" string no +option "verbose" v "Verbose" flag off diff --git a/tools/clitkImageCreate.cxx b/tools/clitkImageCreate.cxx new file mode 100644 index 0000000..21e6072 --- /dev/null +++ b/tools/clitkImageCreate.cxx @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------------= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------=*/ + +#ifndef CLITKIMAGECREATE_CXX +#define CLITKIMAGECREATE_CXX + +/** + ------------------------------------------------= + * @file clitkImageCreate.cxx + * @author David Sarrut + * @date 14 Oct 2008 08:37:53 + ------------------------------------------------=*/ + +// clitk include +#include "clitkImageCreate_ggo.h" +#include "clitkCommon.h" +#include "clitkImageCommon.h" +#include "clitkIO.h" + +template +void NewFilledImage(int * size, float * spacing, double * origin, + double value,typename ImageType::Pointer output) +{ + static const unsigned int Dim = ImageType::GetImageDimension(); + typename ImageType::SizeType mSize; + mSize.Fill (0); + for(unsigned int i=0; iSetRegions(mRegion); + output->SetSpacing(mSpacing); + output->Allocate(); + typename ImageType::PointType mOrigin; + for(unsigned int i=0; iSetOrigin(mOrigin); + typedef typename ImageType::PixelType PixelType; + PixelType p = clitk::PixelTypeDownCast(value); + output->FillBuffer(p); +} + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageCreate, args_info); + CLITK_INIT; + + // Check --like option + int dim; + if (args_info.like_given) { + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.like_arg); + dim = header->GetNumberOfDimensions(); + //mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + //mNbOfComponents = header->GetNumberOfComponents(); + args_info.size_given = dim; + args_info.size_arg = new int[dim]; + args_info.spacing_given = dim; + args_info.spacing_arg = new float[dim]; + args_info.origin_given = dim; + args_info.origin_arg = new double[dim]; + + for(int i=0; iGetDimensions(i); + args_info.spacing_arg[i] = header->GetSpacing(i); + args_info.origin_arg[i]= header->GetOrigin(i); + } + } + + // Check dimension + if ((args_info.size_given > 4) || (args_info.size_given <2)) { + std::cerr << "ERROR : only 2D/3D/4D image ! Please give 2 or 3 or 4 number to the --size option." << std::endl; + exit(-1); + } + dim = args_info.size_given; + + // origin + std::vector origin; + origin.resize(dim); + for(int i=0; i spacing; + spacing.resize(dim); + if (args_info.spacing_given == 1) { + for(int i=0; i ImageType; + ImageType::Pointer output = ImageType::New(); + NewFilledImage(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output); + clitk::writeImage(output, args_info.output_arg); + } + if (dim == 3) { + const int Dim=3; + typedef itk::Image ImageType; + ImageType::Pointer output = ImageType::New(); + NewFilledImage(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output); + clitk::writeImage(output, args_info.output_arg); + } + if (dim == 4) { + const int Dim=4; + typedef itk::Image ImageType; + ImageType::Pointer output = ImageType::New(); + NewFilledImage(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output); + clitk::writeImage(output, args_info.output_arg); + } + + // this is the end my friend + return 0; +} // end main + +#endif //define CLITKIMAGEARITHM_CXX diff --git a/tools/clitkImageCreate.ggo b/tools/clitkImageCreate.ggo new file mode 100644 index 0000000..6ba482c --- /dev/null +++ b/tools/clitkImageCreate.ggo @@ -0,0 +1,21 @@ +#File clitkImageCreate.ggo +Package "clitkImageCreate" +version "1.0" +purpose "Create a new singled value filled image (pixeltype is float, use clitkImageConvert to change)." + +option "config" - "Config file" string no +option "output" o "Output image filename" string yes + +option "like" l "Size/spacing like this other image" string no + +option "size" - "Number of pixels of each coordinate" int no multiple +option "spacing" - "Spacing in mm between pixels" float no multiple +option "origin" - "Origin in mm" double no multiple + +option "value" - "Value for all voxels" float default="0.0" no +option "verbose" v "Verbose" flag off + +#option "random" r "Random fill" flag off +#option "max" - "Max random fill" double default="100.0" no +#option "min" - "Min random fill" double default="0.0" no + diff --git a/tools/clitkImageExtractLine.cxx b/tools/clitkImageExtractLine.cxx new file mode 100644 index 0000000..94590a0 --- /dev/null +++ b/tools/clitkImageExtractLine.cxx @@ -0,0 +1,121 @@ +/*------------------------------------------------------------------------- + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + -------------------------------------------------------------------------*/ + +#ifndef CLITKIMAGEEXTRACTLINE_CXX +#define CLITKIMAGEEXTRACTLINE_CXX + +/** + ------------------------------------------------- + * @file clitkImageExtractLine.cxx + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + -------------------------------------------------*/ + +// clitk include +#include "clitkImageExtractLine_ggo.h" +#include "clitkIO.h" +#include + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageExtractLine, args_info); + CLITK_INIT; + + // Declare main types + typedef float PixelType; + const unsigned int Dimension=3; + typedef itk::Image ImageType; + + // Check options + if (args_info.firstIndex_given != Dimension) { + std::cerr << "Please give " << Dimension << "values to --firstIndex option" << std::endl; + exit(0); + } + if (args_info.lastIndex_given != Dimension) { + std::cerr << "Please give " << Dimension << "values to --lastIndex option" << std::endl; + exit(0); + } + + // Read image + ImageType::Pointer input = clitk::readImage(args_info.input_arg, args_info.verbose_flag); + + // Get first and last index + typedef ImageType::IndexType IndexType; + IndexType firstIndex; + IndexType lastIndex; + ImageType::SpacingType spacing = input->GetSpacing(); + double length = 0.0; + for(unsigned int i=0; i depth; + std::vector values; + itk::LineConstIterator iter(input, firstIndex, lastIndex); + iter.GoToBegin(); + while (!iter.IsAtEnd()) { + values.push_back(iter.Get()); + ++iter; + } + double step = length/values.size(); + + // If isocenter is used + double isoDistance = 0.0; + if (args_info.isocenter_given) { // isoCenter is in mm + IndexType isoCenter; + for(unsigned int i=0; i + * @date 23 Feb 2008 + ------------------------------------------------=*/ + +// clitk include +#include "clitkImageFillRegion_ggo.h" +#include "clitkImageFillRegionGenericFilter.h" +#include "clitkIO.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageFillRegion, args_info); + CLITK_INIT; + + // Read image dimension + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg); + unsigned int dim = header->GetNumberOfDimensions(); + + // Main filter + clitk::ImageFillRegionGenericFilter filter; + filter.SetInputFilename(args_info.input_arg); + filter.SetOutputFilename(args_info.output_arg); + filter.SetFillPixelValue(args_info.value_arg); + + if(!args_info.ellips_flag && !args_info.rect_flag) + { + std::cerr << "ERROR : No type of region specified!"<< std::endl; + exit(-1); + } + + if(args_info.ellips_flag && args_info.rect_flag) + { + std::cerr << "ERROR : Multiple types of regions specified!"<< std::endl; + exit(-1); + } + + if(args_info.rect_flag) + { + if (args_info.size_given && args_info.start_given) { + // Check parameters + if (args_info.size_given != dim) { + std::cerr << "ERROR : image has " << dim << "dimensions, --size should have the same number of values." << std::endl; + exit(-1); + } + if (args_info.start_given != dim) { + std::cerr << "ERROR : image has " << dim << "dimensions, --size should have the same number of values." << std::endl; + exit(-1); + } + filter.SetRegion(args_info.size_arg, args_info.start_arg); + } + else { + std::cerr << "ERROR : both size and start should be given!"<< std::endl; + exit(-1); + } + } + + if(args_info.ellips_flag) + { + + std::vector c, a; + if (args_info.center_given) + { + if (args_info.center_given != dim) + { + std::cerr << "ERROR : image has " << dim << "dimensions, --center should have the same number of values." << std::endl; + exit(-1); + } + for(unsigned int i=0; i + * @date 02 Jul 2006 + =================================================*/ + +// clitk include +#include "clitkImageInfo_ggo.h" +#include "clitkIO.h" + +//==================================================================== +int main(int argc, char * argv[]) { + + // init command line + GGO(clitkImageInfo, args_info); + CLITK_INIT; + + // check arg + if (args_info.inputs_num == 0) return 0; + + // read Header + for(unsigned int i=0; i + * @date 23 Feb 2008 08:37:53 + ------------------------------------------------=*/ + +// clitk +#include "clitkImageResample_ggo.h" +#include "clitkIO.h" +#include "clitkImageResampleGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageResample, args_info); + CLITK_INIT; + + // Read input image header to check image dimension + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg); + unsigned int dim = header->GetNumberOfDimensions(); + std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + + // Print image info if verbose + if (args_info.verbose_flag) { + std::cout << "Input image <" << args_info.input_arg << "> is "; + clitk::printImageHeader(header, std::cout); + std::cout << std::endl; + } + + // Get input size/spacing + std::vector inputSize; + std::vector inputSpacing; + inputSize.resize(dim); + inputSpacing.resize(dim); + for(unsigned int i=0; iGetSpacing(i); + inputSize[i] = header->GetDimensions(i); + } + + // Get options + std::vector outputSize; + std::vector outputSpacing; + outputSize.resize(dim); + outputSpacing.resize(dim); + + // Check options + if (!args_info.size_given && !args_info.spacing_given) { + std::cerr << "Please indicate output size or spacing." << std::endl; + exit(0); + } + + // Check options + if (args_info.size_given && args_info.spacing_given) { + std::cerr << "Please indicate only output size or spacing, not both." << std::endl; + exit(0); + } + + // Size is given and not spacing + if (args_info.size_given && !args_info.spacing_given) { + if (args_info.size_given != dim) { + std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl; + exit(0); + } + for(unsigned int i=0; i sigma; + sigma.resize(args_info.gauss_given); + std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin()); + if (args_info.gauss_given) { + if (args_info.gauss_given != dim) { + if (args_info.gauss_given == 1) { + sigma.resize(dim); + for(unsigned int i=0; iSetInputFilename(args_info.input_arg); + filter->SetOutputSize(outputSize); + filter->SetOutputSpacing(outputSpacing); + filter->SetInterpolationName(args_info.interp_arg); + filter->SetBSplineOrder(args_info.order_arg); + filter->SetBLUTSampling(args_info.sampling_arg); + if (args_info.gauss_given) + filter->SetGaussianSigma(sigma); + filter->SetOutputFilename(args_info.output_arg); + + // Go ! + filter->Update(); + + // this is the end my friend + return 0; +}// end main +//-------------------------------------------------------------------- + +#endif /* end #define CLITKIMAGERESAMPLE_CXX */ diff --git a/tools/clitkImageResample.ggo b/tools/clitkImageResample.ggo new file mode 100644 index 0000000..5d9dde5 --- /dev/null +++ b/tools/clitkImageResample.ggo @@ -0,0 +1,17 @@ +#File clitkImageResample.ggo +Package "clitkImageResample" +version "1.0" +purpose "Resample an image. You can specify the interpolation, you can apply a Gaussian filter before." + +option "config" - "Config file" string no +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "verbose" v "Verbose" flag off +option "interp" - "Interpolation type: {nn, linear, bspline, blut}" string no default="nn" +option "order" b "BSpline ordre (range 0-5)" int no default="3" +option "sampling" s "BLUT sampling value" int no default="30" +option "size" - "Number of pixels of each coordonate" int no multiple default="0" +option "spacing" - "Spacing in mm between pixels" float no multiple default="0.0" +option "gauss" g "Apply Gaussian before (sigma in mm)" float no multiple default="1.0" +option "default" d "Default pixel value" float no default = "0.0" + diff --git a/tools/clitkImageWarp.ggo b/tools/clitkImageWarp.ggo new file mode 100644 index 0000000..a6c8853 --- /dev/null +++ b/tools/clitkImageWarp.ggo @@ -0,0 +1,16 @@ +#File clitkImageWarp.ggo +#Author: Jef Vandemeulebroucke +#Date : Tue 13 August 19.35 + +Package "clitk" +Version "Read an Image (short, char or float; 2D or 3D) and a vector field (float, 2D or 3D) and deform the input through backward or forward mapping." + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "vf" - "Vector field filename" string yes +option "forward" f "Use forward warping (only linear interp)" flag off +option "spacing" s "The output spacing: 0=like the VF, 1= like the input image (linear interpolation of the VF prior to warp)" int no default="0" +option "interp" - "Type of interpolation used for the warping: 0=nearest neighbor, 1= linear, 2= cubic Bspline" int no default="1" +option "pad" - "Edge padding value" float no default="0.0" diff --git a/tools/clitkInvertVF.cxx b/tools/clitkInvertVF.cxx new file mode 100644 index 0000000..2360adf --- /dev/null +++ b/tools/clitkInvertVF.cxx @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkInvertVF.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk +#include "clitkInvertVF_ggo.h" +#include "clitkIO.h" +#include "clitkInvertVFGenericFilter.h" + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkInvertVF, args_info); + CLITK_INIT; + + // Filter + typedef clitk::InvertVFGenericFilter FilterType; + FilterType::Pointer genericFilter = FilterType::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkInvertVF.ggo b/tools/clitkInvertVF.ggo new file mode 100644 index 0000000..da3ca8b --- /dev/null +++ b/tools/clitkInvertVF.ggo @@ -0,0 +1,17 @@ +#File clitkInvertVF.ggo +#Author: Jef Vandemeulebroucke +#Date : Tue 15 June 16.35 + +Package "clitk" +Version "Read a DVF and invert it using a linear splat to the target, or by subsumpling the input grid and matching it to the output grid" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off +option "threads" - "Number of threads (default=min(8, #CPU))" int no + +option "input" i "Input VF filename" string yes +option "output" o "Output VF filename" string yes +option "type" t "Type of filter: 0=clitk (fast forward splat using linear kernels), 1= itk (grid subsumpling with controllable precision)" int no default="0" +option "threadSafe" - "Clitk: use thread safe algorithm" flag off +option "pad" p "Clitk: edge padding value (1 or N number of values!, defautls to zeros)" double multiple no +option "sampling" s "Itk: subsampling factor" int no default="20" diff --git a/tools/clitkInvertVFGenericFilter.cxx b/tools/clitkInvertVFGenericFilter.cxx new file mode 100644 index 0000000..47d7923 --- /dev/null +++ b/tools/clitkInvertVFGenericFilter.cxx @@ -0,0 +1,22 @@ +#ifndef clitkInvertVFGenericFilter_cxx +#define clitkInvertVFGenericFilter_cxx + +/* ================================================= + * @file clitkInvertVFGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkInvertVFGenericFilter.h" + + +namespace clitk +{ + + +} //end clitk + +#endif //#define clitkInvertVFGenericFilter_cxx diff --git a/tools/clitkInvertVFGenericFilter.h b/tools/clitkInvertVFGenericFilter.h new file mode 100644 index 0000000..6559843 --- /dev/null +++ b/tools/clitkInvertVFGenericFilter.h @@ -0,0 +1,99 @@ +#ifndef clitkInvertVFGenericFilter_h +#define clitkInvertVFGenericFilter_h + +/* ================================================= + * @file clitkInvertVFGenericFilter.h + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk include +#include "clitkIO.h" +#include "clitkCommon.h" +#include "clitkInvertVF_ggo.h" +#include "clitkInvertVFFilter.h" + +//itk include +#include "itkLightObject.h" +#include "itkInverseDeformationFieldImageFilter.h" + +namespace clitk +{ + + template + class ITK_EXPORT InvertVFGenericFilter : public itk::LightObject + { + public: + //---------------------------------------- + // ITK + //---------------------------------------- + typedef InvertVFGenericFilter Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( InvertVFGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const args_info_type & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + InvertVFGenericFilter(); + ~InvertVFGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(std::string PixelType); + template void UpdateWithDimAndPixelType(); + + + //---------------------------------------- + // Data members + //---------------------------------------- + args_info_type m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkInvertVFGenericFilter.txx" +#endif + +#endif // #define clitkInvertVFGenericFilter_h diff --git a/tools/clitkInvertVFGenericFilter.txx b/tools/clitkInvertVFGenericFilter.txx new file mode 100644 index 0000000..c2bcc27 --- /dev/null +++ b/tools/clitkInvertVFGenericFilter.txx @@ -0,0 +1,166 @@ +#ifndef clitkInvertVFGenericFilter_txx +#define clitkInvertVFGenericFilter_txx + +/* ================================================= + * @file clitkInvertVFGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + template + InvertVFGenericFilter::InvertVFGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + template + void InvertVFGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType); + + + // Call UpdateWithDim + if(Dimension==2) UpdateWithDim<2>(PixelType); + else if(Dimension==3) UpdateWithDim<3>(PixelType); + // else if (Dimension==4)UpdateWithDim<4>(PixelType); + else + { + std::cout<<"Error, Only for 2 or 3 Dimensions!!!"< + template + void + InvertVFGenericFilter::UpdateWithDim(std::string PixelType) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + // } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + // else if (PixelType == "unsigned_char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + // else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType >(); + // } + } + + + //------------------------------------------------------------------- + // Update with the number of dimensions and the pixeltype + //------------------------------------------------------------------- + template + template + void + InvertVFGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + typename InputImageType::Pointer input= reader->GetOutput(); + + // Filter + typename OutputImageType::Pointer output; + switch (m_ArgsInfo.type_arg) + { + + // clitk filter + case 0: + { + // Create the InvertVFFilter + typedef clitk::InvertVFFilter FilterType; + typename FilterType::Pointer filter =FilterType::New(); + filter->SetInput(input); + filter->SetVerbose(m_Verbose); + if (m_ArgsInfo.threads_given) filter->SetNumberOfThreads(m_ArgsInfo.threads_arg); + if (m_ArgsInfo.pad_given) + { + PixelType pad; + if (m_ArgsInfo.pad_given != (pad.GetNumberOfComponents()) ) + pad.Fill(m_ArgsInfo.pad_arg[0]); + else + for(unsigned int i=0; iSetThreadSafe(m_ArgsInfo.threadSafe_flag); + filter->Update(); + output=filter->GetOutput(); + + break; + } + + case 1: + { + // Create the InverseDeformationFieldFilter + typedef itk::InverseDeformationFieldImageFilter FilterType; + typename FilterType::Pointer filter =FilterType::New(); + filter->SetInput(input); + filter->SetOutputOrigin(input->GetOrigin()); + filter->SetOutputSpacing(input->GetSpacing()); + filter->SetSize(input->GetLargestPossibleRegion().GetSize()); + filter->SetSubsamplingFactor(m_ArgsInfo.sampling_arg); + filter->Update(); + output=filter->GetOutput(); + + break; + } + + } + + // Output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + + } + + +}//end clitk + +#endif //#define clitkInvertVFGenericFilter_txx diff --git a/tools/clitkRigidRegistration.cxx b/tools/clitkRigidRegistration.cxx new file mode 100644 index 0000000..9bad7d1 --- /dev/null +++ b/tools/clitkRigidRegistration.cxx @@ -0,0 +1,110 @@ +/*------------------------------------------------------------------------- + + Program: clitk + Module: $RCSfile: clitkRigidRegistration.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:57 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +/** + ------------------------------------------------- + * @file clitkRigidRegistration.cxx + * @author Jef Vandemeulebroucke + * @date 14 August 2007 + * + * @brief Perform a rigid registration between 2 images + * + -------------------------------------------------*/ + + +// clitk include +#include "clitkIO.h" +#include "clitkImageCommon.h" +#include "clitkRigidRegistration_ggo.h" +#include "clitkRigidRegistrationGenericFilter.h" + +using namespace clitk; +using namespace std; + + +int main( int argc, char *argv[] ) +{ + //init command line and check options + GGO(args_info); + CLITK_INIT; + + //--------------------------------------------------------------------------- + //Set all the options passed through the commandline + + RigidRegistrationGenericFilter rigidRegistration; + + rigidRegistration.SetVerbose(args_info.verbose_flag); + rigidRegistration.SetGradient(args_info.gradient_flag); + rigidRegistration.SetZeroOrigin(args_info.zero_origin_flag); + + //Input + rigidRegistration.SetFixedImageName(args_info.reference_arg); + rigidRegistration.SetMovingImageName(args_info.object_arg); + rigidRegistration.SetFixedImageMaskGiven(args_info.mask_given); + if (args_info.mask_given) rigidRegistration.SetFixedImageMaskName(args_info.mask_arg); + + //Output + rigidRegistration.SetOutputGiven(args_info.output_given); + if (args_info.output_given) rigidRegistration.SetOutputName(args_info.output_arg); + rigidRegistration.SetCheckerAfterGiven(args_info.checker_after_given); + if (args_info.checker_after_given) rigidRegistration.SetCheckerAfterName(args_info.checker_after_arg); + rigidRegistration.SetCheckerBeforeGiven(args_info.checker_before_given); + if (args_info.checker_before_given) rigidRegistration.SetCheckerBeforeName(args_info.checker_before_arg); + rigidRegistration.SetBeforeGiven(args_info.before_given); + if (args_info.before_given) rigidRegistration.SetBeforeName(args_info.before_arg); + rigidRegistration.SetAfterGiven(args_info.after_given); + if (args_info.after_given) rigidRegistration.SetAfterName(args_info.after_arg); + rigidRegistration.SetMatrixGiven(args_info.matrix_given); + if (args_info.matrix_given) rigidRegistration.SetMatrixName(args_info.matrix_arg); + + //Interp + rigidRegistration.SetInterpType(args_info.interp_arg); + + //Transform + rigidRegistration.SetRotX(args_info.rotX_arg); + rigidRegistration.SetRotY(args_info.rotY_arg); + rigidRegistration.SetRotZ(args_info.rotZ_arg); + rigidRegistration.SetTransX(args_info.transX_arg); + rigidRegistration.SetTransY(args_info.transY_arg); + rigidRegistration.SetTransZ(args_info.transZ_arg); + + //Optimizer + rigidRegistration.SetLevels(args_info.levels_arg); + rigidRegistration.SetIstep(args_info.Istep_arg); + rigidRegistration.SetFstep(args_info.Fstep_arg); + rigidRegistration.SetRelax(args_info.relax_arg); + rigidRegistration.SetInc(args_info.inc_arg); + rigidRegistration.SetDec(args_info.dec_arg); + rigidRegistration.SetIter(args_info.iter_arg); + rigidRegistration.SetRweight(args_info.Rweight_arg); + rigidRegistration.SetTweight(args_info.Tweight_arg); + + //Metric + rigidRegistration.SetMetricType(args_info.metric_arg); + rigidRegistration.SetSamples(args_info.samples_arg); + rigidRegistration.SetBins(args_info.bins_arg); + rigidRegistration.SetRandom(args_info.random_flag); + rigidRegistration.SetStdDev(args_info.stdDev_arg); + + //Preprocessing + rigidRegistration.SetBlur(args_info.blur_arg); + rigidRegistration.SetNormalize(args_info.normalize_flag); + + rigidRegistration.Update(); + +} diff --git a/tools/clitkRigidRegistration.ggo b/tools/clitkRigidRegistration.ggo new file mode 100644 index 0000000..5002e60 --- /dev/null +++ b/tools/clitkRigidRegistration.ggo @@ -0,0 +1,55 @@ +# file clitkRigidRegistration.ggo +Package "clitkRigidRegistration" +version "1.0" +purpose "Compute a rigid registration between two images." + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off +option "gradient" - "If verbose, show gradient at each iteration" flag off + +section "Input (Both images have to be of the same dimension (2 or 3D). For 2D-3D registrations, give the 2D image a third dimension of 1 and set it to the reference image.)" +option "reference" i "Reference or fixed image filename" string yes +option "object" j "Object or moving image filename" string yes +option "mask" m "Mask to placed over the reference image" string no + +section "Output" +option "output" o "Transformed object image filename" string no +option "checker_after" - "Checherboard representation of the transformed object image and reference image" string no +option "checker_before" - "Checherboard representation of the object image and reference image" string no +option "after" - "Difference between the reference image and the transformed object" string no +option "before" - "Difference between the reference image and the original object image" string no +option "matrix" - "Affine matrix (reference to object space) filename " string no + +section "Interpolator" +option "interp" - "Interpolator used during registration: 0=nearestneighbor, 1=linear, 2=bspline" int no default="1" + +section "Transform (Input and Output transformation parameters map the physical space of the fixed or reference image into the physical space of the moving or object image. Positive rotations result in a counter-clockwise rotation for the moving image. Positive translations result in shift along the negative axis for the moving image.)" +option "transX" x "Initial translation in mm along the X axis" float no default="0.0" +option "transY" y "Initial translation in mm along the Y axis" float no default="0.0" +option "transZ" z "Initial translation in mm along the Z axis" float no default="0.0" +option "rotX" X "Initial rotation in rad along the X axis" float no default="0.0" +option "rotY" Y "Initial rotation in rad along the Y axis" float no default="0.0" +option "rotZ" Z "Initial rotation in rad along the Z axis" float no default="0.0" + +section "Optimizer" +option "levels" l "Number of multiresolution levels" int no default="1" +option "Istep" - "Initial stepsize in mm in the first level(to be multiplied with the gradient)" float no default="2.0" +option "Fstep" - "Final stepsize in mm in the first level (to be multiplied with the gradient)" float no default="0.1" +option "relax" - "Relaxation of the stepsize (multiplied each time the gradient changes sign)" float no default="0.7" +option "inc" - "Increment factor x previous stepsize = new stepsize when going to next level" float no default="1.2" +option "dec" - "Decrement factor(:) previous stepsize = new final stepsize when going to next level" float no default="4.0" +option "iter" - "Maximum number of iterations at each level" int no default="200" +option "Rweight" - "Weight of 1° of rotation during optimisation (high weight, less change)" float no default="50.0" +option "Tweight" - "Weight of 1mm of translation during optimisation (high weight, less change)" float no default="1.0" + +section "Metric (Use a high fraction of samples for detailed images (eg. 0.2, 0.5). For smooth images 0.01 might be enough. Use enough bins to cover the dynamique range. Randomizing the samples will make each execution different.)" +option "metric" - "Metric used during registration: 0=MS, 1=MI, 2=Mattes' MI, 3=CR" int no default="0" +option "samples" - "If using MI or Mattes' MI, specify fraction [0, 1] of samples of the reference image" float no default="0.2" +option "bins" - "If using Mattes' MI, specify the number of histogram bins for the PDF estimation of the reference image" int no default="50" +option "random" - "If using Mattes' MI and MI, specify if the set of samples should be taken randomly" flag off +option "stdDev" - "If using MI, specify the standard deviation in mm of the gaussian kernels for both PDF estimations" float no default="0.4" + +section "Preprocessing" +option "normalize" - "Normalize images before registration (not necessary for Mattes' MI)" flag off +option "blur" - "Blur images before registration, use Gaussian with std dev (none by default) " float no default="0.0" +option "zero_origin" - "Reset the input images' origins to zero, to avoid additional shifts according to jef" flag off diff --git a/tools/clitkSetBackground.cxx b/tools/clitkSetBackground.cxx new file mode 100644 index 0000000..3d6ddc8 --- /dev/null +++ b/tools/clitkSetBackground.cxx @@ -0,0 +1,45 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkSetBackground.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk +#include "clitkSetBackground_ggo.h" +#include "clitkIO.h" +#include "clitkSetBackgroundGenericFilter.h" + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkSetBackground,args_info); + CLITK_INIT; + + // Filter + clitk::SetBackgroundGenericFilter::Pointer genericFilter=clitk::SetBackgroundGenericFilter::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkSetBackground.ggo b/tools/clitkSetBackground.ggo new file mode 100644 index 0000000..c69413b --- /dev/null +++ b/tools/clitkSetBackground.ggo @@ -0,0 +1,14 @@ +#File clitkSetBackground.ggo +Package "clitkSetBackground" +version "1.0" +purpose "" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off + +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "mask" m "Mask image filename" string yes +option "outsideValue" p "Outside value" double no default="0.0" +option "maskValue" l "Mask value" double no default="0.0" +option "fg" - "Foreground mode" flag off diff --git a/tools/clitkSetBackgroundGenericFilter.cxx b/tools/clitkSetBackgroundGenericFilter.cxx new file mode 100644 index 0000000..6c007a0 --- /dev/null +++ b/tools/clitkSetBackgroundGenericFilter.cxx @@ -0,0 +1,55 @@ +#ifndef clitkSetBackgroundGenericFilter_cxx +#define clitkSetBackgroundGenericFilter_cxx + +/* ================================================= + * @file clitkSetBackgroundGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkSetBackgroundGenericFilter.h" + + +namespace clitk +{ + + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + SetBackgroundGenericFilter::SetBackgroundGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + void SetBackgroundGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType); + + + // Call UpdateWithDim + if(Dimension==2) UpdateWithDim<2>(PixelType); + else if(Dimension==3) UpdateWithDim<3>(PixelType); + else if (Dimension==4)UpdateWithDim<4>(PixelType); + else + { + std::cout<<"Error, Only for 2 , 3 or 4 Dimensions!!!"< Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( SetBackgroundGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const gengetopt_args_info_clitkSetBackground & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + SetBackgroundGenericFilter(); + ~SetBackgroundGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(std::string PixelType); + template void UpdateWithDimAndPixelType(); + + + //---------------------------------------- + // Data members + //---------------------------------------- + gengetopt_args_info_clitkSetBackground m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkSetBackgroundGenericFilter.txx" +#endif + +#endif // #define clitkSetBackgroundGenericFilter_h diff --git a/tools/clitkSetBackgroundGenericFilter.txx b/tools/clitkSetBackgroundGenericFilter.txx new file mode 100644 index 0000000..16cdfa5 --- /dev/null +++ b/tools/clitkSetBackgroundGenericFilter.txx @@ -0,0 +1,98 @@ +#ifndef clitkSetBackgroundGenericFilter_txx +#define clitkSetBackgroundGenericFilter_txx + +/* ================================================= + * @file clitkSetBackgroundGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + //------------------------------------------------------------------- + // Update with the number of dimensions + //------------------------------------------------------------------- + template + void + SetBackgroundGenericFilter::UpdateWithDim(std::string PixelType) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + + //------------------------------------------------------------------- + // Update with the number of dimensions and the pixeltype + //------------------------------------------------------------------- + template + void + SetBackgroundGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image MaskImageType; + + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + typename InputImageType::Pointer input= reader->GetOutput(); + + // Read the mask + typedef itk::ImageFileReader MaskReaderType; + typename MaskReaderType::Pointer maskReader = MaskReaderType::New(); + maskReader->SetFileName( m_ArgsInfo.mask_arg); + typename MaskImageType::Pointer mask= maskReader->GetOutput(); + + // Filter setting background + typedef clitk::SetBackgroundImageFilter SetBackgroundFilterType; + typename SetBackgroundFilterType::Pointer setBackgroundFilter = SetBackgroundFilterType::New(); + setBackgroundFilter->SetInput(input); + setBackgroundFilter->SetInput2(mask); + if(m_ArgsInfo.fg_flag) setBackgroundFilter->SetForeground(m_ArgsInfo.fg_flag); + if(m_ArgsInfo.maskValue_given) setBackgroundFilter->SetMaskValue(m_ArgsInfo.maskValue_arg); + if(m_ArgsInfo.outsideValue_given) setBackgroundFilter->SetOutsideValue(m_ArgsInfo.outsideValue_arg); + setBackgroundFilter->Update(); + typename InputImageType::Pointer output =setBackgroundFilter->GetOutput(); + + // Output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + + } + + +}//end clitk + +#endif //#define clitkSetBackgroundGenericFilter_txx diff --git a/tools/clitkSignalFilter.cxx b/tools/clitkSignalFilter.cxx new file mode 100644 index 0000000..fad1021 --- /dev/null +++ b/tools/clitkSignalFilter.cxx @@ -0,0 +1,83 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkSignalFilter.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:56 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKSIGNALFILTER_CXX +#define CLITKSIGNALFILTER_CXX +/** + ================================================= + * @file clitkSignalFilter.cxx + * @author Jef Vandemeulebroucke + * @date 23 April 2008 + * + * @brief "Apply a filter to the signal" + =================================================*/ + +// clitk include +#include "clitkSignalFilter_ggo.h" +#include "clitkSignal.h" +#include "clitkIO.h" +#include "clitkIOCommon.h" + +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkSignalFilter, args_info); + CLITK_INIT; + + //input + clitk::Signal input; + input.Read (args_info.input_arg); + clitk::Signal input2; + if (args_info.input2_given) input2.Read(args_info.input2_arg); + + double p1 = args_info.p1_arg; + double p2 = args_info.p2_arg; + + //process + + if( args_info.multiply_flag) input*=input2; + if( args_info.divide_flag) input/=input2; + if( args_info.norm_flag) input=input.Normalize (p1, p2); + if( args_info.highPass_flag) input=input.HighPassFilter(p1,p2); + if( args_info.lowPass_flag) input=input.LowPassFilter(p1,p2); + if( args_info.detect_flag) input=input.DetectLocalExtrema(static_cast(p1)); + if( args_info.limPhase_flag) input=input.LimPhase(); + if( args_info.monPhase_flag) input=input.MonPhase(); + if( args_info.monPhaseDE_flag) input=input.MonPhaseDE(p1,p2); + if( args_info.average_flag) input=input.MovingAverageFilter(static_cast (p1)); + if( args_info.ssd_flag) std::cout<<"The sqrt of the mean SSD is "<< input.SSD(input2)<(p1),static_cast(p2)); + if( args_info.limit_flag) input=input.LimitSignalRange(); +// if( args_info._flag) input=input; +// if( args_info._flag) input=input; +// if( args_info._flag) input=input; +// if( args_info._flag) input=input; + // if( args_info._flag) input=input; + // if( args_info._flag) input=input; + // if( args_info._flag) input=input; + + if (args_info.output_given) input.Write(args_info.output_arg); + + return EXIT_SUCCESS; + +} + +#endif diff --git a/tools/clitkSignalFilter.ggo b/tools/clitkSignalFilter.ggo new file mode 100644 index 0000000..5067fcd --- /dev/null +++ b/tools/clitkSignalFilter.ggo @@ -0,0 +1,27 @@ +#File clitkSignalFilter.ggo +Package "clitk" +Version "Pass an filter on an signal" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off +option "input" i "Input grid filename" string yes +option "input2" j "Second Input grid filename" string no +option "p1" - "p1" double no +option "p2" - "p2" double no +option "output" o "Output grid filename" string no +option "multiply" - "Mulitply values of input 1 with input 2 (same size)" flag off +option "divide" - "Divide values of input 1 with input 2 (same size, zeros are skipped)" flag off +option "norm" n "Normalize signal between p1=min and p2=max" flag off +option "rescale" - "Rescale signal to p1=mean and p2=StdDev" flag off +option "highPass" - "High Pass Filter: p1=sampPeriod, p2= cutOffFrequecy" flag off +option "lowPass" - "Low Pass Filter: p1=sampPeriod, p2= cutOffFrequecy" flag off +option "detect" - "Detect Local extrema: local window= 2*p1+1, p1>=1" flag off +option "limPhase" - "Convert extrema signal into limited phase [0, 1[" flag off +option "monPhase" - "Convert extrema signal into monotone phase [0, inf[" flag off +option "monPhaseDE" - "Convert extrema signal into scattered monotone phase, taking into account both extrema (p1=eEPhaseValue,p2=eIPhaseValue)" flag off +option "average" - "Moving Average filter: window= 2*p1+1 [0, inf[" flag off +option "ssd" - "Calculate the sqrt of the mean SSD between i and j" flag off +option "gauss" - "Pass a small gauss-like kernel (121-mask)" flag off +option "interp" - "Linearly interpolate scattered values (unknow values=-1)" flag off +option "approx" - "Bspline approximate scattered values(unknow values=-1, p1=Order, p2=number of control points" flag off +option "limit" - "Limit the range to [0, 1[ (signal-floor (signal))" flag off diff --git a/tools/clitkSignalMeanPositionFilter.cxx b/tools/clitkSignalMeanPositionFilter.cxx new file mode 100644 index 0000000..8eaa34c --- /dev/null +++ b/tools/clitkSignalMeanPositionFilter.cxx @@ -0,0 +1,222 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkSignalMeanPositionFilter.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:57 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#include "clitkSignalMeanPositionFilter.h" + +//--------------------------------------------------------------------- +void clitk::SignalMeanPositionFilter::SetParameters(gengetopt_args_info_clitkSignalMeanPositionTracking & args) { + args_info = args; + mEtaIsSet = false; + mOutputFilenameIsSet = false; + mOutputResidualFilenameIsSet = false; + mInput.Read(args_info.input_arg); + mAugmentationDelay = args_info.delay_arg; + mIsAdaptiveMethod = false; + mWindowLength = -1; + if (args_info.eta_given) { + mEta = args_info.eta_arg; + mEtaIsSet = true; + } + mMaxIteration = args_info.iter_arg; + if (args_info.output_given) { + mOutputFilenameIsSet = true; + mOutputFilename = args_info.output_arg; + } + if (args_info.residual_given) { + mOutputResidualFilenameIsSet = true; + mOutputResidualFilename = args_info.residual_arg; + } + if (args_info.augmented_given) { + mOutputAugmentedFilenameIsSet = true; + mOutputAugmentedFilename = args_info.augmented_arg; + } + mVerbose = args_info.verbose_flag; + mVerboseIteration = args_info.verbose_iteration_flag; + if (args_info.L_given) { + mIsAdaptiveMethod = true; + mWindowLength = args_info.L_arg; + } +} +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +void clitk::SignalMeanPositionFilter::Update() { + + // DEBUG +// int e = 5; +// clitk::Signal temp; +// temp.resize(mInput.size()*e); +// for(unsigned int i=0; i Vector2d; + + void SetParameters(gengetopt_args_info_clitkSignalMeanPositionTracking & args_info); + void Update(); + + protected: + gengetopt_args_info_clitkSignalMeanPositionTracking args_info; + clitk::Signal mInput; + clitk::Signal mAugmentedInputX; + clitk::Signal mAugmentedInputY; + int mAugmentationDelay; + int mMaxIteration; + double mEta; + bool mEtaIsSet; + bool mOutputFilenameIsSet; + bool mOutputResidualFilenameIsSet; + bool mOutputAugmentedFilenameIsSet; + std::string mOutputFilename; + std::string mOutputResidualFilename; + std::string mOutputAugmentedFilename; + bool mVerbose; + bool mVerboseIteration; + bool mIsAdaptiveMethod; + std::vector mCurrentResidual; + int mWindowLength; + std::vector mCenters; + + void FitEllipse(clitk::Ellipse & An); + void AdaptiveFitEllipse(clitk::Ellipse & An); + + void ComputeAugmentedSpace(const clitk::Signal & input, + clitk::Signal & outputX, + clitk::Signal & outputY, + unsigned int delay); + }; + //--------------------------------------------------------------------- + +} // end namespace + +#endif diff --git a/tools/clitkSignalMeanPositionTracking.cxx b/tools/clitkSignalMeanPositionTracking.cxx new file mode 100644 index 0000000..2b64fa4 --- /dev/null +++ b/tools/clitkSignalMeanPositionTracking.cxx @@ -0,0 +1,53 @@ +/*========================================================================= + + Program: clitk + Module: $RCSfile: clitkSignalMeanPositionTracking.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:56 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef CLITKSIGNALMEANPOSITIONTRACKING_CXX +#define CLITKSIGNALMEANPOSITIONTRACKING_CXX +/** + ================================================= + * @file clitkSignalMeanPositionTracking.cxx + * @author David Sarrut + * @date Sept 2009 + * + * @brief "See Ruan 2007, compute mean position from a signal" + =================================================*/ + +// clitk include +#include "clitkSignalMeanPositionTracking_ggo.h" +#include "clitkSignalMeanPositionFilter.h" +#include "clitkIO.h" +#include "clitkIOCommon.h" + +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkSignalMeanPositionTracking,args_info); + CLITK_INIT; + + // Init filter + clitk::SignalMeanPositionFilter filter; + filter.SetParameters(args_info); + + // Run + filter.Update(); + + // This is the end my friend + return EXIT_SUCCESS; +} + +#endif diff --git a/tools/clitkSignalMeanPositionTracking.ggo b/tools/clitkSignalMeanPositionTracking.ggo new file mode 100644 index 0000000..46baa88 --- /dev/null +++ b/tools/clitkSignalMeanPositionTracking.ggo @@ -0,0 +1,22 @@ +#File clitkSignalMeanPositionTracking.ggo +Package "clitkSignalMeanPositionTracking" +version "1.0" +purpose "See Ruan 2008, compute mean position from a signal" + +option "config" - "Config file" string no +option "input" i "Input signal filename" string yes +option "delay" d "Delay for augmented space" int no default="10" +option "eta" e "Convergence param (auto if not given)" double no +option "iter" - "Max # of iterations" int no default="100" +option "L" L "Sliding window length" int no +option "t" t "DEBUG" int no + +section "Output" +option "output" o "Output ellipse param filename (2 lines=initial/final ; 6 quadratic param + 5 parametric param=center/axis/theta)" string no +option "residual" r "Output optimisation residual filemane" string no +option "augmented" a "Output augmented signal filemane" string no + +section "Verbose" +option "verbose" v "Verbose" flag off +option "verbose_iteration" - "Verbose each iteration" flag off + diff --git a/tools/clitkSplitImage.cxx b/tools/clitkSplitImage.cxx new file mode 100644 index 0000000..8a935e0 --- /dev/null +++ b/tools/clitkSplitImage.cxx @@ -0,0 +1,51 @@ +/*------------------------------------------------------------------------= + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------=*/ + +/** + ------------------------------------------------= + * @file clitkSplitImage.cxx + * @author Joël Schaerer + * @date 20 April 2009 + ------------------------------------------------=*/ + +// clitk include +#include "clitkSplitImage_ggo.h" +#include "clitkSplitImageGenericFilter.h" +#include "clitkIO.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkSplitImage, args_info); + CLITK_INIT; + + // Read image dimension + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg); + unsigned int dim = header->GetNumberOfDimensions(); + + // Check parameters + if (args_info.dimension_given >= dim) { + std::cerr << "ERROR : image has " << dim << "dimensions, split dimension should be between 0 and " << dim-1 << "." << std::endl; + exit(-1); + } + // Main filter + clitk::SplitImageGenericFilter filter; + filter.SetInputFilename(args_info.input_arg); + filter.SetOutputFilename(args_info.output_arg); + filter.SetSplitDimension(args_info.dimension_arg); + filter.SetVerbose(args_info.verbose_flag); + filter.Update(); + + // this is the end my friend + return 0; +} // end main diff --git a/tools/clitkSplitImage.ggo b/tools/clitkSplitImage.ggo new file mode 100644 index 0000000..03d77d8 --- /dev/null +++ b/tools/clitkSplitImage.ggo @@ -0,0 +1,12 @@ +#File clitkSplitImage.ggo +Package "clitkSplitImage" +version "1.0" +purpose "Split an image into n images along a dimension" + + +option "config" - "Config file" string no +option "input" i "Input image filename" string yes +option "output" o "Output image base filename" string yes +option "verbose" v "Verbose" flag off + +option "dimension" d "Dimension to split on" int yes diff --git a/tools/clitkVFMerge.cxx b/tools/clitkVFMerge.cxx new file mode 100644 index 0000000..fa0a75e --- /dev/null +++ b/tools/clitkVFMerge.cxx @@ -0,0 +1,135 @@ +#ifndef CLITKVFMERGE_CXX +#define CLITKVFMERGE_CXX + +/** + * @file clitkVFMerge.cxx + * @author Jef Vandemeulebroucke + * @date June 15 10:14:53 2007 + * + * @brief Read in one VF (ex mhd, vf) and write to another. Transforming from mm to voxels needed for the vf format is implemented in clitkVfImageIO.cxx . + * + * + */ + +// clitk include +#include "clitkVFMerge_ggo.h" +#include "clitkIO.h" +#include "clitkIOCommon.h" + +// itk include +//#include "itkReadTransform.h" +#include "itkImageFileWriter.h" +#include +#include "itkImageFileReader.h" +//#include "itkRawImageIO.h" +//#include "macro.h" + +int main( int argc, char *argv[] ) +{ + + // Init command line + GGO(clitkVFMerge, args_info); + CLITK_INIT; + +const unsigned int SpaceDimension = 3; +const unsigned int ModelDimension = 4; +typedef itk::Vector< float, SpaceDimension > Displacement; +typedef itk::Image< Displacement, SpaceDimension > DeformationFieldType; +typedef itk::Image< Displacement, ModelDimension > DynamicDeformationFieldType; +typedef itk::ImageFileReader< DeformationFieldType > DeformationFieldReaderType; +typedef itk::ImageFileWriter< DynamicDeformationFieldType > DynamicDeformationFieldWriterType; + + +//declare the dynamic + DynamicDeformationFieldType::Pointer dynamicDeformationField=DynamicDeformationFieldType::New(); + + + //declare their iterators + typedef itk::ImageRegionIterator< DynamicDeformationFieldType> DynamicDeformationFieldIteratorType; + DynamicDeformationFieldIteratorType *dynamicIteratorPointer= new DynamicDeformationFieldIteratorType; + + for (unsigned int i=0 ; i< args_info.inputs_num ; i ++) + { + //read in the deformation field i + DeformationFieldReaderType::Pointer deformationFieldReader = DeformationFieldReaderType::New(); + deformationFieldReader->SetFileName( args_info.inputs[i]); + if (args_info.verbose_flag) std::cout<<"Reading VF number "<< i+1 << std::endl; + deformationFieldReader->Update(); + DeformationFieldType::Pointer currentDeformationField = deformationFieldReader->GetOutput(); + + //create an iterator for the current deformation field + typedef itk::ImageRegionIterator FieldIteratorType; + FieldIteratorType fieldIterator(currentDeformationField, currentDeformationField->GetLargestPossibleRegion()); + + //Allocate memory for the dynamic components + if (i==0) + { + DynamicDeformationFieldType::RegionType dynamicDeformationFieldRegion; + DynamicDeformationFieldType::RegionType::SizeType dynamicDeformationFieldSize; + DeformationFieldType::RegionType::SizeType deformationFieldSize; + deformationFieldSize= currentDeformationField->GetLargestPossibleRegion().GetSize(); + dynamicDeformationFieldSize[0]=deformationFieldSize[0]; + dynamicDeformationFieldSize[1]=deformationFieldSize[1]; + dynamicDeformationFieldSize[2]=deformationFieldSize[2]; + dynamicDeformationFieldSize[3]=args_info.inputs_num; + dynamicDeformationFieldRegion.SetSize(dynamicDeformationFieldSize); + DynamicDeformationFieldType::IndexType start; + start.Fill(0); + dynamicDeformationFieldRegion.SetIndex(start); + dynamicDeformationField->SetRegions(dynamicDeformationFieldRegion); + dynamicDeformationField->Allocate(); + + + //Set the spacing + DeformationFieldType::SpacingType spacing= currentDeformationField->GetSpacing(); + DynamicDeformationFieldType::SpacingType dynamicSpacing; + dynamicSpacing[0]=spacing[0]; + dynamicSpacing[1]=spacing[1]; + dynamicSpacing[2]=spacing[2]; + dynamicSpacing[3]=args_info.spacing_arg; //JV par exemple + dynamicDeformationField->SetSpacing(dynamicSpacing); + DynamicDeformationFieldType::PointType origin; + origin[0]=args_info.xorigin_arg; + origin[1]=args_info.yorigin_arg; + origin[2]=args_info.zorigin_arg; + origin[3]=0; //temporal origin is always 0 + dynamicDeformationField->SetOrigin(origin); + + // Creating iterators for the currentDeformationField and the DynamicDeformationField + DynamicDeformationFieldIteratorType *dynamicIterator= new DynamicDeformationFieldIteratorType(dynamicDeformationField, dynamicDeformationField->GetLargestPossibleRegion()); + dynamicIteratorPointer=dynamicIterator; + dynamicIteratorPointer->GoToBegin(); + } + if (args_info.verbose_flag) std::cout<<"Merging VF number "<< i+1 << std::endl; + //Copy the current component of the input into dynamicDeformationFieldComponent + fieldIterator.GoToBegin(); + while(!fieldIterator.IsAtEnd()) + { + dynamicIteratorPointer->Set(fieldIterator.Get()); + ++fieldIterator; + ++(*dynamicIteratorPointer); + } + } + + +//Write the vector field + DynamicDeformationFieldWriterType::Pointer writer = DynamicDeformationFieldWriterType::New(); + writer->SetInput( dynamicDeformationField ); + writer->SetFileName( args_info.output_arg ); + if (args_info.verbose_flag) std::cout<<"Writing the dynamic VF"<< std::endl; + + + try { + + writer->Update( ); + } + catch( itk::ExceptionObject & excp ) { + std::cerr << "Problem writing the output file" << std::endl; + std::cerr << excp << std::endl; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} +#endif + + diff --git a/tools/clitkVFMerge.ggo b/tools/clitkVFMerge.ggo new file mode 100644 index 0000000..0b073c7 --- /dev/null +++ b/tools/clitkVFMerge.ggo @@ -0,0 +1,14 @@ +#File clitkVFMerge.ggo +#Author: Jef Vandemeulebroucke +#Date : Tue 15 June 16.35 + +Package "clitk" +Version "Read a bunch of vector fields (.mhd, .vf, ..) and turn them into a higher dimension vector field (.mhd, ...)" + +option "config" - "Config file" string no +option "output" o "Output VF filename" string yes +option "spacing" s "Spacing for the fourth dimension" float no default="1" +option "verbose" v "Verbose" flag off +option "xorigin" x "Set the x origin of the output vf" float default="0." +option "yorigin" y "Set the y origin of the output vf" float default="0." +option "zorigin" z "Set the z origin of the output vf" float default="0." diff --git a/tools/clitkVFResample.cxx b/tools/clitkVFResample.cxx new file mode 100644 index 0000000..e9605e1 --- /dev/null +++ b/tools/clitkVFResample.cxx @@ -0,0 +1,163 @@ +/*------------------------------------------------------------------------- + +Program: clitk +Module: $RCSfile: clitkVFResample.cxx,v $ +Language: C++ +Date: $Date: 2010/01/06 13:31:56 $ +Version: $Revision: 1.1 $ + +Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de +l'Image). All rights reserved. See Doc/License.txt or +http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +-------------------------------------------------------------------------*/ + +#ifndef CLITKVFRESAMPLE_CXX +#define CLITKVFRESAMPLE_CXX + +/** + ------------------------------------------------= + * @file clitkImageResample.cxx + * @author David Sarrut + * @date 23 Feb 2008 08:37:53 + ------------------------------------------------=*/ + +// clitk +#include "clitkImageResample_ggo.h" +#include "clitkIO.h" +#include "clitkVFResampleGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkImageResample, args_info); + CLITK_INIT; + + // Read input image header to check image dimension + itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg); + unsigned int dim = header->GetNumberOfDimensions(); + std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType()); + + // Print image info if verbose + if (args_info.verbose_flag) { + std::cout << "Input image <" << args_info.input_arg << "> is "; + clitk::printImageHeader(header, std::cout); + std::cout << std::endl; + } + + // Get input size/spacing + std::vector inputSize; + std::vector inputSpacing; + inputSize.resize(dim); + inputSpacing.resize(dim); + for(unsigned int i=0; iGetSpacing(i); + inputSize[i] = header->GetDimensions(i); + } + + // Get options + std::vector outputSize; + std::vector outputSpacing; + outputSize.resize(dim); + outputSpacing.resize(dim); + + // Check options + if (!args_info.size_given && !args_info.spacing_given) { + std::cerr << "Please indicate output size or spacing." << std::endl; + exit(0); + } + + // Check options + if (args_info.size_given && args_info.spacing_given) { + std::cerr << "Please indicate only output size or spacing, not both." << std::endl; + exit(0); + } + + // Size is given and not spacing + if (args_info.size_given && !args_info.spacing_given) { + if (args_info.size_given != dim) { + std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl; + exit(0); + } + for(unsigned int i=0; i sigma; + sigma.resize(args_info.gauss_given); + std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin()); + if (args_info.gauss_given) { + if (args_info.gauss_given != dim) { + if (args_info.gauss_given == 1) { + sigma.resize(dim); + for(unsigned int i=0; iSetInputFilename(args_info.input_arg); + filter->SetOutputSize(outputSize); + filter->SetOutputSpacing(outputSpacing); + filter->SetInterpolationName(args_info.interp_arg); + filter->SetBSplineOrder(args_info.order_arg); + filter->SetBLUTSampling(args_info.sampling_arg); + if (args_info.gauss_given) + filter->SetGaussianSigma(sigma); + filter->SetOutputFilename(args_info.output_arg); + + // Go ! + filter->Update(); + + // this is the end my friend + return 0; +}// end main +//-------------------------------------------------------------------- + +#endif /* end #define CLITKVFRESAMPLE_CXX */ diff --git a/tools/clitkWarpImage.cxx b/tools/clitkWarpImage.cxx new file mode 100644 index 0000000..a42958e --- /dev/null +++ b/tools/clitkWarpImage.cxx @@ -0,0 +1,45 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkWarpImage.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk +#include "clitkWarpImage_ggo.h" +#include "clitkIO.h" +#include "clitkWarpImageGenericFilter.h" + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkWarpImage, args_info); + CLITK_INIT; + + // Filter + clitk::WarpImageGenericFilter::Pointer genericFilter=clitk::WarpImageGenericFilter::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkWarpImage.ggo b/tools/clitkWarpImage.ggo new file mode 100644 index 0000000..596c0aa --- /dev/null +++ b/tools/clitkWarpImage.ggo @@ -0,0 +1,30 @@ +#File clitkWarpImage.ggo +Package "clitkWarpImage" +version "1.0" +purpose "Warp an image. Output will have the extent (origin+ spacing*size) of the input." + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off + +section "I/O" + +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "vf" - "Vector field filename" string yes + + +section "Options" + +option "forward" f "Use forward warping (only linear interp)" flag off +option "spacing" s "The output spacing: 0=like the VF, 1= like the input image (interpolation of the VF prior to warp)" int no default="0" +option "pad" - "Edge padding value" float no default="0.0" + + +section "Interpolation: for image intensity and prior resampling of DVF" + +option "interp" - "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT" int no default="1" +option "interpOrder" - "Order if BLUT or BSpline (0-5)" int no default="3" +option "interpSF" - "Sampling factor if BLUT" int no default="20" +option "interpVF" - "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT" int no default="1" +option "interpVFOrder" - "Order if BLUT or BSpline (0-5)" int no default="3" +option "interpVFSF" - "Sampling factor if BLUT" int no default="20" diff --git a/tools/clitkWarpImageGenericFilter.cxx b/tools/clitkWarpImageGenericFilter.cxx new file mode 100644 index 0000000..01be19c --- /dev/null +++ b/tools/clitkWarpImageGenericFilter.cxx @@ -0,0 +1,55 @@ +#ifndef clitkWarpImageGenericFilter_cxx +#define clitkWarpImageGenericFilter_cxx + +/* ================================================= + * @file clitkWarpImageGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkWarpImageGenericFilter.h" + + +namespace clitk +{ + + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + WarpImageGenericFilter::WarpImageGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + void WarpImageGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType); + + + // Call UpdateWithDim + if(Dimension==2) UpdateWithDim<2>(PixelType); + else if(Dimension==3) UpdateWithDim<3>(PixelType); + // else if (Dimension==4)UpdateWithDim<4>(PixelType); + else + { + std::cout<<"Error, Only for 2 or 3 Dimensions!!!"< Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( WarpImageGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const gengetopt_args_info_clitkWarpImage & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + WarpImageGenericFilter(); + ~WarpImageGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(std::string PixelType); + template void UpdateWithDimAndPixelType(); + + + //---------------------------------------- + // Data members + //---------------------------------------- + gengetopt_args_info_clitkWarpImage m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkWarpImageGenericFilter.txx" +#endif + +#endif // #define clitkWarpImageGenericFilter_h diff --git a/tools/clitkWarpImageGenericFilter.txx b/tools/clitkWarpImageGenericFilter.txx new file mode 100644 index 0000000..6b33824 --- /dev/null +++ b/tools/clitkWarpImageGenericFilter.txx @@ -0,0 +1,223 @@ +#ifndef clitkWarpImageGenericFilter_txx +#define clitkWarpImageGenericFilter_txx + +/* ================================================= + * @file clitkWarpImageGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + //------------------------------------------------------------------- + // Update with the number of dimensions + //------------------------------------------------------------------- + template + void + WarpImageGenericFilter::UpdateWithDim(std::string PixelType) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + + //------------------------------------------------------------------- + // Update with the number of dimensions and the pixeltype + //------------------------------------------------------------------- + template + void + WarpImageGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + typedef itk::Vector DisplacementType; + typedef itk::Image DeformationFieldType; + + + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + typename InputImageType::Pointer input= reader->GetOutput(); + + //Read the deformation field + typedef itk::ImageFileReader DeformationFieldReaderType; + typename DeformationFieldReaderType::Pointer deformationFieldReader= DeformationFieldReaderType::New(); + deformationFieldReader->SetFileName(m_ArgsInfo.vf_arg); + deformationFieldReader->Update(); + typename DeformationFieldType::Pointer deformationField =deformationFieldReader->GetOutput(); + + // Intensity interpolator + typedef clitk::GenericVectorInterpolator GenericInterpolatorType; + typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New(); + genericInterpolator->SetArgsInfo(m_ArgsInfo); + + + // ------------------------------------------- + // Spacing like DVF + // ------------------------------------------- + if (m_ArgsInfo.spacing_arg == 0) + { + // Calculate the region + typename DeformationFieldType::SizeType newSize; + for (unsigned int i=0 ; i GetLargestPossibleRegion().GetSize()[i]*input->GetSpacing()[i]/deformationField->GetSpacing()[i]); + + // Get the interpolator + typedef clitk::GenericVectorInterpolator GenericInterpolatorType; + typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New(); + genericInterpolator->SetArgsInfo(m_ArgsInfo); + + // Resample to match the extent of the input + typename itk::VectorResampleImageFilter::Pointer + resampler =itk::VectorResampleImageFilter::New(); + resampler->SetInput(deformationField); + resampler->SetOutputSpacing(deformationField->GetSpacing()); + resampler->SetSize(newSize); + resampler->SetOutputOrigin(input->GetOrigin()); + resampler->SetInterpolator(genericInterpolator->GetInterpolatorPointer()); + + // Update + if (m_Verbose) std::cout<< "Resampling the VF..." <Update(); + } + catch( itk::ExceptionObject & excp ) { + std::cerr << "Problem resampling the input vector field file" << std::endl; + std::cerr << excp << std::endl; + return; + } + deformationField= resampler->GetOutput(); + + } + + // ------------------------------------------- + // Spacing like input + // ------------------------------------------- + else + { + // Get size + typename DeformationFieldType::SizeType newSize; + for (unsigned int i=0 ; i GetLargestPossibleRegion().GetSize()[i]; + + // Resample to match the extent of the input + typename itk::VectorResampleImageFilter::Pointer + resampler =itk::VectorResampleImageFilter::New(); + resampler->SetInput(deformationField); + resampler->SetOutputSpacing(input->GetSpacing()); + resampler->SetSize(newSize); + resampler->SetOutputOrigin(input->GetOrigin()); + resampler->SetInterpolator(genericInterpolator->GetInterpolatorPointer()); + + // Update + if (m_Verbose) std::cout<< "Resampling the VF..." <Update(); + } + catch( itk::ExceptionObject & excp ) { + std::cerr << "Problem resampling the input vector field file" << std::endl; + std::cerr << excp << std::endl; + return; + } + deformationField= resampler->GetOutput(); + } + + + // ------------------------------------------- + // Forward Warp + // ------------------------------------------- + typename itk::ImageToImageFilter::Pointer warpFilter; + if (m_ArgsInfo.forward_flag) + { + //Forward warping: always linear + typedef clitk::ForwardWarpImageFilter ForwardWarpFilterType; + typename ForwardWarpFilterType::Pointer forwardWarpFilter= ForwardWarpFilterType::New(); + forwardWarpFilter->SetDeformationField( deformationField ); + forwardWarpFilter->SetEdgePaddingValue( static_cast(m_ArgsInfo.pad_arg) ); + warpFilter=forwardWarpFilter; + } + + // ------------------------------------------- + // Backward Warp + // ------------------------------------------- + else + { + // Get the interpolator + typedef clitk::GenericInterpolator GenericInterpolatorType; + typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New(); + genericInterpolator->SetArgsInfo(m_ArgsInfo); + + //Backward mapping + typedef itk::WarpImageFilter BackwardWarpFilterType; + typename BackwardWarpFilterType::Pointer backwardWarpFilter= BackwardWarpFilterType::New(); + backwardWarpFilter->SetDeformationField( deformationField ); + backwardWarpFilter->SetEdgePaddingValue( static_cast(m_ArgsInfo.pad_arg) ); + backwardWarpFilter->SetOutputSpacing( deformationField->GetSpacing() ); + backwardWarpFilter->SetOutputOrigin( input->GetOrigin() ); + backwardWarpFilter->SetOutputSize( deformationField->GetLargestPossibleRegion().GetSize() ); + typename itk::VectorResampleImageFilter::Pointer + resampler =itk::VectorResampleImageFilter::New(); + backwardWarpFilter->SetInterpolator(genericInterpolator->GetInterpolatorPointer()); + warpFilter=backwardWarpFilter; + } + + + // ------------------------------------------- + // Update + // ------------------------------------------- + warpFilter->SetInput(input); + if (m_Verbose) std::cout<< "Warping the input..." <Update(); + } + catch( itk::ExceptionObject & excp ) { + std::cerr << "Problem warping the input image" << std::endl; + std::cerr << excp << std::endl; + return; + } + + + // Output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(warpFilter->GetOutput()); + writer->Update(); + + } + + +}//end clitk + +#endif //#define clitkWarpImageGenericFilter_txx diff --git a/tools/clitkWriteDicomSeries.cxx b/tools/clitkWriteDicomSeries.cxx new file mode 100644 index 0000000..840c74e --- /dev/null +++ b/tools/clitkWriteDicomSeries.cxx @@ -0,0 +1,46 @@ +/*------------------------------------------------------------------------ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + ------------------------------------------------------------------------*/ + +/* ================================================= + * @file clitkWriteDicomSeries.cxx + * @author Jef Vandemeulebroucke + * @date 4th of August + * + * @brief Write a volume into a series with the header of another series + * + ===================================================*/ + + +// clitk +#include "clitkWriteDicomSeries_ggo.h" +#include "clitkIO.h" +#include "clitkWriteDicomSeriesGenericFilter.h" + + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) { + + // Init command line + GGO(clitkWriteDicomSeries, args_info); + CLITK_INIT; + + // Filter + typedef clitk::WriteDicomSeriesGenericFilter FilterType; + FilterType::Pointer genericFilter = FilterType::New(); + + genericFilter->SetArgsInfo(args_info); + genericFilter->Update(); + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkWriteDicomSeries.ggo b/tools/clitkWriteDicomSeries.ggo new file mode 100644 index 0000000..7885274 --- /dev/null +++ b/tools/clitkWriteDicomSeries.ggo @@ -0,0 +1,14 @@ +#File clitkWriteDicomSeries.ggo +Package "clitkWriteDicomSeries" +version "1.0" +purpose "" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off + +option "input" i "Input image filename" string yes +option "inputDir" d "Input dicom directory" string yes +option "outputDir" o "Output dicom directory" string yes +option "key" k "Keys of tags to modify" string no multiple default="0008|103e" +option "tag" t "Tags values" string no multiple default="MIDPOSITION" +option "midP" m "Modify tags using defaults, for MidPosition" flag off diff --git a/tools/clitkWriteDicomSeriesGenericFilter.cxx b/tools/clitkWriteDicomSeriesGenericFilter.cxx new file mode 100644 index 0000000..eb8fe92 --- /dev/null +++ b/tools/clitkWriteDicomSeriesGenericFilter.cxx @@ -0,0 +1,22 @@ +#ifndef clitkWriteDicomSeriesGenericFilter_cxx +#define clitkWriteDicomSeriesGenericFilter_cxx + +/* ================================================= + * @file clitkWriteDicomSeriesGenericFilter.cxx + * @author + * @date + * + * @brief + * + ===================================================*/ + +#include "clitkWriteDicomSeriesGenericFilter.h" + + +namespace clitk +{ + + +} //end clitk + +#endif //#define clitkWriteDicomSeriesGenericFilter_cxx diff --git a/tools/clitkWriteDicomSeriesGenericFilter.h b/tools/clitkWriteDicomSeriesGenericFilter.h new file mode 100644 index 0000000..5a4172d --- /dev/null +++ b/tools/clitkWriteDicomSeriesGenericFilter.h @@ -0,0 +1,103 @@ +#ifndef clitkWriteDicomSeriesGenericFilter_h +#define clitkWriteDicomSeriesGenericFilter_h + +/* ================================================= + * @file clitkWriteDicomSeriesGenericFilter.h + * @author + * @date + * + * @brief + * + ===================================================*/ + + +// clitk include +#include "clitkIO.h" +#include "clitkCommon.h" +#include "clitkWriteDicomSeries_ggo.h" + +//itk include +#include "itkLightObject.h" +#include "itkGDCMImageIO.h" +#include "itkMetaDataDictionary.h" +#include "itkGDCMSeriesFileNames.h" +#include "itkImageSeriesReader.h" +#include "itkImageSeriesWriter.h" +#include +#include + +namespace clitk +{ + template + class ITK_EXPORT WriteDicomSeriesGenericFilter : public itk::LightObject + { + public: + //---------------------------------------- + // ITK + //---------------------------------------- + typedef WriteDicomSeriesGenericFilter Self; + typedef itk::LightObject Superclass; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + // Method for creation through the object factory + itkNewMacro(Self); + + // Run-time type information (and related methods) + itkTypeMacro( WriteDicomSeriesGenericFilter, LightObject ); + + + //---------------------------------------- + // Typedefs + //---------------------------------------- + + + //---------------------------------------- + // Set & Get + //---------------------------------------- + void SetArgsInfo(const args_info_type & a) + { + m_ArgsInfo=a; + m_Verbose=m_ArgsInfo.verbose_flag; + m_InputFileName=m_ArgsInfo.input_arg; + } + + + //---------------------------------------- + // Update + //---------------------------------------- + void Update(); + + protected: + + //---------------------------------------- + // Constructor & Destructor + //---------------------------------------- + WriteDicomSeriesGenericFilter(); + ~WriteDicomSeriesGenericFilter() {}; + + + //---------------------------------------- + // Templated members + //---------------------------------------- + template void UpdateWithDim(std::string PixelType); + template void UpdateWithDimAndPixelType(); + + + //---------------------------------------- + // Data members + //---------------------------------------- + args_info_type m_ArgsInfo; + bool m_Verbose; + std::string m_InputFileName; + + }; + + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkWriteDicomSeriesGenericFilter.txx" +#endif + +#endif // #define clitkWriteDicomSeriesGenericFilter_h diff --git a/tools/clitkWriteDicomSeriesGenericFilter.txx b/tools/clitkWriteDicomSeriesGenericFilter.txx new file mode 100644 index 0000000..2cabb04 --- /dev/null +++ b/tools/clitkWriteDicomSeriesGenericFilter.txx @@ -0,0 +1,193 @@ +#ifndef clitkWriteDicomSeriesGenericFilter_txx +#define clitkWriteDicomSeriesGenericFilter_txx + +/* ================================================= + * @file clitkWriteDicomSeriesGenericFilter.txx + * @author + * @date + * + * @brief + * + ===================================================*/ + + +namespace clitk +{ + + + //----------------------------------------------------------- + // Constructor + //----------------------------------------------------------- + template + WriteDicomSeriesGenericFilter::WriteDicomSeriesGenericFilter() + { + m_Verbose=false; + m_InputFileName=""; + } + + + //----------------------------------------------------------- + // Update + //----------------------------------------------------------- + template + void WriteDicomSeriesGenericFilter::Update() + { + // Read the Dimension and PixelType + int Dimension; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType); + + + // Call UpdateWithDim + if(Dimension==2) UpdateWithDim<2>(PixelType); + else if(Dimension==3) UpdateWithDim<3>(PixelType); + // else if (Dimension==4)UpdateWithDim<4>(PixelType); + else + { + std::cout<<"Error, Only for 2 or 3 Dimensions!!!"< + template + void + WriteDicomSeriesGenericFilter::UpdateWithDim(std::string PixelType) + { + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char"){ + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } + } + + + //------------------------------------------------------------------- + // Update with the number of dimensions and the pixeltype + //------------------------------------------------------------------- + template + template + void + WriteDicomSeriesGenericFilter::UpdateWithDimAndPixelType() + { + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + + // Read the input (volumetric) + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer volumeReader = InputReaderType::New(); + volumeReader->SetFileName( m_InputFileName); + volumeReader->Update(); + typename InputImageType::Pointer input= volumeReader->GetOutput(); + + // Read the dicom directory + typedef itk::ImageSeriesReader< InputImageType > ReaderType; + typedef itk::GDCMImageIO ImageIOType; + typedef itk::GDCMSeriesFileNames NamesGeneratorType; + + ImageIOType::Pointer gdcmIO = ImageIOType::New(); + NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New(); + namesGenerator->SetInputDirectory( m_ArgsInfo.inputDir_arg ); + typename ReaderType::FileNamesContainer filenames = namesGenerator->GetInputFileNames(); + + // Output the dicom files + unsigned int numberOfFilenames = filenames.size(); + if (m_Verbose) + { + std::cout << numberOfFilenames <<" were read in the directory "<* dictionary = reader->GetMetaDataDictionaryArray(); + + // Get keys + unsigned int numberOfKeysGiven=0; + if(m_ArgsInfo.midP_flag && m_ArgsInfo.key_given) + std::cerr<<"Error: both keys and midP option are given"<( *((*dictionary)[fni]), entryId, value ); + } + + // Output directory and filenames + itksys::SystemTools::MakeDirectory( m_ArgsInfo.outputDir_arg ); // create if it doesn't exist + typedef itk::ImageSeriesWriter SeriesWriterType; + typename SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); + + seriesWriter->SetInput( volumeReader->GetOutput() ); + seriesWriter->SetImageIO( gdcmIO ); + namesGenerator->SetOutputDirectory( m_ArgsInfo.outputDir_arg ); + seriesWriter->SetFileNames( namesGenerator->GetOutputFileNames() ); + //seriesWriter->SetMetaDataDictionaryArray( dictionary ); + seriesWriter->SetMetaDataDictionaryArray( dictionary ); + + // Write + try + { + seriesWriter->Update(); + } + catch( itk::ExceptionObject & excp ) + { + std::cerr << "Error: Exception thrown while writing the series!!" << std::endl; + std::cerr << excp << std::endl; + } + + } + + +}//end clitk + +#endif //#define clitkWriteDicomSeriesGenericFilter_txx diff --git a/tools/clitkZeroVF.cxx b/tools/clitkZeroVF.cxx new file mode 100644 index 0000000..ab1dc89 --- /dev/null +++ b/tools/clitkZeroVF.cxx @@ -0,0 +1,40 @@ +#ifndef clitkZeroVF_cxx +#define clitkZeroVF_cxx + + +/** + * @file clitkZeroVF.cxx + * @author Joel Schaerer + * @date July 20 10:14:53 2007 + * + * @brief Creates a VF filled with zeros the size of the input VF + * + */ + +// clitk include +#include "clitkZeroVF_ggo.h" +#include "clitkIO.h" +#include "clitkIOCommon.h" +#include "clitkZeroVFGenericFilter.h" + +int main( int argc, char *argv[] ) +{ + + // Init command line + GGO(clitkZeroVF, args_info); + CLITK_INIT; + + //Creation of the generic filter + clitk::ZeroVFGenericFilter::Pointer zeroVFGenericFilter= clitk::ZeroVFGenericFilter::New(); + + //Pass the parameters + zeroVFGenericFilter->SetInput(args_info.input_arg); + zeroVFGenericFilter->SetOutput(args_info.output_arg); + zeroVFGenericFilter->SetVerbose(args_info.verbose_flag); + + //update + zeroVFGenericFilter->Update(); + return EXIT_SUCCESS; +} +#endif + diff --git a/tools/clitkZeroVF.ggo b/tools/clitkZeroVF.ggo new file mode 100644 index 0000000..82c941f --- /dev/null +++ b/tools/clitkZeroVF.ggo @@ -0,0 +1,11 @@ +#File clitkZeroVF.ggo +#Author: Joel Schaerer +##Date : Tue 15 March 16.35 + +Package "clitk" +Version "Read a vector fields (.mhd, .vf, ..) and zero it" + +option "config" - "Config file" string no +option "input" i "Input VF filename" string yes +option "output" o "Output VF filename" string yes +option "verbose" v "Verbose" flag off diff --git a/tools/clitkZeroVFGenericFilter.cxx b/tools/clitkZeroVFGenericFilter.cxx new file mode 100644 index 0000000..1b7dc17 --- /dev/null +++ b/tools/clitkZeroVFGenericFilter.cxx @@ -0,0 +1,35 @@ +#ifndef CLITKINVERTVFGENERICFILTER_CXX +#define CLITKINVERTVFGENERICFILTER_CXX + +//clitk include +#include "clitkZeroVFGenericFilter.h" + + +namespace clitk { + + clitk::ZeroVFGenericFilter::ZeroVFGenericFilter() + { + m_Verbose=false; + } + + + void clitk::ZeroVFGenericFilter::Update() + { + //Get the image Dimension and PixelType + int Dimension; + std::string PixelType; + + clitk::ReadImageDimensionAndPixelType(m_InputName, Dimension, PixelType); + + if(Dimension==2) UpdateWithDim<2>(PixelType); + else if(Dimension==3) UpdateWithDim<3>(PixelType); + else + { + std::cout<<"Error, Only for 2 and 3 Dimensions!!!"< Pointer; + typedef itk::SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods) */ + itkTypeMacro( ZeroVFGenericFilter, ImageToImageFilter ); + + //Set Methods (inline) + void SetInput(const std::string m){m_InputName=m;} + void SetOutput(const std::string m){m_OutputName=m;} + void SetVerbose(const bool m){m_Verbose=m;} + + //Update + void Update( ); + + + protected: + + ZeroVFGenericFilter(); + ~ZeroVFGenericFilter() {}; + + //Templated members + template void UpdateWithDim(std::string PixelType); + template void UpdateWithDimAndPixelType(); + + std::string m_InputName; + std::string m_OutputName; + bool m_Verbose; + +}; + + +} // end namespace clitk +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkZeroVFGenericFilter.txx" +#endif + +#endif // #define __clitkZeroVFGenericFilter_h diff --git a/tools/clitkZeroVFGenericFilter.txx b/tools/clitkZeroVFGenericFilter.txx new file mode 100644 index 0000000..3a2f55f --- /dev/null +++ b/tools/clitkZeroVFGenericFilter.txx @@ -0,0 +1,52 @@ +#ifndef __clitkZeroVFGenericFilter_txx +#define __clitkZeroVFGenericFilter_txx + +#include "clitkZeroVFGenericFilter.h" + + +namespace clitk +{ + + template + void ZeroVFGenericFilter::UpdateWithDim(std::string PixelType) + { + if (PixelType=="double") + { + UpdateWithDimAndPixelType(); + } + else + { + UpdateWithDimAndPixelType(); + } + } + + + template + void ZeroVFGenericFilter::UpdateWithDimAndPixelType() + { + //Define the image type + typedef itk::Vector DisplacementType; + typedef itk::Image ImageType; + + //Read the image + typedef itk::ImageFileReader ImageReaderType; + typename ImageReaderType::Pointer reader= ImageReaderType::New(); + reader->SetFileName(m_InputName); + reader->Update(); // not very efficient :-p + typename ImageType::Pointer image =reader->GetOutput(); + DisplacementType zero; + zero.Fill(0); + image->FillBuffer(zero); + + //Write the output + typedef itk::ImageFileWriter WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_OutputName); + writer->SetInput(image); + writer->Update(); + } + + +} + +#endif diff --git a/tools/make_new_tool.sh b/tools/make_new_tool.sh new file mode 100755 index 0000000..6f73345 --- /dev/null +++ b/tools/make_new_tool.sh @@ -0,0 +1,8 @@ +#!/bin/bash +cp clitkSplitImage.ggo clitk$1.ggo +cp clitkSplitImage.cxx clitk$1.cxx +cp clitkSplitImageGenericFilter.h clitk$1GenericFilter.h +cp clitkSplitImageGenericFilter.txx clitk$1GenericFilter.txx +cp clitkSplitImageGenericFilter.cxx clitk$1GenericFilter.cxx + +sed -i "s/SplitImage/$1/g" clitk$1* diff --git a/vv/.gitignore b/vv/.gitignore new file mode 100644 index 0000000..e1993c8 --- /dev/null +++ b/vv/.gitignore @@ -0,0 +1,14 @@ +build/* +Louise +tests_jef +mctools +*.swp +Makefile +tags +doc +CVS +CMakeFiles +CMakeCache.txt +.vimrc +*_ggo.* +*.directory diff --git a/vv/CMakeLists.txt b/vv/CMakeLists.txt new file mode 100644 index 0000000..b68ceaa --- /dev/null +++ b/vv/CMakeLists.txt @@ -0,0 +1,294 @@ +cmake_minimum_required(VERSION 2.4) +#========================================================= +INCLUDE(${PROJECT_SOURCE_DIR}/cmake/common.cmake) +#========================================================= + +#Set a reasonable build mode default if the user hasn't set any +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif (NOT CMAKE_BUILD_TYPE) + +#========================================================= +# Find ITK (required) +FIND_PACKAGE(ITK) +IF(ITK_FOUND) + INCLUDE(${ITK_USE_FILE}) +ELSE(ITK_FOUND) + MESSAGE(FATAL_ERROR + "Cannot build without ITK. Please set ITK_DIR.") +ENDIF(ITK_FOUND) +#========================================================= + +#========================================================= +# Find QT +FIND_PACKAGE(Qt4 REQUIRED) + +#========================================================= +INCLUDE_DIRECTORIES( + ${QT_INCLUDES} + ${VTK_INCLUDE_DIR} + ${QT_INCLUDE_DIR} + ${QT_QTGUI_INCLUDE_DIR} + ${QT_QTCORE_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ../common + ) + +#========================================================= + +#SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) +#SET(LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH}/../lib) + +#========================================================= +LINK_LIBRARIES ( + #ITKIO + clitkCommon + clitkFilters + ${QT_QTCORE_LIBRARY} + ${QT_QTGUI_LIBRARY} + vtkCommon + vtkRendering + vtkIO + vtkFiltering + vtkGraphics + vtkWidgets + vtkImaging + ) + +LINK_DIRECTORIES(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ) + +#========================================================= + +OPTION(CLITK_VV_USE_BDCM "Build vv with Dicom selector bdcm" OFF) + +SET(vv_SRCS + vvInfoPanel.cxx + vvLinkPanel.cxx + vvOverlayPanel.cxx + vvLandmarksPanel.cxx + vvQProgressDialogITKCommand.cxx + vvQDicomSeriesSelector.cxx + QVTKWidget.cxx + QTreePushButton.cxx + vvResamplerDialog.cxx + vvSegmentationDialog.cxx + vvSurfaceViewerDialog.cxx + vvMainWindow.cxx + vvDeformationDialog.cxx + vvInit.cxx + vvImageWarp.cxx + nkitkXDRImageIOFactory.cxx + nkitkXDRImageIOReader.cxx + vvDeformableRegistration.cxx + vtkVOXImageWriter.cxx + vvInteractorStyleNavigator.cxx + vvSlicer.cxx + vvImageReader.cxx + vvImageReader.txx + vvImageWriter.cxx + vvImageWriter.txx + vvLandmarks.cxx + vvLandmarksGlyph.cxx + vvGlyphSource.cxx + vvGlyph2D.cxx + vvSlicerManager.cxx + vvSlicerManagerCommand.cxx + vvUtils.cxx + vvMaximumIntensityProjection.cxx + vvMesh.cxx + vvMeshActor.cxx + vvMeshReader.cxx + vvStructSelector.cxx + vvCropDialog.cxx + vvMidPosition.cxx + vvImageMapToWLColors.cxx + ) + +QT4_WRAP_CPP(vv_SRCS + vvMainWindow.h + QVTKWidget.h + QTreePushButton.h + vvInfoPanel.h + vvLinkPanel.h + vvOverlayPanel.h + vvLandmarksPanel.h + vvDocumentation.h + vvHelpDialog.h + vvProgressDialog.h + vvQDicomSeriesSelector.h + vvResamplerDialog.h + vvSegmentationDialog.h + vvSurfaceViewerDialog.h + vvDeformationDialog.h + vvSlicerManager.h + vvStructSelector.h + vvCropDialog.h + ) + +QT4_WRAP_UI(vv_UI_CXX + qt_ui/vvMainWindow.ui + qt_ui/vvInfoPanel.ui + qt_ui/vvLinkPanel.ui + qt_ui/vvOverlayPanel.ui + qt_ui/vvLandmarksPanel.ui + qt_ui/vvHelpDialog.ui + qt_ui/vvDocumentation.ui + qt_ui/vvProgressDialog.ui + qt_ui/vvDicomSeriesSelector.ui + qt_ui/vvSegmentationDialog.ui + qt_ui/vvSurfaceViewerDialog.ui + qt_ui/vvResamplerDialog.ui + qt_ui/vvDeformationDialog.ui + qt_ui/vvStructSelector.ui + qt_ui/vvCropDialog.ui + qt_ui/vvDummyWindow.ui #For testing + ) + +SET(vvUI_RCCS vvIcons.qrc) +QT4_ADD_RESOURCES(vv_SRCS ${vvUI_RCCS}) + +#========================================================= +#support for parallel deformable registration with OpenMP +IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -march=native") +ENDIF(CMAKE_COMPILER_IS_GNUCC) + +#========================================================= + +IF (CLITK_VV_USE_BDCM) + FIND_PACKAGE(bdcm) + IF(bdcm_FOUND) + INCLUDE(${bdcm_USE_FILE}) + ELSE(bdcm_FOUND) + MESSAGE(FATAL_ERROR + "Cannot build without BDCM. Please set BDCM_DIR.") + ENDIF(bdcm_FOUND) + #LINK_DIRECTORIES(/home/dsarrut/src/bdcm/build/) + #INCLUDE_DIRECTORIES(/home/dsarrut/src/bdcm/src2/) + + FIND_PACKAGE(GDCM) + IF(GDCM_FOUND) + INCLUDE(${GDCM_USE_FILE}) + ELSE(GDCM_FOUND) + MESSAGE(FATAL_ERROR + "Cannot build without GDCM. Please set GDCM_DIR.") + ENDIF(GDCM_FOUND) + +ENDIF (CLITK_VV_USE_BDCM) + +IF(WIN32) + SET(EXE_ICON vvIcon.rc) +ENDIF(WIN32) + +ADD_DEFINITIONS(-DQT_DLL) + +ADD_DEFINITIONS(-DQT_THREAD_SUPPORT) + +ADD_EXECUTABLE(vv ${vv_SRCS} vv.cxx ${vv_UI_CXX} ${EXE_ICON}) +TARGET_LINK_LIBRARIES(vv ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} ) + +#test executable +#QT4_WRAP_CPP(VVS_MOC_OUTFILE vvs.h) +#QT4_WRAP_UI(VVS_UI_OUTFILE qt_ui/vvDummyWindow.ui) +#ADD_EXECUTABLE(vvs ${vv_SRCS} vvs.cxx ${vv_UI_CXX} ${VVS_UI_OUTFILE} +#${VVS_MOC_OUTFILE} ${EXE_ICON}) +#TARGET_LINK_LIBRARIES(vvs ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} ) + +IF (CLITK_VV_USE_BDCM) + TARGET_LINK_LIBRARIES(vv ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} bdcm) +ELSE (CLITK_VV_USE_BDCM) + #TARGET_LINK_LIBRARIES(vv ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} ) +ENDIF (CLITK_VV_USE_BDCM) + +#IF( MINGW ) +# # resource compilation for MinGW +# ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vvIcons.o +# COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/vvIcons.qrc -o ${CMAKE_CURRENT_BINARY_DIR}/vvIcons.o ) +# SET(vv_SRCS ${vv_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/vvIcons.o) +#ENDIF (MINGW) + +#IF( MINGW ) +# ADD_EXECUTABLE(vv WIN32 ${vv_SRCS} vv.cxx ${vv_UI_CXX} ${EXE_ICON}) +#ELSE (MINGW) +# ADD_EXECUTABLE(vv ${vv_SRCS} vv.cxx ${vv_UI_CXX} ${EXE_ICON}) +#ENDIF (MINGW) +#TARGET_LINK_LIBRARIES(vv ${QT_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES} QVTKWidgetPlugin ) + +#========================================================= +# Installation file +INSTALL(TARGETS vv vv + RUNTIME DESTINATION bin CONFIGURATIONS relwithdebinfo + LIBRARY DESTINATION lib CONFIGURATIONS relwithdebinfo + ARCHIVE DESTINATION lib CONFIGURATIONS relwithdebinfo) +INSTALL(FILES ${vv_HDRS} DESTINATION include) + +IF(WIN32) + INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/ducky.png DESTINATION bin) + INSTALL (FILES ${EXECUTABLE_OUTPUT_PATH}relwithdebinfo/vv.exe DESTINATION bin) + INSTALL (FILES ${QT_PLUGINS_DIR}/../bin/QtCore4.dll DESTINATION bin) + INSTALL (FILES ${QT_PLUGINS_DIR}/../bin/QtGui4.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkCommon.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtksys.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkRendering.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkGraphics.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkImaging.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkFiltering.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkGenericFiltering.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkIO.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/verdict.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/QVTK.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/QVTKWidgetPlugin.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkDICOMParser.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkexoIIc.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkexpat.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkmetaio.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkftgl.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkfreetype.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkGenericFiltering.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkHybrid.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkInfovis.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkjpeg.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtklibxml2.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkNetCDF.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkpng.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtktiff.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkViews.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkVolumeRendering.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkWidgets.dll DESTINATION bin) + INSTALL (FILES ${VTK_DIR}/bin/relwithdebinfo/vtkzlib.dll DESTINATION bin) +ENDIF(WIN32) + +IF(UNIX) + INSTALL (FILES ${EXECUTABLE_OUTPUT_PATH}/vv DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) + INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/icons/ducky.png DESTINATION bin) + INSTALL (FILES ${EXECUTABLE_OUTPUT_PATH}vv DESTINATION bin) +ENDIF(UNIX) + +#========================================================= +# CPack options +INCLUDE(InstallRequiredSystemLibraries) + +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vv, the 4D slicer : let's jump into a new dimension !") +SET(CPACK_PACKAGE_VENDOR "Creatis, CLB/RIO Team") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt") +SET(CPACK_PACKAGE_VERSION_MAJOR "1") +SET(CPACK_PACKAGE_VERSION_MINOR "0") +SET(CPACK_PACKAGE_VERSION_PATCH "0") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "vv ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") +IF(WIN32 AND NOT UNIX) + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlasshes. + SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\ducky.png") + SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin/relwithdebinfo\\\\vv.exe") + SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} The 4D slicer") + SET(CPACK_NSIS_HELP_LINK "http://www.creatis.insa-lyon.fr/rio") + SET(CPACK_NSIS_URL_INFO_ABOUT "http://www.creatis.insa-lyon.fr/rio") + SET(CPACK_NSIS_MODIFY_PATH ON) +ELSE(WIN32 AND NOT UNIX) + SET(CPACK_STRIP_FILES "bin/vv") + SET(CPACK_SOURCE_STRIP_FILES "") +ENDIF(WIN32 AND NOT UNIX) +SET(CPACK_PACKAGE_EXECUTABLES "vv" "vv") +INCLUDE(CPack) diff --git a/vv/License.txt b/vv/License.txt new file mode 100644 index 0000000..cee7f6a --- /dev/null +++ b/vv/License.txt @@ -0,0 +1,44 @@ +VV License + +VV is copyrighted as an open-source, Berkeley-style license. It allows +unrestricted use, including use in commercial products. The complete +copyright is shown below. + +/*========================================================================= + +Copyright (c) 2008 CLB / CREATIS-LRMN + +CLB = Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LMRN = Centre de Recherche et d'Applications en Traitement de l'Image http://www.creatis.insa-lyon.fr + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of CLB, CREATIS-LRMN, nor the names of any contributor (CNRS, INSERM, + INSA, Universite Claude-Bernard Lyon I), may be used to endorse or promote + products derived from this software without specific prior written permission. + + * Modified source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================*/ \ No newline at end of file diff --git a/vv/QTreePushButton.cxx b/vv/QTreePushButton.cxx new file mode 100644 index 0000000..a8d24db --- /dev/null +++ b/vv/QTreePushButton.cxx @@ -0,0 +1,41 @@ +/*========================================================================= + + Program: vv + Module: $RCSfile: QTreePushButton.cxx,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:58 $ + Version: $Revision: 1.1 $ + Author : Pierre Seroul (pierre.seroul@gmail.com) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ +#include "QTreePushButton.h" + +QTreePushButton::QTreePushButton():QPushButton() +{ + m_item = NULL; + m_index = 0; + m_column = 0; + connect(this,SIGNAL(clicked()),this, SLOT(clickedIntoATree())); +} + +void QTreePushButton::clickedIntoATree() +{ + emit clickedInto(m_item,m_column); + emit clickedInto(m_index,m_column); +} diff --git a/vv/QTreePushButton.h b/vv/QTreePushButton.h new file mode 100644 index 0000000..80c98be --- /dev/null +++ b/vv/QTreePushButton.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: vv + Module: $RCSfile: QTreePushButton.h,v $ + Language: C++ + Date: $Date: 2010/01/06 13:31:58 $ + Version: $Revision: 1.1 $ + Author : Pierre Seroul (pierre.seroul@gmail.com) + +Copyright (C) 2008 +Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr +CREATIS-LRMN http://www.creatis.insa-lyon.fr + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +=========================================================================*/ +#ifndef QTreePushButton_h +#define QTreePushButton_h + +#include +#include +#include + +class QTreePushButton : public QPushButton +{ + Q_OBJECT + +public: + QTreePushButton(); + + void setIndex(int index) { + m_index = index; + } + void setItem(QTreeWidgetItem* item) { + m_item = item; + } + void setColumn(int column) { + m_column = column; + } + +public slots: + void clickedIntoATree(); + +signals: + void clickedInto(QTreeWidgetItem* item,int column); + void clickedInto(int index,int column); + +private: + QTreeWidgetItem* m_item; + int m_index; + int m_column; +}; +#endif diff --git a/vv/QVTKWidget.cxx b/vv/QVTKWidget.cxx new file mode 100644 index 0000000..475e99a --- /dev/null +++ b/vv/QVTKWidget.cxx @@ -0,0 +1,3029 @@ +/* + + * Copyright 2004 Sandia Corporation. + + * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive + + * license for use of this work by or on behalf of the + + * U.S. Government. Redistribution and use in source and binary forms, with + + * or without modification, are permitted provided that this Notice and any + + * statement of authorship are reproduced on all copies. + + */ + + + +/*======================================================================== + + For general information about using VTK and Qt, see: + + http://www.trolltech.com/products/3rdparty/vtksupport.html + +=========================================================================*/ + + + +/*======================================================================== + + !!! WARNING for those who want to contribute code to this file. + + !!! If you use a commercial edition of Qt, you can modify this code. + + !!! If you use an open source version of Qt, you are free to modify + + !!! and use this code within the guidelines of the GPL license. + + !!! Unfortunately, you cannot contribute the changes back into this + + !!! file. Doing so creates a conflict between the GPL and BSD-like VTK + + !!! license. + +=========================================================================*/ + + + +#ifdef _MSC_VER + +// Disable warnings that Qt headers give. + +#pragma warning(disable:4127) + +#pragma warning(disable:4512) + +#endif + + + +#include "QVTKWidget.h" + + + +#include "qevent.h" + +#include "qapplication.h" + +#include "qpainter.h" + +#include "qsignalmapper.h" + +#include "qtimer.h" + +#if QT_VERSION >= 0x040000 && defined(Q_WS_X11) + +#include "qx11info_x11.h" + +#endif + + + +#include "vtkstd/map" + +#include "vtkInteractorStyleTrackballCamera.h" + +#include "vtkRenderWindow.h" + +#if defined(Q_WS_MAC) + +# include "vtkCarbonRenderWindow.h" + +#endif + +#include "vtkCommand.h" + +#include "vtkOStrStreamWrapper.h" + +#include "vtkObjectFactory.h" + +#include "vtkCallbackCommand.h" + +#include "vtkConfigure.h" + +#include "vtkToolkits.h" + +#include "vtkUnsignedCharArray.h" + + + + + +// function to get VTK keysyms from ascii characters + +static const char* ascii_to_key_sym(int); + +// function to get VTK keysyms from Qt keys + +static const char* qt_key_to_key_sym(Qt::Key); + + + +// function to dirty cache when a render occurs. + +static void dirty_cache(vtkObject *, unsigned long, void *, void *); + + + + + + + +#if QT_VERSION < 0x040000 + +/*! constructor */ + +QVTKWidget::QVTKWidget(QWidget* parent, const char* name, Qt::WFlags f) + +#if QT_VERSION < 0x030000 + + : + QWidget(parent, name, f | 0x10000000) // WWinOwnDC + +#else + + : QWidget(parent, name, f | Qt::WWinOwnDC ) + +#endif + + , mRenWin(NULL), + + cachedImageCleanFlag(false), + + automaticImageCache(false), maxImageCacheRenderRate(1.0) + +{ + + // no background + + this->setBackgroundMode( Qt::NoBackground ); + + + + // default to strong focus + + this->setFocusPolicy(QWidget::StrongFocus); + + + + // default to enable mouse events when a mouse button isn't down + + // so we can send enter/leave events to VTK + + this->setMouseTracking(true); + + + + // set expanding to take up space for better default layouts + + this->setSizePolicy( + + QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) + + ); + + + + this->mCachedImage = vtkUnsignedCharArray::New(); + +} + +#endif + + + + + +#if QT_VERSION >= 0x040000 + +/*! constructor */ + +QVTKWidget::QVTKWidget(QWidget* p, Qt::WFlags f) + + : QWidget(p, f | Qt::MSWindowsOwnDC), mRenWin(NULL), + + cachedImageCleanFlag(false), + + automaticImageCache(false), maxImageCacheRenderRate(1.0) + + + +{ + + // no background + + this->setAttribute(Qt::WA_NoBackground); + + // no double buffering + + this->setAttribute(Qt::WA_PaintOnScreen); + + + + // default to strong focus + + this->setFocusPolicy(Qt::StrongFocus); + + + + // default to enable mouse events when a mouse button isn't down + + // so we can send enter/leave events to VTK + + this->setMouseTracking(true); + + + + // set expanding to take up space for better default layouts + + this->setSizePolicy( + + QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) + + ); + + + + this->mCachedImage = vtkUnsignedCharArray::New(); + + + +#if defined(Q_WS_MAC) + + this->DirtyRegionHandler = 0; + + this->DirtyRegionHandlerUPP = 0; + +#endif + + + +} + +#endif + + + + + +/*! destructor */ + + + +QVTKWidget::~QVTKWidget() + +{ + + // get rid of the VTK window + + this->SetRenderWindow(NULL); + + + + this->mCachedImage->Delete(); + +} + + + +/*! get the render window + + */ + +vtkRenderWindow* QVTKWidget::GetRenderWindow() + +{ + + if (!this->mRenWin) + + { + + // create a default vtk window + + vtkRenderWindow* win = vtkRenderWindow::New(); + + this->SetRenderWindow(win); + + win->Delete(); + + } + + + + return this->mRenWin; + +} + + + + + + + +/*! set the render window + + this will bind a VTK window with the Qt window + + it'll also replace an existing VTK window + +*/ + +void QVTKWidget::SetRenderWindow(vtkRenderWindow* w) + +{ + + // do nothing if we don't have to + + if (w == this->mRenWin) + + { + + return; + + } + + + + // unregister previous window + + if (this->mRenWin) + + { + + //clean up window as one could remap it + + if (this->mRenWin->GetMapped()) + + { + + this->mRenWin->Finalize(); + + } + + this->mRenWin->SetDisplayId(NULL); + + this->mRenWin->SetParentId(NULL); + + this->mRenWin->SetWindowId(NULL); + + this->mRenWin->UnRegister(NULL); + + } + + + + // now set the window + + this->mRenWin = w; + + + + if (this->mRenWin) + + { + + // register new window + + this->mRenWin->Register(NULL); + + + + // if it is mapped somewhere else, unmap it + + if (this->mRenWin->GetMapped()) + + { + + this->mRenWin->Finalize(); + + } + + + +#ifdef Q_WS_X11 + + // give the qt display id to the vtk window + +#if QT_VERSION < 0x040000 + + this->mRenWin->SetDisplayId( this->x11Display() ); + +#else + + this->mRenWin->SetDisplayId(QX11Info::display()); + +#endif + +#endif + + + + // special x11 setup + + x11_setup_window(); + + + + // give the qt window id to the vtk window + + this->mRenWin->SetWindowId( reinterpret_cast(this->winId())); + + + + // mac compatibility issues + +#if defined(Q_WS_MAC) && (QT_VERSION < 0x040000) + + this->mRenWin->SetWindowId( NULL ); + + static_cast(this->mRenWin)->SetRootWindow( + + reinterpret_cast(this->handle())); + +#endif + + + + + + // tell the vtk window what the size of this window is + + this->mRenWin->vtkRenderWindow::SetSize(this->width(), this->height()); + + this->mRenWin->vtkRenderWindow::SetPosition(this->x(), this->y()); + + + + // have VTK start this window and create the necessary graphics resources + + if (isVisible()) + + { + + this->mRenWin->Start(); + +#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000) + + macFixRect(); + +#endif + + } + + + + // if an interactor wasn't provided, we'll make one by default + + if (!this->mRenWin->GetInteractor()) + + { + + // create a default interactor + + QVTKInteractor* iren = QVTKInteractor::New(); + + this->mRenWin->SetInteractor(iren); + + iren->Initialize(); + + + + // now set the default style + + vtkInteractorStyle* s = vtkInteractorStyleTrackballCamera::New(); + + iren->SetInteractorStyle(s); + + + + iren->Delete(); + + s->Delete(); + + } + + + + // tell the interactor the size of this window + + this->mRenWin->GetInteractor()->SetSize(this->width(), this->height()); + + + + // Add an observer to monitor when the image changes. Should work most + + // of the time. The application will have to call + + // markCachedImageAsDirty for any other case. + + vtkCallbackCommand *cbc = vtkCallbackCommand::New(); + + cbc->SetClientData(this); + + cbc->SetCallback(dirty_cache); + + this->mRenWin->AddObserver(vtkCommand::EndEvent, cbc); + + cbc->Delete(); + + } + + + +#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000 + + if (mRenWin && !this->DirtyRegionHandlerUPP) + + { + + this->DirtyRegionHandlerUPP = NewEventHandlerUPP(QVTKWidget::DirtyRegionProcessor); + + static EventTypeSpec events[] = { {'cute', 20} }; + + // kEventClassQt, kEventQtRequestWindowChange from qt_mac_p.h + + // Suggested by Sam Magnuson at Trolltech as best portabile hack + + // around Apple's missing functionality in HI Toolbox. + + InstallEventHandler(GetApplicationEventTarget(), this->DirtyRegionHandlerUPP, + + GetEventTypeCount(events), events, + + reinterpret_cast(this), &this->DirtyRegionHandler); + + } + + else if (!mRenWin && this->DirtyRegionHandlerUPP) + + { + + RemoveEventHandler(this->DirtyRegionHandler); + + DisposeEventHandlerUPP(this->DirtyRegionHandlerUPP); + + this->DirtyRegionHandler = 0; + + this->DirtyRegionHandlerUPP = 0; + + } + +#endif + +} + + + + + + + +/*! get the Qt/VTK interactor + + */ + +QVTKInteractor* QVTKWidget::GetInteractor() + +{ + + return QVTKInteractor + + ::SafeDownCast(this->GetRenderWindow()->GetInteractor()); + +} + + + +void QVTKWidget::markCachedImageAsDirty() + +{ + + if (this->cachedImageCleanFlag) + + { + + this->cachedImageCleanFlag = false; + + emit cachedImageDirty(); + + } + +} + + + +void QVTKWidget::saveImageToCache() + +{ + + if (this->cachedImageCleanFlag) + + { + + return; + + } + + + + this->mRenWin->GetPixelData(0, 0, this->width()-1, this->height()-1, 1, + + this->mCachedImage); + + this->cachedImageCleanFlag = true; + + emit cachedImageClean(); + +} + + + +void QVTKWidget::setAutomaticImageCacheEnabled(bool flag) + +{ + + this->automaticImageCache = flag; + + if (!flag) + + { + + this->mCachedImage->Initialize(); + + } + +} + +bool QVTKWidget::isAutomaticImageCacheEnabled() const + +{ + + return this->automaticImageCache; + +} + + + +void QVTKWidget::setMaxRenderRateForImageCache(double rate) + +{ + + this->maxImageCacheRenderRate = rate; + +} + +double QVTKWidget::maxRenderRateForImageCache() const + +{ + + return this->maxImageCacheRenderRate; + +} + + + +vtkUnsignedCharArray* QVTKWidget::cachedImage() + +{ + + // Make sure image is up to date. + + this->paintEvent(NULL); + + this->saveImageToCache(); + + + + return this->mCachedImage; + +} + + + +/*! overloaded Qt's event handler to capture additional keys that Qt has + + default behavior for (for example the Tab and Shift-Tab key) + +*/ + +bool QVTKWidget::event(QEvent* e) + +{ + +#if QT_VERSION >= 0x040000 + + if (e->type() == QEvent::ParentAboutToChange) + + { + + this->markCachedImageAsDirty(); + + if (this->mRenWin) + + { + + // Finalize the window to remove graphics resources associated with + + // this window + + if (this->mRenWin->GetMapped()) + + { + + this->mRenWin->Finalize(); + + } + + } + + } + + else if (e->type() == QEvent::ParentChange) + + { + + if (this->mRenWin) + + { + + x11_setup_window(); + + // connect to new window + + this->mRenWin->SetWindowId( reinterpret_cast(this->winId())); + + + + // start up the window to create graphics resources for this window + + if (isVisible()) + + { + + this->mRenWin->Start(); + + } + + } + + } + +#endif + + + + if (QObject::event(e)) + + { + + return TRUE; + + } + + + + if (e->type() == QEvent::KeyPress) + + { + + QKeyEvent* ke = static_cast(e); + + this->keyPressEvent(ke); + + return ke->isAccepted(); + + } + + + + return QWidget::event(e); + +} + + + + + +/*! handle resize event + + */ + +void QVTKWidget::resizeEvent(QResizeEvent* e) + +{ + + QWidget::resizeEvent(e); + + + + if (!this->mRenWin) + + { + + return; + + } + + + + // give the size to the interactor and vtk window + + this->mRenWin->vtkRenderWindow::SetSize(this->width(), this->height()); + + if (this->mRenWin->GetInteractor()) + + { + + this->mRenWin->GetInteractor()->SetSize(this->width(), this->height()); + + } + + this->markCachedImageAsDirty(); + + + +#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000) + + macFixRect(); + +#endif + +} + + + +void QVTKWidget::moveEvent(QMoveEvent* e) + +{ + + QWidget::moveEvent(e); + + + + if (!this->mRenWin) + + { + + return; + + } + + + + // give the size to the interactor and vtk window + + this->mRenWin->vtkRenderWindow::SetPosition(this->x(), this->y()); + + + +#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000) + + macFixRect(); + +#endif + +} + + + +/*! handle paint event + + */ + +void QVTKWidget::paintEvent(QPaintEvent* ) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + + + // if we have a saved image, use it + + if (this->cachedImageCleanFlag) + + { + + // put cached image into back buffer if we can + + this->mRenWin->SetPixelData(0, 0, this->width()-1, this->height()-1, + + this->mCachedImage, + + !this->mRenWin->GetDoubleBuffer()); + + // swap buffers, if double buffering + + this->mRenWin->Frame(); + + // or should we just put it on the front buffer? + + return; + + } + + + + iren->Render(); + + + + // In Qt 4.1+ let's support redirected painting + +#if QT_VERSION >= 0x040100 + + // if redirected, let's grab the image from VTK, and paint it to the device + + QPaintDevice* device = QPainter::redirected(this); + + if (device != NULL && device != this) + + { + + int w = this->width(); + + int h = this->height(); + + QImage img(w, h, QImage::Format_RGB32); + + vtkUnsignedCharArray* pixels = vtkUnsignedCharArray::New(); + + pixels->SetArray(img.bits(), w*h*4, 1); + + this->mRenWin->GetRGBACharPixelData(0, 0, w-1, h-1, 1, pixels); + + pixels->Delete(); + + img = img.rgbSwapped(); + + img = img.mirrored(); + + + + QPainter painter(this); + + painter.drawImage(QPointF(0.0,0.0), img); + + return; + + } + +#endif + +} + + + +/*! handle mouse press event + + */ + +void QVTKWidget::mousePressEvent(QMouseEvent* e) + +{ + + + + // Emit a mouse press event for anyone who might be interested + + emit mouseEvent(e); + + + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give interactor the event information + +#if QT_VERSION < 0x040000 + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->state() & Qt::ControlButton) > 0 ? 1 : 0, + + (e->state() & Qt::ShiftButton ) > 0 ? 1 : 0, 0, + + e->type() == QEvent::MouseButtonDblClick ? 1 : 0); + +#else + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->modifiers() & Qt::ControlModifier) > 0 ? 1 : 0, + + (e->modifiers() & Qt::ShiftModifier ) > 0 ? 1 : 0, + + 0, + + e->type() == QEvent::MouseButtonDblClick ? 1 : 0); + +#endif + + + + // invoke appropriate vtk event + + switch (e->button()) + + { + + case Qt::LeftButton: + + iren->InvokeEvent(vtkCommand::LeftButtonPressEvent, e); + + break; + + + + case Qt::MidButton: + + iren->InvokeEvent(vtkCommand::MiddleButtonPressEvent, e); + + break; + + + + case Qt::RightButton: + + iren->InvokeEvent(vtkCommand::RightButtonPressEvent, e); + + break; + + + + default: + + break; + + } + +} + + + +/*! handle mouse move event + + */ + +void QVTKWidget::mouseMoveEvent(QMouseEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give interactor the event information + +#if QT_VERSION < 0x040000 + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->state() & Qt::ControlButton) > 0 ? 1 : 0, + + (e->state() & Qt::ShiftButton ) > 0 ? 1 : 0); + +#else + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->modifiers() & Qt::ControlModifier) > 0 ? 1 : 0, + + (e->modifiers() & Qt::ShiftModifier ) > 0 ? 1 : 0); + +#endif + + + + // invoke vtk event + + iren->InvokeEvent(vtkCommand::MouseMoveEvent, e); + +} + + + + + +/*! handle enter event + + */ + +void QVTKWidget::enterEvent(QEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + this->setFocus(); + + iren->InvokeEvent(vtkCommand::EnterEvent, e); + +} + + + +/*! handle leave event + + */ + +void QVTKWidget::leaveEvent(QEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + iren->InvokeEvent(vtkCommand::LeaveEvent, e); + +} + + + +/*! handle mouse release event + + */ + +void QVTKWidget::mouseReleaseEvent(QMouseEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give vtk event information + +#if QT_VERSION < 0x040000 + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->state() & Qt::ControlButton) > 0 ? 1 : 0, + + (e->state() & Qt::ShiftButton ) > 0 ? 1 : 0); + +#else + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->modifiers() & Qt::ControlModifier) > 0 ? 1 : 0, + + (e->modifiers() & Qt::ShiftModifier ) > 0 ? 1 : 0); + +#endif + + + + // invoke appropriate vtk event + + switch (e->button()) + + { + + case Qt::LeftButton: + + iren->InvokeEvent(vtkCommand::LeftButtonReleaseEvent, e); + + break; + + + + case Qt::MidButton: + + iren->InvokeEvent(vtkCommand::MiddleButtonReleaseEvent, e); + + break; + + + + case Qt::RightButton: + + iren->InvokeEvent(vtkCommand::RightButtonReleaseEvent, e); + + break; + + + + default: + + break; + + } + +} + + + +/*! handle key press event + + */ + +void QVTKWidget::keyPressEvent(QKeyEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // get key and keysym information + +#if QT_VERSION < 0x040000 + + int ascii_key = e->text().length() ? e->text().unicode()->latin1() : 0; + +#else + + int ascii_key = e->text().length() ? e->text().unicode()->toLatin1() : 0; + +#endif + + const char* keysym = ascii_to_key_sym(ascii_key); + + if (!keysym) + + { + + // get virtual keys + + keysym = qt_key_to_key_sym(static_cast(e->key())); + + } + + + + if (!keysym) + + { + + keysym = "None"; + + } + + + + // give interactor event information + +#if QT_VERSION < 0x040000 + + iren->SetKeyEventInformation( + + (e->state() & Qt::ControlButton), + + (e->state() & Qt::ShiftButton), + + ascii_key, e->count(), keysym); + +#else + + iren->SetKeyEventInformation( + + (e->modifiers() & Qt::ControlModifier), + + (e->modifiers() & Qt::ShiftModifier), + + ascii_key, e->count(), keysym); + +#endif + + + + // invoke vtk event + + iren->InvokeEvent(vtkCommand::KeyPressEvent, e); + + + + // invoke char event only for ascii characters + + if (ascii_key) + + { + + iren->InvokeEvent(vtkCommand::CharEvent, e); + + } + +} + + + +/*! handle key release event + + */ + +void QVTKWidget::keyReleaseEvent(QKeyEvent* e) + +{ + + + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // get key and keysym info + +#if QT_VERSION < 0x040000 + + int ascii_key = e->text().length() ? e->text().unicode()->latin1() : 0; + +#else + + int ascii_key = e->text().length() ? e->text().unicode()->toLatin1() : 0; + +#endif + + const char* keysym = ascii_to_key_sym(ascii_key); + + if (!keysym) + + { + + // get virtual keys + + keysym = qt_key_to_key_sym((Qt::Key)e->key()); + + } + + + + if (!keysym) + + { + + keysym = "None"; + + } + + + + // give event information to interactor + +#if QT_VERSION < 0x040000 + + iren->SetKeyEventInformation( + + (e->state() & Qt::ControlButton), + + (e->state() & Qt::ShiftButton), + + ascii_key, e->count(), keysym); + +#else + + iren->SetKeyEventInformation( + + (e->modifiers() & Qt::ControlModifier), + + (e->modifiers() & Qt::ShiftModifier), + + ascii_key, e->count(), keysym); + +#endif + + + + // invoke vtk event + + iren->InvokeEvent(vtkCommand::KeyReleaseEvent, e); + +} + + + +#ifndef QT_NO_WHEELEVENT + +void QVTKWidget::wheelEvent(QWheelEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + +// VTK supports wheel mouse events only in version 4.5 or greater + + // give event information to interactor + +#if QT_VERSION < 0x040000 + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->state() & Qt::ControlButton) > 0 ? 1 : 0, + + (e->state() & Qt::ShiftButton ) > 0 ? 1 : 0); + +#else + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->modifiers() & Qt::ControlModifier) > 0 ? 1 : 0, + + (e->modifiers() & Qt::ShiftModifier ) > 0 ? 1 : 0); + +#endif + + + + // invoke vtk event + + // if delta is positive, it is a forward wheel event + + if (e->delta() > 0) + + { + + iren->InvokeEvent(vtkCommand::MouseWheelForwardEvent, e); + + } + + else + + { + + iren->InvokeEvent(vtkCommand::MouseWheelBackwardEvent, e); + + } + +} + +#endif + + + +void QVTKWidget::focusInEvent(QFocusEvent*) + +{ + + // These prevent updates when the window + + // gains or loses focus. By default, Qt + + // does an update because the color group's + + // active status changes. We don't even use + + // color groups so we do nothing here. + +} + + + +void QVTKWidget::focusOutEvent(QFocusEvent*) + +{ + + // These prevent updates when the window + + // gains or loses focus. By default, Qt + + // does an update because the color group's + + // active status changes. We don't even use + + // color groups so we do nothing here. + +} + + + + + +void QVTKWidget::contextMenuEvent(QContextMenuEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give interactor the event information + +#if QT_VERSION < 0x040000 + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->state() & Qt::ControlButton) > 0 ? 1 : 0, + + (e->state() & Qt::ShiftButton ) > 0 ? 1 : 0); + +#else + + iren->SetEventInformationFlipY(e->x(), e->y(), + + (e->modifiers() & Qt::ControlModifier) > 0 ? 1 : 0, + + (e->modifiers() & Qt::ShiftModifier ) > 0 ? 1 : 0); + +#endif + + + + // invoke event and pass qt event for additional data as well + + iren->InvokeEvent(QVTKWidget::ContextMenuEvent, e); + + + +} + + + +void QVTKWidget::dragEnterEvent(QDragEnterEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // invoke event and pass qt event for additional data as well + + iren->InvokeEvent(QVTKWidget::DragEnterEvent, e); + +} + + + +void QVTKWidget::dragMoveEvent(QDragMoveEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give interactor the event information + + iren->SetEventInformationFlipY(e->pos().x(), e->pos().y()); + + + + // invoke event and pass qt event for additional data as well + + iren->InvokeEvent(QVTKWidget::DragMoveEvent, e); + +} + + + +void QVTKWidget::dragLeaveEvent(QDragLeaveEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // invoke event and pass qt event for additional data as well + + iren->InvokeEvent(QVTKWidget::DragLeaveEvent, e); + +} + + + +void QVTKWidget::dropEvent(QDropEvent* e) + +{ + + vtkRenderWindowInteractor* iren = NULL; + + if (this->mRenWin) + + { + + iren = this->mRenWin->GetInteractor(); + + } + + + + if (!iren || !iren->GetEnabled()) + + { + + return; + + } + + + + // give interactor the event information + + iren->SetEventInformationFlipY(e->pos().x(), e->pos().y()); + + + + // invoke event and pass qt event for additional data as well + + iren->InvokeEvent(QVTKWidget::DropEvent, e); + +} + + + + + +/*! handle reparenting of widgets + + */ + +#if QT_VERSION < 0x040000 + +void QVTKWidget::reparent(QWidget* parent, Qt::WFlags f, const QPoint& p, bool showit) + +{ + + this->markCachedImageAsDirty(); + + + + if (this->mRenWin) + + { + + // Finalize the window to remove graphics resources associated with + + // this window + + if (this->mRenWin->GetMapped()) + + { + + this->mRenWin->Finalize(); + + } + + + + // have QWidget reparent as normal, but don't show + + QWidget::reparent(parent, f, p, false); + + + + x11_setup_window(); + + + + // connect to new window + +#if defined(Q_WS_MAC) + + static_cast(this->mRenWin)->SetRootWindow( + + reinterpret_cast(this->handle())); + + + +#else + + this->mRenWin->SetWindowId( reinterpret_cast(this->winId())); + +#endif + + + + // start up the window to create graphics resources for this window + + if (isVisible()) + + { + + this->mRenWin->Start(); + + } + + } + + + + // show if requested + + if (showit) + + { + + show(); + + } + +} + +#endif + + + +void QVTKWidget::showEvent(QShowEvent* e) + +{ + + this->markCachedImageAsDirty(); + + + + QWidget::showEvent(e); + +} + + + +QPaintEngine* QVTKWidget::paintEngine() const + +{ + + return NULL; + +} + + + +class QVTKInteractorInternal : public QObject + +{ + +public: + + QVTKInteractorInternal(QObject* p) + + : QObject(p) + + { + + this->SignalMapper = new QSignalMapper(this); + + } + + ~QVTKInteractorInternal() + + { + + } + + QSignalMapper* SignalMapper; + + typedef vtkstd::map TimerMap; + + TimerMap Timers; + +}; + + + + + +/*! allocation method for Qt/VTK interactor + + */ + +vtkStandardNewMacro(QVTKInteractor); + + + +/*! constructor for Qt/VTK interactor + + */ + +QVTKInteractor::QVTKInteractor() + +{ + + this->Internal = new QVTKInteractorInternal(this); + + QObject::connect(this->Internal->SignalMapper, SIGNAL(mapped(int)), this, SLOT(TimerEvent(int)) ); + +} + + + +/*! start method for interactor + + */ + +void QVTKInteractor::Start() + +{ + + vtkErrorMacro(<<"QVTKInteractor cannot control the event loop."); + +} + + + +/*! terminate the application + + */ + +void QVTKInteractor::TerminateApp() + +{ + + // we are in a GUI so let's terminate the GUI the normal way + + //qApp->exit(); + +} + + + + + +/*! handle timer event + + */ + +void QVTKInteractor::TimerEvent(int timerId) + +{ + + if ( !this->GetEnabled() ) + + { + + return; + + } + + this->InvokeEvent(vtkCommand::TimerEvent, (void*)&timerId); + + + + if (this->IsOneShotTimer(timerId)) + + { + + this->DestroyTimer(timerId); // 'cause our Qt timers are always repeating + + } + +} + + + +/*! constructor + + */ + +QVTKInteractor::~QVTKInteractor() + +{ + +} + + + +/*! create Qt timer with an interval of 10 msec. + + */ + +int QVTKInteractor::InternalCreateTimer(int timerId, int vtkNotUsed(timerType), unsigned long duration) + +{ + + QTimer* timer = new QTimer(this); + + timer->start(duration); + + this->Internal->SignalMapper->setMapping(timer, timerId); + + QObject::connect(timer, SIGNAL(timeout()), this->Internal->SignalMapper, SLOT(map())); + + int platformTimerId = timer->timerId(); + + this->Internal->Timers.insert(QVTKInteractorInternal::TimerMap::value_type(platformTimerId, timer)); + + return platformTimerId; + +} + + + +/*! destroy timer + + */ + +int QVTKInteractor::InternalDestroyTimer(int platformTimerId) + +{ + + QVTKInteractorInternal::TimerMap::iterator iter = this->Internal->Timers.find(platformTimerId); + + if (iter != this->Internal->Timers.end()) + + { + + iter->second->stop(); + + delete iter->second; + + this->Internal->Timers.erase(iter); + + return 1; + + } + + return 0; + +} + + + + + +// ***** keysym stuff below ***** + + + +static const char *AsciiToKeySymTable[] = { + + 0, 0, 0, 0, 0, 0, 0, 0, 0, "Tab", 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + "space", "exclam", "quotedbl", "numbersign", + + "dollar", "percent", "ampersand", "quoteright", + + "parenleft", "parenright", "asterisk", "plus", + + "comma", "minus", "period", "slash", + + "0", "1", "2", "3", "4", "5", "6", "7", + + "8", "9", "colon", "semicolon", "less", "equal", "greater", "question", + + "at", "A", "B", "C", "D", "E", "F", "G", + + "H", "I", "J", "K", "L", "M", "N", "O", + + "P", "Q", "R", "S", "T", "U", "V", "W", + + "X", "Y", "Z", "bracketleft", + + "backslash", "bracketright", "asciicircum", "underscore", + + "quoteleft", "a", "b", "c", "d", "e", "f", "g", + + "h", "i", "j", "k", "l", "m", "n", "o", + + "p", "q", "r", "s", "t", "u", "v", "w", + + "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Delete", + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + + + +const char* ascii_to_key_sym(int i) + +{ + + if (i >= 0) + + { + + return AsciiToKeySymTable[i]; + + } + + return 0; + +} + + + +#define QVTK_HANDLE(x,y) \ + case x : \ + ret = y; \ + break; + + + +const char* qt_key_to_key_sym(Qt::Key i) + +{ + + const char* ret = 0; + + switch (i) + + { + + // Cancel + + QVTK_HANDLE(Qt::Key_Backspace, "BackSpace") + + QVTK_HANDLE(Qt::Key_Tab, "Tab") + +#if QT_VERSION < 0x040000 + + QVTK_HANDLE(Qt::Key_BackTab, "Tab") + +#else + + QVTK_HANDLE(Qt::Key_Backtab, "Tab") + +#endif + + //QVTK_HANDLE(Qt::Key_Clear, "Clear") + + QVTK_HANDLE(Qt::Key_Return, "Return") + + QVTK_HANDLE(Qt::Key_Enter, "Return") + + QVTK_HANDLE(Qt::Key_Shift, "Shift_L") + + QVTK_HANDLE(Qt::Key_Control, "Control_L") + + QVTK_HANDLE(Qt::Key_Alt, "Alt_L") + + QVTK_HANDLE(Qt::Key_Pause, "Pause") + + QVTK_HANDLE(Qt::Key_CapsLock, "Caps_Lock") + + QVTK_HANDLE(Qt::Key_Escape, "Escape") + + QVTK_HANDLE(Qt::Key_Space, "space") + + //QVTK_HANDLE(Qt::Key_Prior, "Prior") + + //QVTK_HANDLE(Qt::Key_Next, "Next") + + QVTK_HANDLE(Qt::Key_End, "End") + + QVTK_HANDLE(Qt::Key_Home, "Home") + + QVTK_HANDLE(Qt::Key_Left, "Left") + + QVTK_HANDLE(Qt::Key_Up, "Up") + + QVTK_HANDLE(Qt::Key_Right, "Right") + + QVTK_HANDLE(Qt::Key_Down, "Down") + + + + // Select + + // Execute + + QVTK_HANDLE(Qt::Key_SysReq, "Snapshot") + + QVTK_HANDLE(Qt::Key_Insert, "Insert") + + QVTK_HANDLE(Qt::Key_Delete, "Delete") + + QVTK_HANDLE(Qt::Key_Help, "Help") + + QVTK_HANDLE(Qt::Key_0, "0") + + QVTK_HANDLE(Qt::Key_1, "1") + + QVTK_HANDLE(Qt::Key_2, "2") + + QVTK_HANDLE(Qt::Key_3, "3") + + QVTK_HANDLE(Qt::Key_4, "4") + + QVTK_HANDLE(Qt::Key_5, "5") + + QVTK_HANDLE(Qt::Key_6, "6") + + QVTK_HANDLE(Qt::Key_7, "7") + + QVTK_HANDLE(Qt::Key_8, "8") + + QVTK_HANDLE(Qt::Key_9, "9") + + QVTK_HANDLE(Qt::Key_A, "a") + + QVTK_HANDLE(Qt::Key_B, "b") + + QVTK_HANDLE(Qt::Key_C, "c") + + QVTK_HANDLE(Qt::Key_D, "d") + + QVTK_HANDLE(Qt::Key_E, "e") + + QVTK_HANDLE(Qt::Key_F, "f") + + QVTK_HANDLE(Qt::Key_G, "g") + + QVTK_HANDLE(Qt::Key_H, "h") + + QVTK_HANDLE(Qt::Key_I, "i") + + QVTK_HANDLE(Qt::Key_J, "h") + + QVTK_HANDLE(Qt::Key_K, "k") + + QVTK_HANDLE(Qt::Key_L, "l") + + QVTK_HANDLE(Qt::Key_M, "m") + + QVTK_HANDLE(Qt::Key_N, "n") + + QVTK_HANDLE(Qt::Key_O, "o") + + QVTK_HANDLE(Qt::Key_P, "p") + + QVTK_HANDLE(Qt::Key_Q, "q") + + QVTK_HANDLE(Qt::Key_R, "r") + + QVTK_HANDLE(Qt::Key_S, "s") + + QVTK_HANDLE(Qt::Key_T, "t") + + QVTK_HANDLE(Qt::Key_U, "u") + + QVTK_HANDLE(Qt::Key_V, "v") + + QVTK_HANDLE(Qt::Key_W, "w") + + QVTK_HANDLE(Qt::Key_X, "x") + + QVTK_HANDLE(Qt::Key_Y, "y") + + QVTK_HANDLE(Qt::Key_Z, "z") + + // KP_0 - KP_9 + + QVTK_HANDLE(Qt::Key_Asterisk, "asterisk") + + QVTK_HANDLE(Qt::Key_Plus, "plus") + + // bar + + QVTK_HANDLE(Qt::Key_Minus, "minus") + + QVTK_HANDLE(Qt::Key_Period, "period") + + QVTK_HANDLE(Qt::Key_Slash, "slash") + + QVTK_HANDLE(Qt::Key_F1, "F1") + + QVTK_HANDLE(Qt::Key_F2, "F2") + + QVTK_HANDLE(Qt::Key_F3, "F3") + + QVTK_HANDLE(Qt::Key_F4, "F4") + + QVTK_HANDLE(Qt::Key_F5, "F5") + + QVTK_HANDLE(Qt::Key_F6, "F6") + + QVTK_HANDLE(Qt::Key_F7, "F7") + + QVTK_HANDLE(Qt::Key_F8, "F8") + + QVTK_HANDLE(Qt::Key_F9, "F9") + + QVTK_HANDLE(Qt::Key_F10, "F10") + + QVTK_HANDLE(Qt::Key_F11, "F11") + + QVTK_HANDLE(Qt::Key_F12, "F12") + + QVTK_HANDLE(Qt::Key_F13, "F13") + + QVTK_HANDLE(Qt::Key_F14, "F14") + + QVTK_HANDLE(Qt::Key_F15, "F15") + + QVTK_HANDLE(Qt::Key_F16, "F16") + + QVTK_HANDLE(Qt::Key_F17, "F17") + + QVTK_HANDLE(Qt::Key_F18, "F18") + + QVTK_HANDLE(Qt::Key_F19, "F19") + + QVTK_HANDLE(Qt::Key_F20, "F20") + + QVTK_HANDLE(Qt::Key_F21, "F21") + + QVTK_HANDLE(Qt::Key_F22, "F22") + + QVTK_HANDLE(Qt::Key_F23, "F23") + + QVTK_HANDLE(Qt::Key_F24, "F24") + + QVTK_HANDLE(Qt::Key_NumLock, "Num_Lock") + + QVTK_HANDLE(Qt::Key_ScrollLock, "Scroll_Lock") + + + + default: + + break; + + } + + return ret; + +} + + + + + + + + + +// X11 stuff near the bottom of the file + +// to prevent namespace collisions with Qt headers + + + +#if defined Q_WS_X11 + +#if defined(VTK_USE_OPENGL_LIBRARY) + +#include "vtkXOpenGLRenderWindow.h" + +#endif + +#ifdef VTK_USE_MANGLED_MESA + +#include "vtkXMesaRenderWindow.h" + +#endif + +#endif + + + + + +void QVTKWidget::x11_setup_window() + +{ + +#if defined Q_WS_X11 + + + + // this whole function is to allow this window to have a + + // different colormap and visual than the rest of the Qt application + + // this is very important if Qt's default visual and colormap is + + // not enough to get a decent graphics window + + + + + + // save widget states + + bool tracking = this->hasMouseTracking(); + +#if QT_VERSION < 0x040000 + + FocusPolicy focus_policy = focusPolicy(); + +#else + + Qt::FocusPolicy focus_policy = focusPolicy(); + +#endif + + bool visible = isVisible(); + + if (visible) + + { + + hide(); + + } + + + + + + // get visual and colormap from VTK + + XVisualInfo* vi = 0; + + Colormap cmap = 0; + + Display* display = reinterpret_cast(mRenWin->GetGenericDisplayId()); + + + + // check ogl and mesa and get information we need to create a decent window + +#if defined(VTK_USE_OPENGL_LIBRARY) + + vtkXOpenGLRenderWindow* ogl_win = vtkXOpenGLRenderWindow::SafeDownCast(mRenWin); + + if (ogl_win) + + { + + vi = ogl_win->GetDesiredVisualInfo(); + + cmap = ogl_win->GetDesiredColormap(); + + } + +#endif + +#ifdef VTK_USE_MANGLED_MESA + + if (!vi) + + { + + vtkXMesaRenderWindow* mgl_win = vtkXMesaRenderWindow::SafeDownCast(mRenWin); + + if (mgl_win) + + { + + vi = mgl_win->GetDesiredVisualInfo(); + + cmap = mgl_win->GetDesiredColormap(); + + } + + } + +#endif + + + + // can't get visual, oh well. + + // continue with Qt's default visual as it usually works + + if (!vi) + + { + + if (visible) + + { + + show(); + + } + + return; + + } + + + + // create the X window based on information VTK gave us + + XSetWindowAttributes attrib; + + attrib.colormap = cmap; + + attrib.border_pixel = BlackPixel(display, DefaultScreen(display)); + + + + Window p = RootWindow(display, DefaultScreen(display)); + + if (parentWidget()) + + { + + p = parentWidget()->winId(); + + } + + + + XWindowAttributes a; + + XGetWindowAttributes(display, this->winId(), &a); + + + + Window win = XCreateWindow(display, p, a.x, a.y, a.width, a.height, + + 0, vi->depth, InputOutput, vi->visual, + + CWBorderPixel|CWColormap, &attrib); + + + + // backup colormap stuff + + Window *cmw; + + Window *cmwret; + + int count; + + if ( XGetWMColormapWindows(display, topLevelWidget()->winId(), &cmwret, &count) ) + + { + + cmw = new Window[count+1]; + + memcpy( (char *)cmw, (char *)cmwret, sizeof(Window)*count ); + + XFree( (char *)cmwret ); + + int i; + + for ( i=0; i= count ) + + { + + cmw[count++] = win; + + } + + } + + else + + { + + count = 1; + + cmw = new Window[count]; + + cmw[0] = win; + + } + + + + + + // tell Qt to initialize anything it needs to for this window + + create(win); + + + + // restore colormaps + + XSetWMColormapWindows( display, topLevelWidget()->winId(), cmw, count ); + + + + delete [] cmw; + + + + XFlush(display); + + + + // restore widget states + + this->setMouseTracking(tracking); + +#if QT_VERSION < 0x040000 + + this->setBackgroundMode( Qt::NoBackground ); + +#else + + this->setAttribute(Qt::WA_NoBackground); + + this->setAttribute(Qt::WA_PaintOnScreen); + +#endif + + this->setFocusPolicy(focus_policy); + + if (visible) + + { + + show(); + + } + + + +#endif + +} + + + +#if defined (Q_WS_MAC) && QT_VERSION >= 0x040000 + +OSStatus QVTKWidget::DirtyRegionProcessor(EventHandlerCallRef, EventRef event, void* wid) + +{ + + QVTKWidget* widget = reinterpret_cast(wid); + + UInt32 event_kind = GetEventKind(event); + + UInt32 event_class = GetEventClass(event); + + if (event_class == 'cute' && event_kind == 20) + + { + + static_cast(widget->GetRenderWindow())->UpdateGLRegion(); + + } + + return eventNotHandledErr; + +} + + + +#endif + + + +#if defined (Q_WS_MAC) && QT_VERSION < 0x040000 + + + +// gotta do some special stuff on the MAC to make it work right + +// this stuff will need changing when using Qt4 with HIViews + + + +#include + + + +void QVTKWidget::macFixRect() + +{ + + AGLContext context = static_cast(this->GetRenderWindow())->GetContextId(); + + + + if (!this->isTopLevel()) + + { + + GLint bufRect[4]; + + + + // always do AGL_BUFFER_RECT if we have a parent + + if (!aglIsEnabled(context, AGL_BUFFER_RECT)) + + aglEnable(context, AGL_BUFFER_RECT); + + + + // get the clip region + + QRegion clip = this->clippedRegion(); + + QRect clip_rect = clip.boundingRect(); + + + + // get the position of this widget with respect to the top level widget + + QPoint mp(posInWindow(this)); + + int win_height = this->topLevelWidget()->height(); + + win_height -= win_height - this->topLevelWidget()->clippedRegion(FALSE).boundingRect().height(); + + + + // give the position and size to agl + + bufRect[0] = mp.x(); + + bufRect[1] = win_height -(mp.y() + this->height()); + + bufRect[2] = this->width(); + + bufRect[3] = this->height(); + + aglSetInteger(context, AGL_BUFFER_RECT, bufRect); + + + + if (clip_rect.isEmpty()) + + { + + // no clipping, disable it + + if (!aglIsEnabled(context, AGL_CLIP_REGION)) + + aglDisable(context, AGL_CLIP_REGION); + + + + bufRect[0] = 0; + + bufRect[1] = 0; + + bufRect[2] = 0; + + bufRect[3] = 0; + + aglSetInteger(context, AGL_BUFFER_RECT, bufRect); + + } + + else + + { + + // we are clipping, so lets enable it + + if (!aglIsEnabled(context, AGL_CLIP_REGION)) + + aglEnable(context, AGL_CLIP_REGION); + + + + // give agl the clip region + + aglSetInteger(context, AGL_CLIP_REGION, (const GLint*)clip.handle(TRUE)); + + } + + } + + + + // update the context + + aglUpdateContext(context); + +} + + + +void QVTKWidget::setRegionDirty(bool b) + +{ + + // the region is dirty and needs redrawn, but not yet + + // signal that it needs to be done when it is possible + + QWidget::setRegionDirty(b); + + QTimer::singleShot(1, this, SLOT(internalMacFixRect())); + + + +} + + + +void QVTKWidget::macWidgetChangedWindow() + +{ + + macFixRect(); + +} + +#endif + + + +// slot to update the draw region and draw the scene + +void QVTKWidget::internalMacFixRect() + +{ + +#if defined(Q_WS_MAC) && QT_VERSION < 0x040000 + + this->macFixRect(); + + this->update(); + +#endif + +} + + + +static void dirty_cache(vtkObject *caller, unsigned long, + + void *clientdata, void *) + +{ + + QVTKWidget *widget = reinterpret_cast(clientdata); + + widget->markCachedImageAsDirty(); + + + + vtkRenderWindow *renwin = vtkRenderWindow::SafeDownCast(caller); + + if (renwin) + + { + + if ( widget->isAutomaticImageCacheEnabled() + + && ( renwin->GetDesiredUpdateRate() + + < widget->maxRenderRateForImageCache() ) ) + + { + + widget->saveImageToCache(); + + } + + } + +} + + + diff --git a/vv/QVTKWidget.h b/vv/QVTKWidget.h new file mode 100644 index 0000000..ef91121 --- /dev/null +++ b/vv/QVTKWidget.h @@ -0,0 +1,310 @@ +/*========================================================================= + + Copyright 2004 Sandia Corporation. + Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive + license for use of this work by or on behalf of the + U.S. Government. Redistribution and use in source and binary forms, with + or without modification, are permitted provided that this Notice and any + statement of authorship are reproduced on all copies. + +=========================================================================*/ + +/*======================================================================== + For general information about using VTK and Qt, see: + http://www.trolltech.com/products/3rdparty/vtksupport.html +=========================================================================*/ + +/*======================================================================== + !!! WARNING for those who want to contribute code to this file. + !!! If you use a commercial edition of Qt, you can modify this code. + !!! If you use an open source version of Qt, you are free to modify + !!! and use this code within the guidelines of the GPL license. + !!! Unfortunately, you cannot contribute the changes back into this + !!! file. Doing so creates a conflict between the GPL and BSD-like VTK + !!! license. +=========================================================================*/ + +// .NAME QVTKWidget - Display a vtkRenderWindow in a Qt's QWidget. +// .SECTION Description +// QVTKWidget provides a way to display VTK data in a Qt widget. + +#ifndef Q_VTK_WIDGET_H +#define Q_VTK_WIDGET_H + +#include +class QPaintEngine; + +class vtkRenderWindow; +class QVTKInteractor; +#include +#include +#include +class vtkUnsignedCharArray; + +#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000 +#include // Event handling for dirty region +#endif + +#if defined(WIN32) && defined(VTK_BUILD_SHARED_LIBS) +#if defined(QVTK_EXPORTS) || defined(QVTKWidgetPlugin_EXPORTS) +#define QVTK_EXPORT __declspec( dllexport ) +#else +#define QVTK_EXPORT __declspec( dllimport ) +#endif +#define QVTK_EXPORT +#else +#define QVTK_EXPORT +#endif + +//! QVTKWidget displays a VTK window in a Qt window. +class QVTK_EXPORT QVTKWidget : public QWidget +{ + Q_OBJECT + + Q_PROPERTY(bool automaticImageCacheEnabled + READ isAutomaticImageCacheEnabled + WRITE setAutomaticImageCacheEnabled) + Q_PROPERTY(double maxRenderRateForImageCache + READ maxRenderRateForImageCache + WRITE setMaxRenderRateForImageCache) + Q_PROPERTY(QString text READ text WRITE setText) + +public: +#if QT_VERSION < 0x040000 + //! constructor for Qt 3 + QVTKWidget(QWidget* parent = NULL, const char* name = NULL, Qt::WFlags f = 0); +#else + //! constructor for Qt 4 + QVTKWidget(QWidget* parent = NULL, Qt::WFlags f = 0); +#endif + + QString text() const { + return ""; + } + + //! destructor + virtual ~QVTKWidget(); + + // Description: + // Set the vtk render window, if you wish to use your own vtkRenderWindow + virtual void SetRenderWindow(vtkRenderWindow*); + + // Description: + // Get the vtk render window. + virtual vtkRenderWindow* GetRenderWindow(); + + // Description: + // Get the Qt/vtk interactor that was either created by default or set by the user + virtual QVTKInteractor* GetInteractor(); + + // Description: + // Enum for additional event types supported. + // These events can be picked up by command observers on the interactor + enum vtkCustomEvents + { + ContextMenuEvent = vtkCommand::UserEvent + 100, + DragEnterEvent, + DragMoveEvent, + DragLeaveEvent, + DropEvent + }; + + // Description: + // Enables/disables automatic image caching. If disabled (the default), + // QVTKWidget will not call saveImageToCache() on its own. + virtual void setAutomaticImageCacheEnabled(bool flag); + virtual bool isAutomaticImageCacheEnabled() const; + + // Description: + // If automatic image caching is enabled, then the image will be cached + // after every render with a DesiredUpdateRate that is greater than + // this parameter. By default, the vtkRenderWindowInteractor will + // change the desired render rate depending on the user's + // interactions. (See vtkRenderWindow::DesiredUpdateRate, + // vtkRenderWindowInteractor::DesiredUpdateRate and + // vtkRenderWindowInteractor::StillUpdateRate for more details.) + virtual void setMaxRenderRateForImageCache(double rate); + virtual double maxRenderRateForImageCache() const; + + // Description: + // Returns the current image in the window. If the image cache is up + // to date, that is returned to avoid grabbing other windows. + virtual vtkUnsignedCharArray* cachedImage(); + +#if QT_VERSION < 0x040000 + // Description: + // Handle reparenting of this widget in Qt 3.x + virtual void reparent(QWidget* parent, Qt::WFlags f, const QPoint& p, bool showit); +#endif + + // Description: + // Handle showing of the Widget + virtual void showEvent(QShowEvent*); + + virtual QPaintEngine* paintEngine() const; + +signals: + // Description: + // This signal will be emitted whenever a mouse event occurs + // within the QVTK window + void mouseEvent(QMouseEvent* event); + + // Description: + // This signal will be emitted whenever the cached image goes from clean + // to dirty. + void cachedImageDirty(); + + // Description: + // This signal will be emitted whenever the cached image is refreshed. + void cachedImageClean(); + +public slots: + // Description: + // This will mark the cached image as dirty. This slot is automatically + // invoked whenever the render window has a render event or the widget is + // resized. Your application should invoke this slot whenever the image in + // the render window is changed by some other means. If the image goes + // from clean to dirty, the cachedImageDirty() signal is emitted. + void markCachedImageAsDirty(); + + // Description: + // If the cached image is dirty, it is updated with the current image in + // the render window and the cachedImageClean() signal is emitted. + void saveImageToCache(); + + void setText(const QString &) {}; + +protected: + // overloaded resize handler + virtual void resizeEvent(QResizeEvent* event); + // overloaded move handler + virtual void moveEvent(QMoveEvent* event); + // overloaded paint handler + virtual void paintEvent(QPaintEvent* event); + + // overloaded mouse press handler + virtual void mousePressEvent(QMouseEvent* event); + // overloaded mouse move handler + virtual void mouseMoveEvent(QMouseEvent* event); + // overloaded mouse release handler + virtual void mouseReleaseEvent(QMouseEvent* event); + // overloaded key press handler + virtual void keyPressEvent(QKeyEvent* event); + // overloaded key release handler + virtual void keyReleaseEvent(QKeyEvent* event); + // overloaded enter event + virtual void enterEvent(QEvent*); + // overloaded leave event + virtual void leaveEvent(QEvent*); +#ifndef QT_NO_WHEELEVENT + // overload wheel mouse event + virtual void wheelEvent(QWheelEvent*); +#endif + // overload focus event + virtual void focusInEvent(QFocusEvent*); + // overload focus event + virtual void focusOutEvent(QFocusEvent*); + // overload Qt's event() to capture more keys + bool event( QEvent* e ); + + // overload context menu event + virtual void contextMenuEvent(QContextMenuEvent*); + // overload drag enter event + virtual void dragEnterEvent(QDragEnterEvent*); + // overload drag move event + virtual void dragMoveEvent(QDragMoveEvent*); + // overload drag leave event + virtual void dragLeaveEvent(QDragLeaveEvent*); + // overload drop event + virtual void dropEvent(QDropEvent*); + + // the vtk render window + vtkRenderWindow* mRenWin; + + // set up an X11 window based on a visual and colormap + // that VTK chooses + void x11_setup_window(); + +#if defined(Q_WS_MAC) && QT_VERSION < 0x040000 + void macFixRect(); + virtual void setRegionDirty(bool); + virtual void macWidgetChangedWindow(); +#endif + +#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000 + EventHandlerUPP DirtyRegionHandlerUPP; + EventHandlerRef DirtyRegionHandler; + static OSStatus DirtyRegionProcessor(EventHandlerCallRef er, EventRef event, void*); +#endif + +private slots: + void internalMacFixRect(); + +protected: + + vtkUnsignedCharArray* mCachedImage; + bool cachedImageCleanFlag; + bool automaticImageCache; + double maxImageCacheRenderRate; + +private: + //! unimplemented operator= + QVTKWidget const& operator=(QVTKWidget const&); + //! unimplemented copy + QVTKWidget(const QVTKWidget&); + +}; + +class QVTKInteractorInternal; + +// .NAME QVTKInteractor - An interactor for the QVTKWidget. +// .SECTION Description +// QVTKInteractor is an interactor for a QVTKWiget. + +class QVTK_EXPORT QVTKInteractor : public QObject, public vtkRenderWindowInteractor +{ + Q_OBJECT +public: + static QVTKInteractor* New(); + vtkTypeMacro(QVTKInteractor,vtkRenderWindowInteractor); + + // Description: + // Overloaded terminiate app, which does nothing in Qt. + // Use qApp->exit() instead. + virtual void TerminateApp(); + + // Description: + // Overloaded start method does nothing. + // Use qApp->exec() instead. + virtual void Start(); + +public slots: +// timer event slot + virtual void TimerEvent(int timerId); + +protected: + // constructor + QVTKInteractor(); + // destructor + ~QVTKInteractor(); + + // create a Qt Timer + virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration); + // destroy a Qt Timer + virtual int InternalDestroyTimer(int platformTimerId); + +private: + + QVTKInteractorInternal* Internal; + + // unimplemented copy + QVTKInteractor(const QVTKInteractor&); + // unimplemented operator= + void operator=(const QVTKInteractor&); + +}; + + +#endif + + diff --git a/vv/ReadMe.txt b/vv/ReadMe.txt new file mode 100644 index 0000000..081302a --- /dev/null +++ b/vv/ReadMe.txt @@ -0,0 +1,66 @@ +How to install and run vv on linux: + +1.CMake : +Before doing anything, you need to download the latest stable release of CMake : + http://www.cmake.org/HTML/Index.html + +Uncompress the file and add cmake to your path : + tar zxvf cmake-2.4.2-Linux-i386.tar.gz + tar xvf cmake-2.4.2-Linux-files.tar + PATH=$PATH:/cmake/bin/directory + +2.ITK: +Download the latest stable release from their page or from their CVS repository : + http://www.itk.org/HTML/Download.htm + +Uncompress it and rename the resulting folder as « Insight » : + tar zxvf InsightToolkit-2.6.0.tar.gz + mkdir Insight + mv InsightToolkit-2.6.0 Insight + +Still from your home, create a binary directory, get into it and run CMake : + mkdir Insight-binary + cd Insight-binary + ccmake ../Insight + +NB : You can disable BUILT_EXAMPLES and BUILT_TESTS. + +Then compile ITK: + make + +3.Qt 4: +Download the latest stable release from their page : + http://trolltech.com/downloads/opensource + +Install it following instructions on : + http://doc.trolltech.com/4.3/install-x11.html + +4.VTK: + +Download the latest stable release from their CVS repository : + http://www.vtk.org/get-software.php + +Create a binary directory, get into it and run CMake : + mkdir vtk-binary + cd vtk-binary + ccmake ../vtk + +NB: you need to change built options to make it compatible with Qt. + Set BUILD_SHARED_LIBS to ON, + Set VTK_USE_GUISUPPORT to ON + Set VTK_USE_QVTK to ON. Then, specify the Qt version you are using. + +Then compile vtk : + make + +5.vv: + +Download the latest release from the git repository : + git clone http://creatis.insa-lyon.fr/~schaerer/vv.git + +Go inside the build directory: + cd vv/build + +run cmake and compile it. + ccmake .. + make -j2 diff --git a/vv/icons/GPSup.png b/vv/icons/GPSup.png new file mode 100644 index 0000000000000000000000000000000000000000..27e98ce5418faa04e59bfb735ba5174edbc85ecb GIT binary patch literal 819 zcmV-31I+x1P)X1^@s6D=Y3@00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru*aiy@003ZSYe@hA0>DW` zK~zY`?UhYPlu;ChpZR8Nlxe0k|5C)nKq^G1(uIU2{zM8gATERftyV@LE=p(-w5Y%~ zfw(DZry)`i7K(yUCR3tf;6(Tn8e)?*jWf>V@O?VBh5hJszg)WU+||ABIq!SU<=k^& z*LK#VQ+7T7G*K*J)C6MaQCuF=a)ilox-z;W9_Raq4Pfk0qIyP++%1X^;U zT{SdnsCnN*PazOe0I+kJ>zvRlE#poGm8F$`_BNZ%y5L-}Of$V4?HfZ3ZL}SYC;ke6 z0$6C|B4*4|_A#i4t-xT|+7Eg5ywr{Z9UfUoCYjVx*9e#t;5605>t$~oFk-jcWsqsE zXwC#gWMCCl$-qg4Y_dpUzn(y{CmFL@UR+#yT)ZEDK!)X$50I;nP0D}X16HiMJ#DdA z;(YkziIEIoQ&_|c2tASzAzguRIILQ+N@Klv+32E4KH(>zN3xW(gsQ4iEciLNoIrxK z#0e$<+zRlDUi~z+Ga7EUTLwkaM$*Ct3?>=aPyaITRsp;`+0Wb7k_O9)m{R9pcIee46cPan?002ovPDHLkV1l(gZ{`31 literal 0 HcmV?d00001 diff --git a/vv/icons/NEgrid.png b/vv/icons/NEgrid.png new file mode 100644 index 0000000000000000000000000000000000000000..33853a556f6da82b28286cf244cf77b59e9f541c GIT binary patch literal 391 zcmV;20eJq2P)YU6ot58xKF^#L3*Sa1-E8W(YJ)4fA2p-{01wR7eKG>Jp~(-YE= zV$XKZ`S@|T=TqDJrze0(etC~AyRmcN6fy>2o}byZyy?-g1JD4>i@j@MGQRkhN8&~#rEdVqnOBM9Whp6ejxolzpJl!?vJ$D4KzPTmdtvI5$T9r&3 z{f2n{AcUng0r-Ou!23C45u?&H<-euoCflW(FWaFtA)9O0jLiHKs9VnXV_!xAdQr-j zd`Q_|hXKigWON+-U8hWGJr-i})GB4h5cM4-)@AlhR3;?V6Cn?`P5g{(8yVT|uctEx l;I;c9RHR7lzLc$q`2tL|Y&0P?sTcqN002ovPDHLkV1l85rIG*u literal 0 HcmV?d00001 diff --git a/vv/icons/NOgrid.png b/vv/icons/NOgrid.png new file mode 100644 index 0000000000000000000000000000000000000000..0eaf14b16d97626e21c97cb4ec7d36149e579266 GIT binary patch literal 411 zcmV;M0c8G(P)YU6vlt&_6{A~ zoSj?*kt%%weTRy=b0(#V!`!XI3PcH06jRtzRXPs`{Yya*IU>~ z-$6k_l)QkxLqOA|ut<>yu#4&P04c68kjkK>5U~~QQ)oDZfFYoDuFgTsoyEntbDqIN zr&(t9+n;6klY`^4Q=m+G_3wL))?uZ&mT`dcdAm_c+dZi_0a`%WZ8u6zV*eee)tfi~ z!--E2ZYm&eeARmspJ0(-axvrZ%QAqG@3TxHBFhi~qIea_7-Gb_iG0mgArChlo}V7o zq20ZG)!$wJ%s4>b8_!^4M?d6v2GIZf#&wKDQN&+M{!O;-Q887v>g8}HTh~pOty){k zHuc`v>bVM-R%)t$dG!f%S~jz=WD`mELLD%%UG`WaGKR=9$gYs=H<3h0WUP>jd4RWF yR6t=KsQ&hzEHth;Cqc{DTz$0000Vc)o|FMgx{@ zqo=!!g~cW#!1e3bv1ZL0wA*dtxYgp>vH{Z7)rDrWiN(c5EEj9}gr1{L1lzL2RtVfS z!g37g2<1SbBpL)ZTpI#3l!z=Oi9#(5;Mic~bSU7fumxOSUmqyFy}iO@499V>u&}Ut z4N$_0i&CjX%4Ktm*Iqw^o}LOu9vs5(@PPbbKcFmOgVZ}nIu_z6lD$f>$A)I51Y{{- z^a3t1!OYLklYXjU2$)O_C>6SDW#g<~Z0G2rCYq zkbcs>!f_aetOK?v?P36qQ0zJ`N`Vap%XGto4-A{oM?XA-XP@4M=b!m92G(|AVsaKQ zy>d!en-{>`qS<<+n@)KV<$X^uoaexb0SI%51gTE60I^KvZx~u9-7p}|cO%iZMAVHV z-~Ng)Q496mWxhtBo5RH9!|Km7#>r#u0^JSO>1lb1?yZa2F)}@Te5+ zR>#~0j%`{DuI<9M7`@E{Vmsm>#G$>ruwi|_0rA4iZzAk%p{KV-5X?EFCjdGo0K)*K zkbzRkXWxq>I@GWQgw`;%&}p||J2ogRx=s`$DAjQEz-}Bk`ZK&YaSK2G=>$GH`e_6n zBlQV{pyeE|=L#0?*8ekrzr6E1ynpK^b7xu)N>nR4=2y^MP=LyEn!vUlp0$&% z^Y459MWe9SbMaG!uYI*2Kl%A3Oiaz=$cbO$$i6Q@V-YXB`deIncLtNwvsmA6GbO77 z;7ev~Y>d51XJ(|(X6tZHX7Va#ZrOGO%in$9!RVne9D4azn0&vE123L3Z;DIeoae6m za|#b_8A0>jba4t46fX)!%0r~uM63YL$qLyp1xcaJ%Z6ZBUt!RLBhNgB=f3+(Oy0T+ zjg$wCUcFuy)=X-PyMUhZ4+tZrbJ|e`C}$x_6OPZ{ucJa|*?W)cWQ%85>5i-L?D4m8@!i`%#-I_M zqSe-znx5l3vlsxWq%x-lL{@;}glp_)u_JL9XY8bm+SpOt#B2AJ#oow3-;#>mEv_=r5$c6|O*&^pGA zsaagOasz+=$24xwHe?OO444Yf@}AA}myM{-9;}v$-f<1}1jCVQqJaUD#1?ewpw$Eh z`ug#?M?Q%?PkaFf_dEvIDHk(v`t&J`k6&0(l+;{Ot-)E|qFC9UT+7G2OE}NdYjoST zZ7bZ;$~T-nf6Z6A{BcWc(bR^FfL8R&5fs}0E~d_)GuT=gTcygf5+x&)l`18p$RDqQ zat4{GWswjn)fcT~TFT~b_M4rJ%R$g_x=dryj%Z7CNwksKv1T=*xCV5liD+B&UUs-H zy7=F#+26>VH#0zK1~ivdQ=myxc7Q@V;+{NmY5@bwSx7RCmT9U*u!{T(9094&V1SYt P00000NkvXXu0mjf%~7mV literal 0 HcmV?d00001 diff --git a/vv/icons/crop.png b/vv/icons/crop.png new file mode 100644 index 0000000000000000000000000000000000000000..355837900abf44f74dd1036bd60a7b3bc1df7274 GIT binary patch literal 977 zcmV;?11|iDP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXP| z4h|r!q&nyT00U7;L_t(o!|j;gZW~n)#((F}x;0X4w&FGtNXVCws#1yrQn;j1EF_); z-h`LnmYYgQEe*v|se@2&qH>c+fFJ=?4Y8a=q$cOgaIx!+?Ks6w*+4{&<=x|1kN5L8 zGvAEXs45p>SuV)B1p2=P>ZkqU`ucjW+wImST}#t+Z((7f{+|Ha?RIO;#pc9ookyM8 zzs~45lQ(bP!WfgkVQsAgK)cx8pZ@{CX-xm!nk5obhyM0* z3xHRzrG@Rv)hm2(y9F|^=+JR=X<^OI_wIgCPL4`c-hO8>yOj*x(wN*Ps0yk|2mui( z>>@&l0f|bCfggX^EU%bEgzuj`8DXW^jknlq_4d1fXe}?hUH5x!A;7z*vkm zMPKVY>b&qbnu|>|f1#68OP%OEkZu5qwRKErW zN4vW_V>M<+&f^2kcml`#50wT~RN3DCC2!Y3szZ>KR21AUIUav=^ z(I80@Ha0dsZZsO7o~kxyeVVtqxw&$9c=%b2v8Jl|7^elJ{eB-~3_HK?aIk-XbFN_6 zS&MUydcDs4{QM^`0{GHEFP}YK0=)!!L4p1S$QGZLh$Ox400000NkvXXu0mjfvnkRR literal 0 HcmV?d00001 diff --git a/vv/icons/cross.png b/vv/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..b243163e2c909bd274227deb0cb862ab3f3686b2 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i1MrH;EhJWhf3JeSkYymzYuK)l4XJB9mJ#@K_ zfq{XsB*-tA!Qt7BG!Q4r+uensgH_gpfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS#w z!N$g^V7{wLWe)=bgQBO4V+hCfk}@P)k!WEL{+!jiI?EyZGL7Np!#!pe%! ztSn?uN|UDK645LqY@~5XG%jOv)YIF1@B2+wQ}eHT ziBg5Q324H!;Upi2C+Nj9{K3k^--P3MfFBq{TbiI$P+$Oi(TM4|hAoMIO(eb?&);}a zwChc{g2{<(Df%!Mr!w)g@Ct|U9kqGMXX9hEdLpqO#@Qj_>tcMJSc2z8yFZC;yv7I2 z5Bq&=%*58>HZEce>d{hEU?SGz4wlD9_4pdTlv!8Ng_^vCS?9NCyB|GaTZkLs`-jtL zz&iXwJ7(futbx3u`=jkjID*HRnsnWPpK*3O@;VSB>CY*?4_mPftyqOec!){3UUUw} zf^u23;XM}NZD?W-W`utO7F46&3pkLmH3zGf4fmcYRT$ByM=>X8*oT7^;_9$Av@jTJcePzi31)O8wgzktwfBZDdT*9BMiE-X823JNoY(nfMF+t6j-hHz}Y10000< KMNUMnLSTaMCIW!~ literal 0 HcmV?d00001 diff --git a/vv/icons/cut.png b/vv/icons/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..54638e9386dc8af40dcc9a3ee2f57c62e248e406 GIT binary patch literal 1323 zcmV+`1=RY9P)J0(1!|L=@Q+aTEb7Mu4u}WZlMQB24&|#EVDBq0{%sj+Z+)GGQx0 zAcdU1Fi0-lfEhqCt9ecIzWZ_$Xk-SF1YV<2^ak#QNA=LXgUd}Io1OMRbT7RYGCd%P zKS-r48v%?ldBMA#h)c%T#wHG+5V`$A{>3XcMvM|%P6Cssr>70f(>b}AV>T2D(&VEn zK_HANo+{rrN9){swakg0Ktz^QgDWfxHbzJY6ZK>&doEN10r&$qzrYSODpcQMh*H%o zSOat&76=4-MOF34plx)*)N}VCzH?EPkgku=6VK(8gNL*Np3E)-)CS$Jnai-RudhD8 z(qOgQ?SS}sjv4h}*IqNacG`39XxPWcN1v;!unrFm!4QYC z_Acj^H}`jQVc5OsUVtxVnxKZ?sWw9Q@B`QxpVZH#=NgKbEq?xOmsA>SUtb@%(9v@T zVsaH$PQ-_o)Qm6`=@qvgI2;Z@q}CZRo`stQer>5G8e5my4CXEh^CT4CHjaC}9?{K0 z$O&($1U%8bR;v{dcYhm%^O9V6PFgxKporEb{=Djv}7NhUQZ#8TNvL0_NhN zpdjG!cwn(uKwDk``_Co}Ev8e>XOzzgOoQTEd*;Gmnz9rW3I&M8V#v(QgrcG%P^;C@ z+1bfp?EcBQ$=j!OF1OE1fUdXLDR2(JYL~2dh{}J0;wgy^K9?&YTb2(8W8+7JA12t6 za%7Hg8ovjl(FiTAE%3|0ARIXHz6G;l!311sgoTBKM%*UnGOR4mGqn@!JL9_3Gp~Z> z{(6Z9p5FXo8}~etjeBORPg}}0?N~!YJv1~lfTgz=G8Dzb^Xb54Jd))oo;F?OoGLPS zee{DaT5J+A3>zitarZCFC+`J^U;fkNL<>x4^vOPTl^zTR1GKld!`H@^F|L6LX7M&{ zIA}acIyz>{0a00^F4~fx%15b|k+|p_1^WSy+Zxk*z z((l+8X-U2;oygOcJEspZj3vh3pSpKnaW$YpY_$lC`IPbC@H0!Ad}tF|z0RZAYfnh` z3=gmm{_}^(`7iFdNp1l4dp_;=2p%dvUFBG+@kd(qwpj}i9kWBpkvIuC`Kgv6`dk_f h&$IvkH~dc%_#Nkm8M#Em0nY#c002ovPDHLkV1hsWYZL$g literal 0 HcmV?d00001 diff --git a/vv/icons/ducky.bmp b/vv/icons/ducky.bmp new file mode 100755 index 0000000000000000000000000000000000000000..00c1d20dce3bff480162a8443a1e659f07b41e87 GIT binary patch literal 105014 zcmeFa2b5gpkv3fQ-tGwsGs-z9k}=NS{fu|lyZi6wwKv(Y1P5#|m^By!_L4zlP!`G{ zfe6Z)oO^QU+>?8HLQl?`na(-f4*#k5wuE5i=JjI1|BH+95T8zU=?;&P+7*ce{a7F=SCENlraZV4}F3C(T|$Xk4AO@TG7 z-YxBp8+x3-8T7qq3GTVzy^`-o(vtQ`_W5Ea&lPxPEcoxk{%`e)-!MnM-W&QN;Usds zS=`he+Gq-I>JYE%@U1a=R~Y@P+X8Fa{Hxmh%i4U)T0P5Jy^C4{87;x(E&gRKzJ)FR z1+BqlEzzaM=)8__X1jk@hku#T_0CeH%BD}x~6lxZAH>4Z8b);qDm z33Ya;b3m;NYMoH)VhwIV>6AQ0?U-Y5FKh`cY4*=ExKmX&Xt2@qs~uSD6dFA8T6e0# zF}vP3R~O7Q1m|nK3sjy=t#4^taE&Rv-Wa^j6uN8Jw|_?bT;8^%UBh-|FtdF!@UNrZ z|I-urdPn5TM*sEg{&mgXMS9O%ohMVz(bC{x4GyTYVT}W;99ZqdDhE_@uW&+z6RX@< ziJG* z@S7dMZx{nNxB9Pd@~zc-mutNlO7|?KH$~}|*E@w;yHI0il{Qvs!wM@Z>{#YVcm;j& z(zjTpO;+uY)wu{=H4dn>JeU1)HmDqV9`?o5q$PJ>fcF(W8!@+wDK zjXSf!y-4j@tn|&VaV==@5OR!xFPXe|5Bpzqhp+IPm$YlrJ`-kkO#A<%&wF#P>nk0B zTbjI^8r`e3uH`yUrrI?}?UvQMSe;8=?_v~NY)ELKyB`!5D78U}4ayu)YR3u!1513% ziV7%GJ}PaSUe?^T4z-{ zGisd+mCp2fXL_A&f!4LE*|)Ymw5ikg%L(rXo@BO`w9jOJCT7lC{VxuC{=ZJ|H(ElQ zo4gyft`%BWrplhCbjliBSZAXYtJ(>bJQJfd%!U;Xp~8jb4pcap!ifqeD|fMS7nVDP zN*AkeVz~p#?BohN1)>rgE3?bWT}GjT5Q8o2Nc_&$ciOap~A)# zR(Yi(wb~_9*sx$yUNVzf?MSb4$*b+@HTF!6W2M1&T~lyVhxb2+z1hC#XL{R`b`9H~ zgPAN__~AkK*V}wIHU-z|y^A%j`6|b(21iQ0L#TH_jRPwkP+=!{lvAyea0x2qboWcn zDm<**jb%=za7z!M%)zn5|5)n4VjC;6VTqHKd03eTi(OFc#1c0>D6~Vq4fAa*-_8oH zSTw_mEv&@K6joV(rPbS6tp%#BP-VwzawvCUg&WIVpm0LDE8+j; zu^Y-g%cZZoDZ&&wAm7G{U98j%Wo{^Q(KAb3SmcC!n~-l8 z2szf2VyCRojs+Gdm`*LVr{rG1)1xeZI=$Q_E1H7530djP>`LpxddGT$FQd(UeY5S} zKHs~^fRnUOX`c==6^`&j1KzJS`_^fE^OQD0WkuqDEl^{{Y6n#C@KWhWV5Y+TUvR>K z#46kbA&wa=_h5w=D!f?X#d0rJ`LNmxRUW8vW2H9%s&YaUlu%&7Qa3%h(g&43`fjm{ z0#3dSa;7nN26Lt{&q5FKXE1L@R%8>3>{w`#mD$oOo#~|(%p1p|X?exW;yTNEt#@fl zFhlSDevjvnBlaoZw4`0r_9-xP+9uxC<+`;oxL)l^Yp}998`RpN+Rm!%@+v#4ppZi0 z+_Vu*%PB0#NHm?ojQQzR2O>g9<+=yio3C)j?JrAf%Ohq0|K> z1RGZ9kQLYj2{2hxEZ2&8Ho{Vo4T>yKVu6w=nZlAbu3lb)+s$J+C1y@ z-YxB(`}=*x)?^PfX@8P^3e5b%?D(SIw@KrbDV4e>uW8J%_?fivsxFcc3`yw ztL#wakQ}SrtlBF%R{9vngMahOjmObv}ZPGQ^Z3Q%0C7 z%9Ig8Q7!!_iZ+#gEcXc&excll7K9k++wuvmVjAs#QG4{g|IG2S(bzojt!{$J+BXw*M+b_M5TzzFn2--;fKG9)rUbD1QkID zYQk6@gmOQWd9aj-0W9+fonIQZciv*0#LbI;+Mtug6tyWEp(;3Vzx_Q{xerYrFEX4hu5 zOIB}#S{tjfL$woYU0CbJ8V}U^2rYFyI5Y$kt_+b=WkQ%?^+8r2#5#&6bn7>Wpb|k9 z24xs14GV)R2-+a%L!b+TAwpL*k1h2oTrp0XtKw4`0eJ^?dFC#~OYb={!xEmS&%dOJyyYn@Q%#(EEVofql} z7Om}fz~Lr$Dl1r$Y~VO5C&Zk)IrpWsEeR30=f`ksXhd?VWB@I{R)Rq2EVCn}ww^nlU}N*}q(2kIbUhQJU; zRfws>GL0x`5`aNX1o^iTPtb%w8$fN4>4HovqDJyCXhkqY2{Y|cFh#%=h0Yk7V$dGJ zwg@(bDQ(k)P$x1&1REo0h|o(^VW+a{zTA)P)EMx}cyB3HlJ|!{oX! zYC}vPL~Q_dLDUDaF$DS`xgqplyfF+-BDO`KOT_M|&=X_kC^N@cSBzkz7AdgQhp;{@ z)J0G!f|mb$4RHoSU4&JKv62WhDrSnDP~>1$L4r-CpW2{hURkM!<=R-T4f7qW*bP$6 zQ|2M3q|OO>R>-vwc~D}*A`2AEV2MpAb<9#YQmP#{YOM#Sd>_AONxQb~4`L>N*z@C7 z`)ZwApxEL@mH(21+Rwv9h;g)_KFmFYh7fBEv&JxCpfL=FFzSP>F+^8G2tWQhl`bE< z^v5OR(!7FI<4P(~FIX$vSu74teL-v;?sEV8l^D;8R?$clwl zP*`LYwz)Nq&05>O3!ZEHR!LgI{vc*{kNW zwrIkjqG&^ysSIKbk<^s<5nB*ORhTvKrVt4QJXq``Cc2uQ#siKYOFXQ=2{{%labYF3 zR*AWmo?OCvJNXtYoM9za$e)J785%k$w$3WHr7N8BO7}XIZReE#;`^4gYuElDW*+IZ zZ_&Bus6C+ZF_oLCeW(sFO+e5F6Umr9O!v2R$5V0@#%7VVL|97%T199Rv7JBQAi0Q^JPY5Mit~EK~)FhAwuo0vpvZRY9l@VYy!@^$Pi1VpHzJIv%5Hf+SNY_mTjo z$PW246k$jlZGl276j@o34HVW?g(F?z+oZ9bb|q_@Yuzr7nf)gBzqHs_YF%=T2XsDx zsuw@%0_6IOrAT9#B1TJ?5YigK77<%S)*2DoqRbdW$=i8B!r_7K93*WKXy=cKB@>Zf zp@n_|Gsd7JDmfaXRNl05@HB>nju>{vz$CJ^C>p|oDkxVH0RZ)WDwzyK4={a%=|$91 z&j;(n93(#KUFKP(h=esksPG7-9-+Vqd3G#zW2H}^GATqYph{w>p~y)rLXjN`tWapf zA{!K2pxAaY}LyO1^VVN!h$^cJvZvTsd_hR-AwDJ>Ovn(RP7RGIA9oMSt7O)X0Sbh z2ZBULoSdK%hf8kckBxB&Gpzk%rytT5Wu_SPM8O;bbBvi|f;o;oQRt4KDS}-QHWicndl4$GAhp@9=?HGZh_f;L3|LLDcg>qSybE4*0f5b8oq9R;O`wINXW zpwxqOzl_5&ixM-RhI8vM`u(Cp)$Z-Jy%d@2C+p)}8dJsQidPdjyP8FvY+a0b>L^W7rv|Y^pN` zT~X+aKxYKIqKU^Q5j&#fM(*vAgqtGJ8;1TU4#aRU#s*?+Fvj|0*d0N0lrS?A$Kg2k z#-N>YLTn1Mrih>xNqxhaXjUD9dN1b{qNt6aN(3Sdf`pAi7poDOI+~yms;KWt*D60& z1z08V0YYt9#-k1L5jQB{v(tGtA&*O>^DHdi!ip@iVyjHyxZYsPvnMra*P>kpGjCn6 z-(hmD&<8;4MJT*<~>E`tbDMw7W93 zJ}`KZQnC%l4ORrZismcK}!$}K2!x{hM255MyX(1kW*^Z5t6mUgx09g7NgLoB}oo6 z1cllts}bdfC~J?f)+mRK$Qnd>Wr&q{Ajgiyo&;vcuj@tRx^5`!U}Gc`jOWQ{rZY z4pu^=pw#LqunPrFAZAXA2*n$L$)7d41Fl7tdBT@ipXKbHBRA_(OHBFYrBYyc~RNZ;Z*&O!&vv&l+5 z)EJeV3kztPfW&DI%(V&GGeXuBE3&ZC8M(sp>|k=2z%^u-!OVkA6E_>Yf*~L@1}|ZT z07DIy2$97dbffd+N-A3TRl*EU!!98t@!%3>dSg_jIkbrrU(WUup@vCClQ@*mz761qiU zG!CPjJsXHa4{rfAiKO3Y4ig_uJarg5xf;49LWoj^pvEt2jbevL&(!kKom!5Nx-is> zG}0rDQr88bmW$IW16av>I3-RjaS<6%$@dV@$_@_{yP?Ph`3}f+LbesMXJon4Lg6G7 zIKHHs(fX512CoUb3})UK@hxn0v8JHV6ru)VD`5tVQQmc--U~+yj}O#;j8mZKj#EB% zvDW{Cn7IfZ%FUz{uKT}XMufpA498$32E)WG6U9uhiGnG}hGQ@h!*TxIp&0Z>SvTjb z8%5BBh^y!j1#=8dT!_#jGMz|ui!O}aB2fa(5gI5^g_-iw+*^o|hAl|r(+yz>HY7r$ z#RGm?%~9^-n+!NHO`1+0!G@Nqxgf{Ea;!p@B{gpnizXr0{-fqeZ8F+i19lnAJZhYt z-Q<($15^pLkko~|BQe>+TlJhT?uif&W{&)q1gwX0Dk;2NdXUJ+Bi{(HQMTGJ)QF@3<(md*e62c& zRRLNSC2hJXb<-lKd@5`pdj@l-A$JP%EV2UY3w_DMJ+FSd3}zl^xscK9ml=Z4auGAs zuO#Ppc@(94V66ug_A4Gti?0QC23c=T?R8x_xa|v1m#U4wuVuvWIFgQD^bZj8laShNg;(- z_H>&PmHc~UOdm&!geB=J)iCA=mHSc^)O8UsCQ@fIQ=H<%#bCwyjjWKhab;X%6 zj>;fw4a)vkL?6e#xc{$LqT_f@?w4bhVF|}rQXk# zU=ksAsr2W!dx8Myx=T!M%}2YA85YMFj({;tw{k~97EQNr8!w#Nqu3E+lmUtqG=^g^93>j9pO|Q9 z4GO9V4b==qVKN3&kwjtBA17svk+hzaE{;%)f`K?i8#7l!xALVN-Em6%dU&eYo)~(g zj;$mn&;?NyOsLmt!>lR{3O|%l(-UflXG<(+qm73ls&EuEI8A*|V$y7oZA;0ThU}?Z ztEY;s$qenPwaZ{eXODcx|qgG{8Bx${=B;*iFsQI@;@r4SbIw&(lbvrtndcR>WbGV-s?w@SH`+ntG|j zdez=C*SuW@Gx2!*zFrTs_=Q%H`iXo1CQ+u7gp7hoA`R=0;UNDwAE0_hDr^$p>Ww9y zCIy+E2S~H6B;65g=6nE;LWK5S;?23jEhMya z@j(ZlByALF0fGf=gz)OL%VTDnEtuBmqe8hoLV46BqFIt%_C~NTN<8mCBLAT{LnJSc40OHN>8Al0 z?wt|r5J|k;%5x#UZG&cVNKQroNR0byc>i8aO%;Y24grBV}wku2i1pA zACe6d6M*9}q+VwXhPd$A7^RTX7-qx=L|`OBsiTAtg9wcw9FD_Ci~!%mIdnrvFo+~C zFh{V9ufJ&&1w)t_L{!tk1gyj>J^Jq})uxOdlm_j7wv9 z858Bq0k1UL`J@f4YZ6ftqIGAgAT;=)-v4nkUfST?5TQa}6M&|WV2WW6uZ{+JyJjd3 z)UJsWFh~~@7RKXjJjO=jY&4FeF&N;@nbrvCMApfvg0U#2cKyV>39T`DRd19+6Yq** zX9SwUOcQ42IK8%4B&|(LRMspCtx+)0B2QUWkmd6MwT1|&!*W%K@pYl3GpOfh9F+S= z!&csAfZK)?q7;C{Uq^9#2FrK zICaMJF%B3i{ky^>wUp+WTWHq|8p4cJ#$lm8OowOGNP{c1NR}j$6#=LUU{w&SLqZL0 zc_#64qe%0c-Ml90i%NnT=q6Ptby{>GfikqXFh5xOqe%bSQXlQ6sS|;g<%R^c zD5xps5N2uvq+U~SiL|7w$+qAb8)QxVKy%?Lyk)L=`-7NyZ7d{f4$|(J4w4vuB4&Ws zGn`W<<$q$-tW$*cIJCxSSCc+OTV(5ltTx0df>7#*Qa_gXgd$SlW1buG-B{wm5-%$J zSn6f8jftyTnnh|yc5$I}FYlT5P|H&2h^1&_U2n8fGuBAa@e7wdkmML;DwR^l!u^-KFet>MjI{Sph=r9UWfEVh*)bUri-w!;B`t^_@X#chc!m z1RE@LL7pq+{4|`hU0*m^;!NtDuPXavn5hazR(AMVdsKdLV1|anx)c2w?4=qe(bMdU z0JTA+y8j|(q;WA`z|cu%6#-V{VcAaMv|aYToxL-|j$FX~cVv5fF>g7qr^wI((*x}IVx+8lkBpE6lFqBTrkr> zHJW1B7GupZD&@PPq+1&zqKx%MX|k;?g6*O(5+(I?A2AA)dFsO?T^r@wZOrt;u`wW{ zkpw=%tr2NK2gR8XttK?^h0(OGnx7{ni90K$nKmK=Am1g+oxxKsIC)`je=^iuRrbd) z6OYIL#T=j=jvoHcW?!YH8&`Xhodj=G@GOSmGbj!qQltN}kCsOHn4(w1r+mrg6Wtfnf6 zRY6V$cv!9n@@M2{t#D%M)`}TjQWbC&*(YG;pfkL%B?z=AgSsVDPIM-M390%oYBZ@o z*cp{|#sxm#kF-3N?{U`9mP%F`NGbHQb8h(1hDWDi?-+Y?l)XC0w)WyPUF@k&e7Xyt z?V&%uWM*#+;*L>#YYY!ha^%>A4;{iOCp+)rO+z=41T+f95ALiZo|-Z@IshlcPalvr z;)b9(C}|65%STsK=%Tr6KIFqO-xFnhG~7m=ABijPj4-n(AC2QMMI@m+PU|^4BQPEV zvnXqf${M0j<7Zk?Xo_-irzjXgf-X!aek%D=sJZ~F4zLP8mikzs8}sb4Y%4o8BR@Iz z{$%ou&a1~h0W$x-iRy`EDq5L9v^ zw1o-t(wtlm&H} z&w1n?QEK*64MTJpVM*E@L!awS5t@RG2 z#{HUE53150RHgk&BmcDy9&g4c+woZwzGTMN2Vna!?3us=Q+Q+=-?QLHcKp!EPCD_7 z6VE$|VaxLnPhH@HLLZd)XeS0=XHH^DC5@Ev13GD4I<|(Hkydq5Zf54o1|+>4X@3$L zQ_9nZiI|2_5;{;)*A~VR8pr`t4D}IE2dF7Tdl6#93O3WRAGBm$%l{%ZKSqj9$qkUK zlXh-6Fl$;kabel{3whH?()lW}PsU6<9)D?Clr;rNt8a?ROd`$Pcact+nYq}Jc3;G} z1e43`Tf>5c89t7JbV47c{O$6I9&>C^A6%luJ!=AA_ucNWgQyJ+@LOVjVIO#P)w_A4zu z+6Yg!;&UDFVmG|j2ipc=$1v_4XZtSTfhl%q29H?rs1@Fwf#Vi_EZC!*YDA z(1&FKsNe_G)QglKYWZOsG(|^If+pK&hr!3gZIoehy(t??ctR7@6A^|;F#vrrY55?d z&AL&clP1_m)7c({mKZius}!|iTCy%3F;MPX1+uBBra*i)S3{m<4x_vsZ_N zr%m#Qo6;XprvIoc)x8w2kPa&R zDoJ)ADCvk#V!i2TXx?lkdX0`Eq;3*18C3U^l#^CPbGljT_VmXE9%o3dMx)UplSb~k zd5+h~g+*;K=|ml_qZ28(QF=z0krq3#Ggf$i>RV-lSII4N&D*EIOrbmag>E}>xE(ZG z&rg_%G9xMcxyYZmGS*1vz|iNqDlDrB(cFBt3qP{q!3%8L2z$XS|D7@ILEY@1S7+Q+ zJn#0r*|(ja_k**Ux1F1NXLiO7$|ZqR86J!&G;K6g|>;AyP9+ zM@J7pO^A|1!i)p+94Tk4aAJDt$s}g368jXGiO1u|?U66HI-og{-Y&}9`LRlEVM=TNr!wR2qItJxXa4YP#t+YB z+@3Y(&YU?v%AZ3ST6y{}Yvqq<@Nqpp(G1VD!E;7@!NgwdWG{B%OFgi)3tsG^YG*4s zd#RVb)(>wE2)jmQdneezDR$I~@7wW&i=B6o9=X`d%4zLC)(7dBbvhS~7DLmbM5$CJ3eoO=Zx@d8$QzpPqpHcZTNIM zd&bC~GvU^5eA$ez_OqR%_|^m-w%{@13Gkc?@;q4Vqcux4T<1cktMkR}oD!gc&~83` z-OI;pqyaTasVyzO8RoDVrad^4vX0OtDeL&~DXknZ(X=-08!(8d2}1)vz@yxU#XiXM zq-ELQ)a1%jNz7a&_Ng%wkH^o3BY$CZlAyRbLQ{?8VK9iG=M=M+ZW>k-777D+)+M}e z6AoX%*M{(!ZhWjIhLrRn!qrT(%u zr#HBmj7Cr@`x(sH>#9JwZh{D;ptZP zLI=Lm18)xCo-vXdylZ72k@S;BG!wnGQ@KIc+!E#rf|aSIE zAE?Uwxnj;wi|72LaLzpivwvEY{DJ%J z3_fKLeyd6Obwm1p)TG|8NV~s0?Sb;N2dh&bR?2>>!>1bY`3`uwhiw~_?HOlBrrCQ| zcG4ls@~{FganRKv>e)+i<_}@!_c#F3eg1LG&{AnWiq{pF_IDC(s0|7~KGv*VVOL*uw- zKzL(t)-&DdzckIeLqG3d)pPHzpMS4<-hZg&zpj|`tIE`e>rx+9r#_^X|3)QyRLvgK zvj5cM(~aTiX);d>ebR2_My`{zvWHUlgYQEIa+4tU32&XZ$>G_Wfn457o&Y z)d)|v;`1ha)ePH*aQ`G6oq-SSc+Mjfcxi5|l8$zw^?!Q4+^mgwzeH|!X@SlVZ(rPEx zH8;&QZht;z;_-O1Uwqi?WOd$*>M*PKvsyo^39{-SDnc{>bH*+lotbrDD(zr@`t3bS z*J{_Vth{+e%?-=y)-0%6zPxJQmn-J|R4sd=IpsfFQXbQ@$93}G8Dvj1u_v4H>1KGo zjeKi6zG!4GcHmYcVdkk8e5^6`p}INu<){7VRN7r9=iGgI&X3N{`dMD;{pIq9m9pP8 z!Lvqqi83_UGX_Vd;C&mMcG9>`iI2_ztPj(%frbQTsK+8HwRt^5bn~B%nE~3ob1_Nd zdbSRc4q!8cpdrMnLPCiT3;jaA8_!H$cOuD~T_yIJFcXi*wek2*Ivuid2UL1kg-fWQ zO?gnjN5?*}u#d(vULISuN&oe=_5XN_>3d)6_|Aen6NB(n`+CAQpLq zV!y1&2_H^>C$H}+xn-_-`>dFW$K$18@vrMIEGTxSl{kT)c+9dac*+7NFRa`>wR&0Q zKit&x}UU+f_s`6aqa zJsEt}jIWrfv-wgtd%hi?Xb~Q%Prol`?w!Zy+;%MEwqu#MAD?^Isq~-brahn#ext@G zTj044c*Tr6huOhNeAfaW*&xdfMIORTZIGmBI==6mFvGVrB}n8?#tac?LnMeMO*Gf4 zQ8Sb)?npG<8NGxVRu#emk5J-GDRRJjQ}?LGuKAnoDzPhonRq;&;Fy)erv zJ3F0nY6eeEWt^W}^DWia7b}1G?cObEbsM2!Gt_Ltstusn45gc)cq8PmgRC`pax=WU z2zD>r@L}fT-MC|7_A9;kMjyP^53div8-w`f0KPduxz-!~vX{D3o;BiQwHZGStUM088HE&l2Gx2!**o=5b^XS6-q0INE;R6et8~^%qee36z+`74C zEmp6G%1x-)1Z5kbcs&$sfV>TmvjMW!!P(X9^cMVZBOYA}yH;f!ns#Pf;)y`$1uD;Dtoan^|$pIcO092``dGFe|y#s4$b}HJ9F+lk$O+A{Fi0I zqYdn-CVasNFZbY%VLZq&^N}6SIk3=sSxFQ`iMINqL z`=6M}^~y?okn3ET)mQ0GPB>pBcEvCw*Dt zrJFEsBge@GIJ+Lsk>lz0?9@6qwE<3UfDhKgu@$g)QQF?ccQ*?AEUq@R*W4-2~6K z!z;gsnGdaS#>VnJ$hQkXLx^UT4Sd0QyGYyCsjvSrW?=YYkQqsUM8?-aU8-#oA!vk( z9NOJ6$k#)g`M%ut2x|<{ZjJIF=D3AoKb)DquYUY0xnGhNztWhI>U|J{R8uEJ2LOicjx~6Z00YD z(jTgq{nn8Bbh~V8m+aL(+&K&fIoMKrW|kn;f?Fw)Z~&d`iB)iZn*PMB6wmHAnY6N)@@&s;b+ z8A#r2SB+iaICIJV>1FjgS^0V_*+^+v?s_=C4$nxw7Ei5(Q)}S#Iy|>oR=O=s8!VSJxjn>}MK2d7X z5Z9~|p+1ya=poGH+W)0`>eAbiw5z~AFUb;#;6}1LUlOvuokRTKr%=`)EC! zT#u*L%JMg)R&16xY?14?$aI^SdNZom%d~6fHQl(fWzBrWIykx{<=Dc%)69NqQrI(z z6l#WLJ4bNWAnY7~U4yu52;UkPj!ej2Xl(k2>MAes`>3t!4C1Z<*fjvV`E}<2+cUuSj(qdv$XnXMU5&j@ zHuOEC>VH;aeooi_f_`9s`^4L(siR$%cg^<0{qEgn+Y3#@ul3u0-V^w4i~Ft?>sK3X z8}yE4249*kL}vlC@%g##IP2jD-wx1DXB>$p>V7G!I-;&ftETZGny zR=d-(T##%1aYJ(b?A2zU3ub^=s0! zx2#fqb!F=Yrd!V%Rxhkyc2isCH@oJ4vvcV!riH6pmZfS|%eBiEHZ5P;urBrNn)JM- zH#TZ<$<6S^}ieZlfig&=XJTjmie1!f2e91CCN|M%mgJEg6)Y;3O3`Bz%scnQLcM zp|lb|=FKd~ohq;-*8p5?_PJo@?{3|H>o*PG+|qu-0{zBR-8!aQD>QszndUpUwEyHE zdmg#V{QbXe+ql*+f0<$F&7DiX(v$H8)4a8Y98mk`p(;^#KxQXsD)z&)XIH;Dq%Fb@Jq< ztI$3d%sl!l!>u=&S3|=Z&|VLkEug+-zV5GYHh%l-rkieTS+dqJd!u3DjUCIcH!fMD zS(Ks4OjRwG>z9LO8R(X#8dlC~Tp-geNBtI1trRpH7O1u?ulvSgWyU}1@X!Pt7=weu zu#dwgftik3+XrF$#QX#8?{s^v$ZzSKOMGU^|J@$%dSd`gA!drFn&ZL%A%xDj<(Nqv zM!+RD7cmoKO%b6c%(5?hxnQb#G`S1#Dzwi9Ge5tlHvg=vRSm1!|Wu%~GaXlA>QKXqO0@#Z0pjG@C%b z1(Zv%dJ~kT+--v6R(5n6j*Q`2gbhj z_2z|(T2@}ywe*Ij1?w6YENfo8pmk|R6ZzH<${(Rb!)(|7Sx&ZRm*N4PTTJg-nR(v&9HZ;@tq0b&$( z)kXjP$IDT>kZG4P?FvD+jG)rE4(b=pQO^A_e!s}f>F8aKL_s@)lzhd%YhY#9gDdw0k5TwIy=@5>%ye9%G zacP0$_@M89&o4M>SKO{JW}fP`{@_>r>p`~$bell80d(s?w;FV-I8@eR!dJ78VRH#T zYf!t9UZPqD^&6mJO`3B4O-*U{jLv;|itU($JrlD16L@S&!VJDUg~uk?(Fr^-#JIzr zUfAA+J56kRk9=F}>ph=W{e8w8{bhgPCW8;!MAk*;cF;20t|&BwuB)CrJZ!n*zoex7 zud*wNnVc@~-{nvL-+ydg0h)E7*}$}`P_s^G*ubb2vk|l#K(mqidYNH0)2#yaI@GKM z^>WlMCunI_gJ!WzwP?O>{^rKC?{&!@8^^7K@X8RpHUe*s;GQu!JcdUn@z@j`y8y=~ z;hk|fFen@uV~0lYt$y6yE8E#6+uh1u?b>p~uLP4v4uG;m3 z4qLt>d4T5CZ&wU6$NN2hUp;=)uEFpAg<&zMR)KoGT)mDdH=t%CYBqsx9ctDyncwb8zpF3(fdTnLBlx=^e5yC)>0#N{LD{QA z!kfdg9mB%jLD{|$;lMaMG=WDa@a-{pdyF0&8O8mBa;k0ma7P#0VS<-io>M0eeo5Mu zw=0I3A5>nzg0bsf?ER~y9rHlD4D>5NyOL@c)oM_#7V1_p5wrYK5 z^HR{SW2zO)lo@yQr0%lGch0~YW3Y8tcxDKm9>C}N+16orbqKeOz|IkPYm~h;fp3km zy~D!3AviRQM@HF^QOeNX9%F|`WQRuBz5(22h8-q&z3p44%vb&mOWHMWR|YdXj5Etm z4hiQbZ`wYzVT*diy>KDr`61le53l#l-eX*UwELFh{kOc|yY_f@ z>ft^(G608%VgE237$V<4$c~J{JLBx=IKDHE2ZoUNfKJ$9OyAX>HIXEIlXive3Sj2t zCfB!f2JqA{oS#fTK9;fHmUiBoa>^n5z>#vom2$!+f5$p|pJndjV{>jBob#R5^>=pt z{c{(7xYzZigSNDjUZF6Ua@IkI%M{l zv%wJ?9+-yR6Yy%+Z?hbQO6$4m(U)I8{p0&zy8Yg*k3Mtg&>6#VmFta?vDHU!;*H*+h@hh9^>SStV!XFBPDw} z^}GeoO~WY*oOjbcv3v)e*QW@xq5u?nD7F-Nu*ky-T=G0O%XVTm!G@i2vy)Etkpnqw zgtslU%kRa3J5LN0w>p1#?~8NiEzg*@G;{v)g^O2jxbZLl?TKA4=Jc&Q(g(YG*`7YO zyI0uN%XaqQj&9u1&Gz;Q`v-7eKVfEP*ZkdvT=S=%5lC9n{)l~6%$(@7EjcqIoVUwz zr{(7?aBf<5ax(4w==Z8E_cwX}M&rv+*rD8)QsRR$50-dXnGcGbLcRxc+*ImhIpLfK z&v@8r7k+5P_btLP3p;QD-W*(i!2HI0RZB9K%wDi$Ew}>@*9zdu4n22s1l+*p43D*2Q*ovpr_q*C#Onb9QOp>q=rKX;;!dD`vL$IAv!> zglrq;&fr-KoW8I+XZ%=;EpIGTIvuT_ioZG#o>y*>mHL>%Cn)?vnGZ`ntk8=EUOJ5| z&x1K$IPb=@PCVm)Q&xE2f=6fA{z0~5;!6)6UzE9MPUhkpHs1Kldmgy%hMO}ME!ent z^Vc6dn7OZ8!i+$1#w-B_wsqmQPPVg)?KUH)0p{$|o*uk1(*a3Knq;39Gq=}Xfb7xq z>>13OmYte`6BC;%C-X)__2a=7YsBP=4tS&YG}xiom0so($^)#_i=|#H@<9QIO@Wu{ zoE#U+b~B1OoNfESl5%L8?H!!;X4ism-jz9bcE+4}YgVqCzjWoi`HPpW{_@)AvSr)4 zVMhZdDDd3Oe6)^-2=P2GI#4rEJ-~}(ypX^R?I9eFk#k=EXOL# zo)S(^!RZT`xl`M_{B3>Kv+4m|pVuPBw{<%q*C~|w>AbNrAC&o6NdSxdP(;VGV4;tY zlkb6CHwBzCPCR87j!)y^3EVTj@af8o>%X;d-h!o>nHh7JWG>mX zUPo&_NlV&i-wBw0MlZ{?V}V1Kbs^>S1w1>w==8*2-TBPC`HL3L zTaubSclqi~cO9z|vV2hN!ZIKG|Jys)*f!7Wj-T_qlq|bnQ|M*%AzBmtt7< zrD%#~Yd#D^h86u#w7`G@-Iop6(4lCsE^8d?W?QvlJGLBKvThVfiIjC0Nl_H<6e-KH zC0o|bx{IVp@hV>43uSOPFJ&(SwofLN0)2mY@WKKF!FXQ$ao+Pk=Xs7P$4oqp92?`o zoC9+XO<6Ezz?i|24EF7_zBC$=tS63|7_`RW$}WDgcI@24%HK>?esouLW(m$Lu-b*n zvkRJ>Sk%x&%(#P_nM}ax2#ZFo;A*VXM9s-h;oA|)CW-;QgugP zsQ170^|xMm?bY|b_k(YK>#fSF6DR)WUn}$ijHZ~G=f(t@KW-J+goqOYt#KYLJdDZ8 zIW(iwcxxZ@Nv4ZpXBe78aA}KOSYzZS7w^q@gy&Z&`QrQI(Dg=f`F=WOQ0tw>dWQl$@}E~wJ(9>}Dlv6F3LKi*c`&9 zE$S<~xC);!sCQU zbMu@M&D?a-;v5p`$0mT40uCiSqdXhR(FDv}RKsE238s#6ZDHzMZrU#PGUKJS|G9eR z`~sYtKh#XkJy|o;P;>ih=e@m~$}wYw67#H@DHIBCkM05$^|zsG2RpYbI(J|A+2!Y7 z{lk~Pbn5x%zkK|yzvn)khu%1K1B{Dclfadi*8#X6gX;jDg1qGTGa;fyM5749JPtmI zHiiWD#5v6#*Ac>&5S`7ux=HKuIyK8&SOJPNhnm5fdsugu;!O4Jzi9N8c()W3p4|f| z6bc{QPl7%IJt3}Z4Z1d2TkzPm^^-sO_{5)l|KvOWc>E))sw2wvMwwB72@xC;xFvAs ziwivmH2m2uf{UjSwl)#0B3J~JjWsr$V*_dEOUbf{G0h&fhp}~+H3#w9HeT6;OLA-3 zg=GpgXCGqSeW;mJRnM?mKl{k}w=H*-SFBKSN)TuK2hyJ#gP@C6b!@QC&8oJ5syY1J z<*lkScaB}SU(vRs(uCMRidl*?#^kZd9#Rf^^61IS5|U^Dr9+^>eRctCl=iSOfvTUw z`#2z%ZuAMz#jtaaYmd-(+Km8f+NKj`7gw=yg<6~I=Ba2?eXp|mHr7m5{>Jv>>-LiG zmx4kGG*c)PF0Lk6&jxk`xz+&F>~Nhyb~AuCcd?to_Jm?l)E-6g>crofnmaRF@- zx+L(3=s65B#ZdDk+Q@m1Gf&@dHeR-&b2yg45jveF%O-`o1ZpVSVCyb6hu|7n0@(Nn z<(4z3ooCfEaON(Yc7FT3?YC1(2Y^E9DUD_dg@QRMyfd)G+JY)|kkOg52pXc;pTNN+ zH=1Dl&?ff&%)lg9Q z|0uC$hSr4FG#j7`!>t$&rEoM2<}79ZRuOC>bBN3%k!HL+_$8dm<5ZscMDD3<{1Wqv z%qNg$+_caof+GhL8L(u~D4PL2anvVJ7sHMSyBTEHw(#;QURYx17qDjT*y%g$R}=5H zD2|yzxhSz_3WdT?ondI-@aP+l-aA8F{7&?#_s zfpdw>lV@Z`3+UuICy#akCIlGIfjP@YGB}We-Wc>m$wO<~g&RBcdDgguXXo(DZPiD< z=RTg$tSdKYDwK=TYo>iZuIktTT^0vpIJys}3|MmHnA!8>CKoj`$rlAf&pQWrI}cuo zT4_u<7);?%hEerXF4Wj$huXq}g}Tu=V}=c-;8qNJ_COtl_Q+vM)3^xrv#fd=K6L-! zx?(Xal#$YF=F(d3FZK$>=kfLdPUe|A z&pGpG=7H`Bh{HgV>@t%;?VFYyxd`U0%9v$?N$ihMsPPA(V~x9&;D(bhx=$W}jhZqKHRF>$uNgM;m`y+C{EyKm z!IS__9?iU}H^phApxr}#5=PQ!%%CyDnX+VC52dg_0s82nW}1t4XD+dGb5MQf^#<=H z=jQMIYgH&CWzmc;C%xITid{)I6v5#XnzQ5q*oy^CiKdFnjv4)9N@CM_Hl0_^JjQ7W z?uh84#0Je-97hHsU-G1+; zw~V``pitWS%;&i{7X$6aal<|iB}o9|avtxH^BFnLkYMD+{1WHSvq=%XJo-eAoHQDJ zOtyh3i-Y@|KEZS`ri-C22KpEp64;xdI|pUWaLvJrtDEfN0-Rlb@k3|5PYE&#<)tif zrcfw2_=7hF7eSMNp(GghDT%kqX}w33eKX2uikjiPdFIK3Jqy+}Ok~j`Fmloabo2D1 zDUI@FXv~mg-Eq3lRvTm8an!~^y$7u!c4G&xZm1fUpmy&2P0sS}mV!e0;!L4XIQt-4 z(YX$NF*cmWv8>9Pqn>5A+#NG1;FLrb^HiRBM05%05|~?LE)m>0^zk@FzlP2nTC-r1 zui?CvLi$vTp(e_-G3<&$M;Kd!czqkMtW=$Uq^fZ>%qg{hg|btwI8)?@W2>OquIkHF zjHQ`I^nuEvj99^=}U(`$l)M3^Y zVVz-U53<$(Uf*Pwm*LFZk9w5TG73jQc{MW>J$Pqu1q^}XqiJSM;zX9(E-9GsayNj8 zlM*+T=X|81CtYXMe#R#0P#U^K<`AedV@yL|61rp16~V3us!1@|8o(P{cy$%dF8tMX z-{gvN|G&afP+rXx3I%N-_os$sFvKfH6JXf~YlhC2Idar^=8@>><*9wfe;92J#p9Ka zb29-5CG#cnAmlr^7uO3QNkMePP% z&1_2IL;`I&W)oBniE~Qiq&c&44kO!WlcX8>DbUdXr$E0v#?$5KgDGZ+SE{4X6@tzk z*1mC~X`}MD+pNLYFri#7qi}STJGxPq z7&M!z)(~sihNk7$nr2SBmC4KsN6it%nIhd=*>eGK*u_Kw)zL3-h01y_S1WzquwnAg``!5DjP-;#ZLmVS%c*xk9ir8|QFVR( zyIr%tGA};;YYGZS%#p^K&vWJ8-Y@(c-yK;#WmtSpvjS~fpx(vqZO{eis+#ryv<09u z2<_X@x~Xbe{QAv%-_zaw(6y+&uN=Ts_#*kjH1m{yyA%0faOST~3-1m-e6wTro83!q zb}hc4UwWf^_RpF+{uC;2LlItt{PVmKRrpQ10w?4KlzptM8xi$Ec(Vd?< ec7JSHeE*v1gR!N5m{_}bKk_@VTM7z=0{l0plN1yH literal 0 HcmV?d00001 diff --git a/vv/icons/ducky.ico b/vv/icons/ducky.ico new file mode 100755 index 0000000000000000000000000000000000000000..359c4b973df9ca7979be5c643a436ccdaf5230db GIT binary patch literal 9662 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 literal 0 HcmV?d00001 diff --git a/vv/icons/ducky.png b/vv/icons/ducky.png new file mode 100644 index 0000000000000000000000000000000000000000..d33064fd36226f454eeef0954a4dd8f284626db2 GIT binary patch literal 21711 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 z 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 literal 0 HcmV?d00001 diff --git a/vv/icons/exit.png b/vv/icons/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..539cb2ead9326c23b17f51ace18dbcfbc11380cf GIT binary patch literal 1731 zcmV;!20ZzRP)@pyV>a&FIbX}Ud1vOzi0RdrY2 zs&nh!TeqsUTrP)An$`;78%hhs#M{LXrCs>;)*q0s41-g^(z8yjI62Hqx8 zwvC&eooM^z7sQjvC5Bk?@uW#;89f?zpFF{nmoJf~QYmPf2AvWJ1fUm$&(f!!9pQVa z)}T~HBACgAis!$*dGi}X+}<)~4DNMxAu($*EEu5>{1{PR4;QI7 zZ_v@!h8PVZD+q6!%}VQV3X}l?n}ao7_r{!rwe#mAI$;9-4y^KWOjx!I9XD=3qm(o5 zikza+fIyJ}&ev?=B|`)3g2;2($dMSka;1knOD{d|=)moZ7twa)2(BGHieJC~9=*)$ zEGKs{cE$`;uULT|>LZy{lA|yo6{kT_1Jj9w#7Qi4a-n|tas=7Bc=*##`0mgljHONu z`ufd5Rc=Y+S4&-vGoK{Yq3K!4s z-i66kl=;XVcNbMllirETzIVylie$OsG%Ku&vQeYtT|yw79uKHmUQuK~S9?1u_)P}c zFJ8zB6^REj+0YQc#M3C$Q3;oQ@Bl7q>D}LL+v5R4rXS)xI)ZZG6yE1@t*I3qY4=^6;qLD1xyEPna z*VUE0VEBEYNQ*?5vAle^c*(hy0sc~~72G@Y=n;lkHU$A)#|PWCi5EQNenX!z(JbnE zLO`AH#*ON9O>)ivcay<>e<6}fg_>NXYtJ6I7&m)1k~|kUtH+3e!-vsx{W?0YUd7dY z`_L2)d&te!Rv6477gu)f#KcI%A&2CEKLn1;3VATV3q|jR3ve;}%P-NtcrmmhBQm^J zX`44A@zqzD!`0Q5m3hdmwQJ$x{@JrgUA`;^2zluc_!BM8RmoLL5ahm{{`J=|ckM!o z2NLy^t`LU}!y(sM>B@KPKG*-JzknS_p@ev*it3RYLhSOU-F)H0yX?SM%H-PF}jiiq0S>iQ6{9 zx-KPF_PB?z6uHQQo*w-F@nc->>>M%xv_I|Z`#>+aCMHHOMxvOL7J0a5UslMarB0a? z8_QBe?34JqgzA~CD!)&dnD^)wQq?h-K$B6`l`yc;3 Z{{yLxMIXOrxTgRB002ovPDHLkV1gSWH7Ec8 literal 0 HcmV?d00001 diff --git a/vv/icons/fileopen.png b/vv/icons/fileopen.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6f17e9774b141a9891d95409440f35f0185e38 GIT binary patch literal 1662 zcmV-^27&pBP)NkluMLp6h%0z3=<;A2g_#%st8T@8|R6`^WPY zN+~|cy!}H_Tu~a@KD%tm_m%7DBeBj`kG8vQU){vgw8h}2SJgOx_Wy$a@FNi_DPZfe z`nBJwsC#Z*QE@GJoQ`tuDa(UlIM}E5i50 zBA$rOU%pfGhYOm1CieM!Vph$nt*?~TY^loi`LXV`5}%pm#t@`))-rF!=crz=2waH* z;&%?&t(Tk+00|(JQV1c$vDa8QD>{33#j+hQ&7QY9D6ARciDBIrh-i^WiBC;mWoDv} z!6`vsx{B(RFHl;wgmA7OUDr{{iz~czzq@99`0t%p{lXW}qVfl#^_OC$#}{5(QTOzo zk_Fo%L2DS5x`{{AAP_~_I{M52cSceSW=aW^ZDx7>212EvwFb$?inmyRDnA3U(o1R+5=&d7U!}&E2ZTB0{=@8pPcNL+3uBftDi44tm{OIN(koEl8E)va^lqVyXUj5-2)s2 zuHBC#0hkYqo2M57N?UsXwh`2YX_07*qo IM6N<$f-Pt`I{*Lx literal 0 HcmV?d00001 diff --git a/vv/icons/filesave.png b/vv/icons/filesave.png new file mode 100644 index 0000000000000000000000000000000000000000..8feec99bee8685290ec292e7baeb2e23ba4bdf0c GIT binary patch literal 1205 zcmV;m1WNmfP)NMq!WhGU zDb0?ir%%5E<_$1MjY0D7B#lW{;<)?El`Cg|1R~9@%$x6h^uLpO_>ug@xmmgJ*No_P znnEHG0)+hmDMa6YiFRG4o_LlgUp&G194;$ z#|Q7e%Hu~Tky2s+BT^*7)&c<-q*B=0DRAb}Cf_b=^dCQH;0Q1UG+z@p-S0s>z(fLJdaXofa#Y{a{XE!DHR|93_w4?hG<8kq+lom3=aj}y`daH}yY*TMGX*PU}a?k^Z$mMe=dBBKr3MP(B@#**TcTpzBa|A=h93v%QS-kjptJB{4u^z@&y0LCI4T6TSa45CS|$;yRAqEsIM__GKF%A16&yfb3{?Ev3O= zWp`NK(`0awX_vDHsHDgM8ZYP2344@ECC0|a7#$t8fc=zn6g_`~Gzu^#jRElxKudw6 z9$4;tmaREZLZad}%d_8@%6e3-*Khp}bb(|KKnidjfs}wT93TtVTG{6kY+YmJ^6l=8 z>lZ#>U;q0&umyDY?jo%iDv^z46gTJE4_y{w-(;l(uB)>!J7T{u)|M^Y%M$(Q0;0yWQjJ)lC|WuBldAVWm>@ zYqi>@@7LCS|K4h~T3%gTynM%)v;o`!%0SCx>I0b8{Dmvcx$`r{^6IAfuzWTu7V=>n zht*cAvEloba;37qRxV#(t5)yUfG*GhflRd$wsDcfR`M{f{>xbi>|uW%=st z#`gB=U1QP^==3?TwFS`Yb4+F%ysJLI!or#FfIoo|Kmay)=NJKTf0)V094!6;(N7PE TmU#bB00000NkvXXu0mjf&~!wG literal 0 HcmV?d00001 diff --git a/vv/icons/fusion.png b/vv/icons/fusion.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0779e719c980402d972db48563d256931017a4 GIT binary patch literal 835 zcmV-J1HAl+P)4^E?_6PGm<8@JzlE0}rzubeUG5un?yu!|U~?0Suk{1xlq7GxPJf-PZ?6lCZwMj$kl|`FGRkAS^m9jkP^bo+Snc z2g_D|=0A8mK7I;5_vSU6Y!04gJ?{4y=t%FUy0aK%1q{RB;n)}?NkSwNK`0a|z_ai+ z>)~tXVfXJcjBX0~%y#91>uxtRJda2uf?zO++35hBY!;p({DBD0l0;@p#=+O6$_0dw zBCVB+l|E$L0 zK||$&FFQM!3A}=X$-vX3gRh;3V^joZD^$LH1W!f@YOdU>T#(P_L9+YkGZX4-(;mUE zoQ5mRcTm&f#6`BL98G2R>=vc$ECWx+TX6N!1TL~o=^+qrz2;I4y!?<;wGSX0Wslc9 z86^PUiyJTAf^W5-Dd5V*uElEQ*Vfj!+6I#b2!Ovi0fp%!IH!z8QwOxp4uCoT_~8DS z>1Hz#1c91NCQWf(K^)-Q9N;TVTJ}Wj?h%854~N5ftJO-X5#?+NJf+rZHLI(u)a7#N zs&x=?B?4oAfB&u^2s%L!GM9nIVln1qS1|-&xQbnc4B#n%Z~we6`UQ!~DgMQJDwzNP N002ovPDHLkV1mZub<+R< literal 0 HcmV?d00001 diff --git a/vv/icons/invertcolor.png b/vv/icons/invertcolor.png new file mode 100644 index 0000000000000000000000000000000000000000..e65caf6146f59896b6092bc606171ec58f0fa0a3 GIT binary patch literal 3215 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

-7`}1pc_O5~9hQ-PBf5 zMb)Kcq*bfwbh(c1oiWkIv*&aexMz`0rz5}Le{l6?glO7F^zs$ahmS<@IQGN{q^f_i1zX8(a0f=*&q0ayS002ovPDHLkV1jQ+ BAou_P literal 0 HcmV?d00001 diff --git a/vv/icons/open.png b/vv/icons/open.png new file mode 100644 index 0000000000000000000000000000000000000000..45fa2883a71fcb891f1ef7c0c217d71eeae284bc GIT binary patch literal 2073 zcmV+!2RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj< zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij zhnKMl|M#(rT!AcZ}eF)wgP_d zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_ zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u) zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_ z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^ ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~ zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf DP*&js literal 0 HcmV?d00001 diff --git a/vv/icons/player_pause.png b/vv/icons/player_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9bcc455618069bde957b3da0a33b72d145ee7b GIT binary patch literal 690 zcmV;j0!{siP)A{KIE*XMShC>H< z)q>p5v8-{E73<_Hz$4%Ra2PcX7xH5lH|u%@eaR0Bm!o}#W`$2InpJ1=-0tKK#w1S) zCrF)9g`9d~a1;RdqTnQQliZfOxMWQ7q^LAvb9B2zg`d=@n{~gfEv?zbC8Kt`7>iVf zvRq$OHUpD;LJJ zJuFYZKTc2PPtue5@zu-p*~h2zW1s?>4PoEIg)wb!01afo95|0-7U$b2+V*hGnB+B3 zM4@lMmpIPjyo>2w4_A*#zM1F}xQOGfLU1ydtssI2007*qoM6N<$f~l!7wEzGB literal 0 HcmV?d00001 diff --git a/vv/icons/player_play.png b/vv/icons/player_play.png new file mode 100644 index 0000000000000000000000000000000000000000..70daa339be90f2a9b716d5fed87cb39ffb150bdf GIT binary patch literal 900 zcmV-~1AF|5P)rE@^OS{=bLy(ATv~1q*KTfZQkrs0#cEU3aw8SD^r)*9aXmjI#i_%; zv+YSBvYuq&uLb11(BWG9RfJasa}iUd_D{}z6^!S7&(QL@8zEKRT!b|-NveS91&unC z4CM24^$#Jc#)pfTE=2?9J> zMsN?FnbGKtGv9P5Hm^mAIUeO>M#&=hfW!t59R04rN%Kk+e_xF&Lush^YC@%XKVA>k zVN0FmBKUv}FBI4};)X+GUMMvC;q>r2T>g@c(xE(*4e!Cz&ozjs)>*Sf z@&?>d(C^E0;8PfidJ}Nz<1U_iAFAMYOCx#&AK+KbAi2v0={<{))2rn%_V}QnTZdC! z={VAv$#cE+Ce)?kM(_bk%4`we>Vl+B7o@fO@ML!QBfCR~-EA9juq_40J9Bu%j^G27 z7i_VwYimml}$j{B?m?lbq)3Lc& z{n!za^-hRwP$BM(8u|teqF$;H``RDd8>6wMK17fkh_!?pF`K)}|2Tj#+Cfz*Ltw1~ zLLVp*{7?y9trDw<<#*kozB5OV7ZBM*451-dV(Om<7#2c)k%ecuJ-jLxKwGsCODhym zmpemN=m;ib5hphhc@}vCY=S44!*V#CXDMVJTubDzKkEP{%L8nzpCHdCQiw>=_W-N+ z0&7x$DP+JDIe zu!*6P$R{@8)*vuD{AuM{`tH$^$tMDm){s0xknbJe?G~3$1dw=KzLUt6N-hMz_XW literal 0 HcmV?d00001 diff --git a/vv/icons/player_stop.png b/vv/icons/player_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6585ae84e820eebc2480c5b945d7547f880fe7 GIT binary patch literal 627 zcmV-(0*w8MP)#q za-avs{V}m;uKZK~AkI>%==;pAl*A;Y6bv-1xCVFy)PUaqfY`Iu$!+_KVoJG`^OYM% zsl_+mkDmbE0zaMl>HY|O%HztETuucUX<#x%WW;oo0Iz}4weFO1Q5l8m*W_st442{p zLj{mImT>K;a#6J!)k&6%WguLVMiCwLUH<(8pG-K^u0ypkMX?Re_AE+iMdkggeA|vz zBT5_cLWRLaL@qN-Tzl^fuX0^aC_R$zOdwpaOcbrGy<@!at_Gz?id`Re=0fly)954w z-ayk>R5Jv^L1l&}-^_>i8ngmcjKT0GH5;umrAv5AIp)-OuNSbx`f>^s9R|r;KHAlh$tF;t}u`*tqqEa}urx zD%alviKm`BRm0t{rClY{?{EFFg`|VVhwN~Mdg~NFsNtTpdVP*3iN84u+GAgWgMR=3 N002ovPDHLkV1jDwA?*MF literal 0 HcmV?d00001 diff --git a/vv/icons/rotateright.png b/vv/icons/rotateright.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5e8664a13d6681b51f9e58dfbd876b3633d5de GIT binary patch literal 1732 zcmV;#20QtQP)>ff%*~*$fD%h%91c3y8nocl%%{qfWx#Ju}~ANbWu7d*|JI-(%RY|3mxG z(~g|3A}mphVuILYixE1!wRb)EaLcK z$w6OOxJTojOo@i)P3Y)a21k;J?J-GM!VSQ(pEx+@8i=GIrR2o%Fw zbO#>N9E6wNhrjYJPAd~|w&W&)3+1pBrDKk%J+|!n6J_PqbbT;I2SW1ACrluW&{kj^ zBft$$#mU$#B$QR+a-kAuRLM9}B><;f0B%VFymRy6lUIOKskdRYpNCcJ51_X08PshZ z^y*_ox8dNz$EeZMwve1N*)C`=U@y!>@SS{!%ge#5OGVm?Qq;7ypzPIC#MBqzgi_Qm z;hcFF^S3#{Y#$dIO%GY1YUCAE(hjWjy$(YTkLko{tp&`T1aOxY;6_CiA|L0$t}q!J z6JlZF6amYS>&RBs;$~wR9LcTl%#p)CuMm5pC783t5&JC8A?fcTM2d5;^h^|@Rb_nw zW3&=5nEdGsb5|j5lvhE}kcCj;E#%6T=!=@Vdhqy3`2L(2vbI{-m8HPzUOobegn8t3 zEI%3u^TRG!dh7~#<@X?XpwLZ#>A)@*A)=q&h0S>Z-G+mMk#O}FQVB_05&n1_iX)G% zf|n%+SCol$JP|3LP1Z~_E-RI~3+(o|3b)Xd{&Qe(FyA#aw!qa_fc59aWRVubt~L%w zDk6x;<$exVhv+V#KX%G^j(6gJ4x+*Fy0@1eJj@tBemw2O<)%!WuNULY<0RNrUxlSA z5`Oh*;46l33kIHqgQIsqarLVXdIUQMT%!`ct?BS>k;0=f6}*=cH&D=N}nV5R$U zypI*mwiIToF~yr()DUMXXmNShBgD1IA?heXN}B>1ZKWvfc!I!!V(kS!I{GsTnjS%{ zBHKtILqu^dgvuPmmCL}(i-)m`4K4nvy_4?s`sXk3x%DN~ceEi#^AK5`6)5Pgq1^9L zp{A=@w_U&p{JYB93Ec!Wp_6{K+Q$Kj89B5#bLGz(Te0$7B5azk;C<23*{+*FJD#DU zTZ(K=9OQ^YxkiQs&Q?g1E2scdoVoH^@}T-UK!U|5BCxXa{2cn!f&Yk@Qb!T)qNYsd6cxD$iA9KJGhu^@- z3WsyP5XtIzxD`iXnVT)PIa$N(I0t(!a&bDv2g0&zuoFk%ly5LCd^ItXa=_Y6cLApO zU&&HDZD_#;n-gS#ZKDz=3%$W_@S_ra1T{DzsV)&t=>qHz^n~Z77+N?oUP{?-<*K~^ zd4(R%6gM(5n$C~9K~K24r;RXkbizXW9dK1ek;if{T&wI5{n8#{wF^QX2H?trRG0;y z#mP&d2oqj^m%vKWO@9!H&Fk|PLvUz6fBEYn2I$KIT{UvT#4pHI8x7Obn?LY3mcBW&**r|X;X3_y#2Op0ts650MzizvbuIq3+cH$% a8UFw|)e>7p%to*P0000PSU- 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�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

wu=AwnNc*0w>}k};diJA` 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⁢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 literal 0 HcmV?d00001 diff --git a/vv/icons/splashscreen.odp b/vv/icons/splashscreen.odp new file mode 100644 index 0000000000000000000000000000000000000000..7cd3ca50be26be060dfc62bd28e93ac18fb98123 GIT binary patch literal 799924 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̃@xrz7 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

F5;B;Bjo|CKjN{-Ff@3-`a4P={3L;bX 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

&R&B}9=Eq=KxD|Z_g!fQ9O4tl@C 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%0DC2az<8|`HU>Ultw9+Xf%w9%rp$U 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

j@pcMWxMj7b-pW( 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 z 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

OP10K7ff~T1N%L+q{La!VY`^mR+af|) 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 WJPhogZ8!iNz#uFDu=wH6k^cvME;^?G literal 0 HcmV?d00001 diff --git a/vv/icons/splashscreen.ppt b/vv/icons/splashscreen.ppt new file mode 100755 index 0000000000000000000000000000000000000000..4bc508d1ac618cfd0b8698d0d166b2e89611b04e GIT binary patch literal 1637888 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%0DZ! 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

Mb|=|lEsK%pUUpmH-M6XA&aVw^^Z>j><1}i& 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

  • {XD-rkA2uoEEI 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

    2q^U&-bkny*?0z<`Bi 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