Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkShapeBasedInterpolationAlgorithm.h"
00019 #include "mitkImageCast.h"
00020
00021 #include "ipSegmentation.h"
00022
00023 mitk::Image::Pointer
00024 mitk::ShapeBasedInterpolationAlgorithm::Interpolate(
00025 Image::ConstPointer lowerSlice, unsigned int lowerSliceIndex,
00026 Image::ConstPointer upperSlice, unsigned int upperSliceIndex,
00027 unsigned int requestedIndex,
00028 unsigned int ,
00029 Image::Pointer resultImage,
00030 unsigned int ,
00031 Image::ConstPointer )
00032 {
00033
00034 itk::Image< ipMITKSegmentationTYPE, 2 >::Pointer correctPixelTypeLowerITKSlice;
00035 CastToItkImage( lowerSlice, correctPixelTypeLowerITKSlice );
00036 assert ( correctPixelTypeLowerITKSlice.IsNotNull() );
00037
00038 itk::Image< ipMITKSegmentationTYPE, 2 >::Pointer correctPixelTypeUpperITKSlice;
00039 CastToItkImage( upperSlice, correctPixelTypeUpperITKSlice );
00040 assert ( correctPixelTypeUpperITKSlice.IsNotNull() );
00041
00042
00043 itk::Image< ipMITKSegmentationTYPE, 2 >::DirectionType imageDirection;
00044 imageDirection.SetIdentity();
00045 correctPixelTypeLowerITKSlice->SetDirection(imageDirection);
00046 correctPixelTypeUpperITKSlice->SetDirection(imageDirection);
00047
00048
00049 Image::Pointer correctPixelTypeLowerMITKSlice = Image::New();
00050 CastToMitkImage( correctPixelTypeLowerITKSlice, correctPixelTypeLowerMITKSlice );
00051 mitkIpPicDescriptor* lowerPICSlice = correctPixelTypeLowerMITKSlice->GetSliceData()->GetPicDescriptor();
00052
00053 Image::Pointer correctPixelTypeUpperMITKSlice = Image::New();
00054 CastToMitkImage( correctPixelTypeUpperITKSlice, correctPixelTypeUpperMITKSlice );
00055 mitkIpPicDescriptor* upperPICSlice = correctPixelTypeUpperMITKSlice->GetSliceData()->GetPicDescriptor();
00056
00057
00058 float ratio = (float)(requestedIndex - lowerSliceIndex) / (float)(upperSliceIndex - lowerSliceIndex);
00059
00060 mitkIpPicDescriptor* ipPicResult = ipMITKSegmentationInterpolate( lowerPICSlice, upperPICSlice, ratio );
00061 if (!ipPicResult) return NULL;
00062
00063 Geometry3D::Pointer originalGeometry = resultImage->GetGeometry();
00064 resultImage->Initialize( ipPicResult );
00065 resultImage->SetPicSlice( ipPicResult );
00066 resultImage->SetGeometry( originalGeometry );
00067
00068 mitkIpPicFree( ipPicResult );
00069
00070 return resultImage;
00071 }
00072