From edd658a40af1c6c53860e8d0ca04372e17e803b8 Mon Sep 17 00:00:00 2001 From: schaerer Date: Fri, 30 Jul 2010 13:38:59 +0000 Subject: [PATCH] fix composition order bug; add panel position. Panel position settings are still widely untested --- tools/clitkConeBeamProjectImage.ggo | 2 +- tools/clitkConeBeamProjectImageFilter.h | 11 +++++++++++ tools/clitkConeBeamProjectImageFilter.txx | 4 ++-- tools/clitkConeBeamProjectImageGenericFilter.cxx | 9 +++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/tools/clitkConeBeamProjectImage.ggo b/tools/clitkConeBeamProjectImage.ggo index f6d381f..945b96d 100755 --- a/tools/clitkConeBeamProjectImage.ggo +++ b/tools/clitkConeBeamProjectImage.ggo @@ -34,4 +34,4 @@ option "origin" - "Origin for the output image" double multiple no default= option "size" - "Size for the output image" int multiple no default="512" option "spacing" - "Spacing for the output image" double multiple no default="0.8" - +option "panel_position" - "Position of the panel: small, medium or large" string no default="small" diff --git a/tools/clitkConeBeamProjectImageFilter.h b/tools/clitkConeBeamProjectImageFilter.h index 6ef578a..2269bd4 100755 --- a/tools/clitkConeBeamProjectImageFilter.h +++ b/tools/clitkConeBeamProjectImageFilter.h @@ -187,6 +187,16 @@ namespace clitk } } + /** Set the panelshift. */ + void SetPanelShift(double shift) + { + if (m_PanelShift!=shift) + { + m_PanelShift=shift; + m_IsInitialized=false; + } + } + /** Helper method to set the output parameters based on this image */ void SetOutputParametersFromImage( const OutputImagePointer image ); @@ -219,6 +229,7 @@ namespace clitk double m_SourceToScreen; double m_SourceToAxis; double m_ProjectionAngle; + double m_PanelShift; MatrixType m_RigidTransformMatrix; OutputPixelType m_EdgePaddingValue; diff --git a/tools/clitkConeBeamProjectImageFilter.txx b/tools/clitkConeBeamProjectImageFilter.txx index 173411f..9a103e6 100755 --- a/tools/clitkConeBeamProjectImageFilter.txx +++ b/tools/clitkConeBeamProjectImageFilter.txx @@ -114,7 +114,7 @@ namespace clitk itk::Matrix centeredRotationMatrix = GetCenteredRotationMatrix3D(rotationParameters,transformedCenter); // Compose this rotation with the rigid transform matrix - itk::Matrix finalTransform = centeredRotationMatrix * m_RigidTransformMatrix; + itk::Matrix finalTransform = m_RigidTransformMatrix * centeredRotationMatrix ; // Set the rotation itk::Matrix finalRotation = GetRotationalPartMatrix3D(finalTransform); @@ -169,7 +169,7 @@ namespace clitk // JV -1 seems to correspond better with shearwarp of Simon Rit typename InterpolatorType::InputPointType originOutput; originOutput[0] = m_IsoCenter[0]- (m_SourceToScreen - m_SourceToAxis); - originOutput[1] = m_IsoCenter[1]-static_cast(sizeOuput[1]-1)*spacingOutput[1]/2.0; + originOutput[1] = m_IsoCenter[1]-static_cast(sizeOuput[1]-1)*spacingOutput[1]/2.0 - m_PanelShift; originOutput[2] = m_IsoCenter[2]-static_cast(sizeOuput[2]-1)*spacingOutput[2]/2.0; m_Resampler->SetOutputOrigin( originOutput ); if (m_Verbose)std::cout<<"The origin of the flat panel is at "<< originOutput <<",..."<< std::endl; diff --git a/tools/clitkConeBeamProjectImageGenericFilter.cxx b/tools/clitkConeBeamProjectImageGenericFilter.cxx index 50d32a6..fd983c6 100755 --- a/tools/clitkConeBeamProjectImageGenericFilter.cxx +++ b/tools/clitkConeBeamProjectImageGenericFilter.cxx @@ -131,6 +131,15 @@ namespace clitk } filter->SetEdgePaddingValue(static_cast(m_ArgsInfo.pad_arg)); + // Panel position (hard coded values for the elekta synergy) + // Two be more precise, one should read the specific values for each angle in Frame.dbf + if (strcmp(m_ArgsInfo.panel_position_arg,"small") !=0) + filter->SetPanelShift(0.); + else if (strcmp(m_ArgsInfo.panel_position_arg,"medium") !=0) + filter->SetPanelShift(114.84); + else if (strcmp(m_ArgsInfo.panel_position_arg,"large") !=0) + filter->SetPanelShift(190.); + else assert(false); //Unsupported panel position // Output image info if (m_ArgsInfo.like_given) { -- 2.45.1