-void vvImageWarp::Update_WithDimAndPixelType() {
- QProgressDialog progress(parent_window);
- progress.setCancelButton(0);
- progress.setLabelText("Computing warped and ventilation images...");
- progress.show();
- typedef itk::Image<PixelType,Dim> ImageType;
- typedef itk::Image<float,Dim> JacobianImageType;
- typedef itk::Image<itk::Vector<float,Dim>,Dim> VectorImageType;
- typedef std::vector<typename ImageType::ConstPointer> ImageSeriesType;
- ImageSeriesType input = vvImageToITKImageVector<Dim,PixelType>(mInputImage);
- ImageSeriesType output;
-
- typename itk::VTKImageToImageFilter<VectorImageType>::Pointer vf_connector=
- itk::VTKImageToImageFilter<VectorImageType>::New();
-
- //Warp, then join, then convert to vv
- typedef itk::WarpImageFilter<ImageType,ImageType,VectorImageType> WarpFilterType;
- typedef itk::DisplacementFieldJacobianDeterminantFilter<VectorImageType> JacobianFilterType;
- vvImage::Pointer result=vvImage::New();
- typedef itk::JoinSeriesImageFilter< ImageType,itk::Image<PixelType,Dim+1> > JoinFilterType;
- typedef itk::JoinSeriesImageFilter< JacobianImageType,itk::Image<float,Dim+1> > JacobianJoinFilterType;
- typename JoinFilterType::Pointer join=JoinFilterType::New();
- typename JoinFilterType::Pointer diff_join=JoinFilterType::New();
- typename JacobianJoinFilterType::Pointer jacobian_join=JacobianJoinFilterType::New();
- join->SetSpacing(1);
- join->SetOrigin(0); //Set the temporal origin
- diff_join->SetSpacing(1);
- diff_join->SetOrigin(0);
- jacobian_join->SetSpacing(1);
- jacobian_join->SetOrigin(0);
- typedef itk::SubtractImageFilter<ImageType,ImageType,ImageType> DiffFilter;
- std::vector<typename ImageType::Pointer> warped_images;
-
- for (unsigned int num = 0; num < input.size(); num++)
- {
- typename WarpFilterType::Pointer warp_filter=WarpFilterType::New();
- typename JacobianFilterType::Pointer jacobian_filter=JacobianFilterType::New();
- jacobian_filter->SetUseImageSpacingOn();
- vf_connector->SetInput(mVF->GetVTKImages()[num]);
- warp_filter->SetInput(input[num]);
- warp_filter->SetDeformationField(vf_connector->GetOutput());
- jacobian_filter->SetInput(vf_connector->GetOutput());
- warp_filter->SetOutputSpacing(input[num]->GetSpacing());
- warp_filter->SetOutputOrigin(input[num]->GetOrigin());
- warp_filter->SetEdgePaddingValue(-1000);
- warp_filter->Update();
- jacobian_filter->Update();
- warped_images.push_back(warp_filter->GetOutput());
- jacobian_join->PushBackInput(jacobian_filter->GetOutput());
- join->PushBackInput(warp_filter->GetOutput());
- progress.setValue(progress.value()+1);
- }
- for (typename std::vector<typename ImageType::Pointer>::const_iterator i = warped_images.begin(); i!=warped_images.end();i++)
- {
- typename DiffFilter::Pointer diff_filter = DiffFilter::New();
- diff_filter->SetInput2(*i);
- diff_filter->SetInput1(*(warped_images.begin()+mRefImage));
- diff_filter->Update();
- diff_join->PushBackInput(diff_filter->GetOutput());
- progress.setValue(progress.value()+1);
- }
- join->Update();
- diff_join->Update();
- jacobian_join->Update();
- mWarpedImage = vvImageFromITK<Dim+1,PixelType>(join->GetOutput());
- mDiffImage = vvImageFromITK<Dim+1,PixelType>(diff_join->GetOutput());
- mJacobianImage = vvImageFromITK<Dim+1,float>(jacobian_join->GetOutput());
- //mJacobianImage = vvImageFromITK<Dim,float>(temporal_filter->GetOutput());
+void vvImageWarp::Update_WithDimAndPixelType()
+{
+ QProgressDialog progress(parent_window);
+ progress.setCancelButton(0);
+ progress.setLabelText("Computing warped and ventilation images...");
+ progress.show();
+ typedef itk::Image<PixelType,Dim> ImageType;
+ typedef itk::Image<float,Dim> JacobianImageType;
+ typedef itk::Image<itk::Vector<float,Dim>,Dim> VectorImageType;
+ typedef std::vector<typename ImageType::ConstPointer> ImageSeriesType;
+ ImageSeriesType input = vvImageToITKImageVector<Dim,PixelType>(mInputImage);
+ ImageSeriesType output;
+
+ typename itk::VTKImageToImageFilter<VectorImageType>::Pointer vf_connector=
+ itk::VTKImageToImageFilter<VectorImageType>::New();
+
+ //Warp, then join, then convert to vv
+ typedef itk::WarpImageFilter<ImageType,ImageType,VectorImageType> WarpFilterType;
+ typedef itk::DisplacementFieldJacobianDeterminantFilter<VectorImageType> JacobianFilterType;
+ vvImage::Pointer result=vvImage::New();
+ typedef itk::JoinSeriesImageFilter< ImageType,itk::Image<PixelType,Dim+1> > JoinFilterType;
+ typedef itk::JoinSeriesImageFilter< JacobianImageType,itk::Image<float,Dim+1> > JacobianJoinFilterType;
+ typename JoinFilterType::Pointer join=JoinFilterType::New();
+ typename JoinFilterType::Pointer diff_join=JoinFilterType::New();
+ typename JacobianJoinFilterType::Pointer jacobian_join=JacobianJoinFilterType::New();
+ join->SetSpacing(1);
+ join->SetOrigin(0); //Set the temporal origin
+ diff_join->SetSpacing(1);
+ diff_join->SetOrigin(0);
+ jacobian_join->SetSpacing(1);
+ jacobian_join->SetOrigin(0);
+ typedef itk::SubtractImageFilter<ImageType,ImageType,ImageType> DiffFilter;
+ std::vector<typename ImageType::Pointer> warped_images;
+
+ for (unsigned int num = 0; num < input.size(); num++) {
+ typename WarpFilterType::Pointer warp_filter=WarpFilterType::New();
+ typename JacobianFilterType::Pointer jacobian_filter=JacobianFilterType::New();
+ jacobian_filter->SetUseImageSpacingOn();
+ vf_connector->SetInput(mVF->GetVTKImages()[num]);
+ warp_filter->SetInput(input[num]);
+#if ITK_VERSION_MAJOR >= 4
+ warp_filter->SetDisplacementField(vf_connector->GetOutput());
+#else
+ warp_filter->SetDeformationField(vf_connector->GetOutput());
+#endif
+ jacobian_filter->SetInput(vf_connector->GetOutput());
+ warp_filter->SetOutputSpacing(input[num]->GetSpacing());
+ warp_filter->SetOutputOrigin(input[num]->GetOrigin());
+ warp_filter->SetEdgePaddingValue(-1000);
+ warp_filter->Update();
+ jacobian_filter->Update();
+ warped_images.push_back(warp_filter->GetOutput());
+ jacobian_join->PushBackInput(jacobian_filter->GetOutput());
+ join->PushBackInput(warp_filter->GetOutput());
+ progress.setValue(progress.value()+1);
+ }
+ for (typename std::vector<typename ImageType::Pointer>::const_iterator i = warped_images.begin(); i!=warped_images.end(); i++) {
+ typename DiffFilter::Pointer diff_filter = DiffFilter::New();
+ diff_filter->SetInput2(*i);
+ diff_filter->SetInput1(*(warped_images.begin()+mRefImage));
+ diff_filter->Update();
+ diff_join->PushBackInput(diff_filter->GetOutput());
+ progress.setValue(progress.value()+1);
+ }
+ join->Update();
+ diff_join->Update();
+ jacobian_join->Update();
+ mWarpedImage = vvImageFromITK<Dim+1,PixelType>(join->GetOutput());
+ mDiffImage = vvImageFromITK<Dim+1,PixelType>(diff_join->GetOutput());
+ mJacobianImage = vvImageFromITK<Dim+1,float>(jacobian_join->GetOutput());
+ //mJacobianImage = vvImageFromITK<Dim,float>(temporal_filter->GetOutput());