ENDIF(NOT DEFINED CLITK_SOURCE_DIR)
#=========================================================
+SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
#=========================================================
INCLUDE(${CLITK_SOURCE_DIR}/cmake/common.cmake)
INCLUDE(${CLITK_SOURCE_DIR}/cmake/dependencies.cmake)
registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in
registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out
elif [ "$method" == "elastix" ]; then
- registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
- registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
+ registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in
+ registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out
fi
motion_mask=$mask_dir/${mask_type}_$phase_nb.mhd
#
###############################################################################
+bin=`dirname $0`
+source $bin/tools.sh
+
#
# check return value passed and abort if it represents an error (ie, ret != 0)
# optionally, a function can be passed as a 3rd parameter, to be called just
if [ -z $roi ]
then
zenity --warning --text="You must choose one contour."
- select_contour $roi_list
+ select_contour_gui $roi_list
else
rtstruct_roi_name=$roi
fi;;
then
exit
else
- select_contour $roi_list
+ select_contour_gui $roi_list
fi;;
-1)
zenity --error --text="Unexpected error. Please relaunch the application."
select_roi()
{
- rtstruct_roi_name_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0026" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Name] \|]//'` )
- rtstruct_roi_number_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0022" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Number] \|]//'` )
+ rtstruct_roi_name_list=( `get_dicom_field_value "3006|0026" ${rtstruct_file} all | sed 's/ /_/g'` )
+ rtstruct_roi_number_list=( `get_dicom_field_value "3006|0022" ${rtstruct_file} all | sed 's/ //g'` )
rtstruct_roi_list=( )
for i in $(seq 0 1 $(( ${#rtstruct_roi_name_list[@]} - 1 ))); do
rtstruct_roi_list[$i]=${rtstruct_roi_number_list[$i]}:${rtstruct_roi_name_list[$i]}
rtstruct_roi=${rtstruct_roi_number_list[$(( $rtstruct_roi_index ))]}
rtstruct_roi_name=${rtstruct_roi_name_list[$(( $rtstruct_roi_index ))]}
fi
-}
\ No newline at end of file
+}
################# ELASTIX #####################
registration_elastix()
{
- reference=$1
- target=$2
- mask_ref=$3
- mask_targ=$4
- vf=$5
- result=$6
- nb_iter=$7
- nb_samples=$8
- sampling_algo=$9
- hist_bins=${10}
- nb_levels=${11}
- spacing=${12}
- metric=${13}
- optimizer=${14}
- interpolator=${15}
+ local reference=$1
+ local target=$2
+ local mask_ref=$3
+ local mask_targ=$4
+ local vf=$5
+ local result=$6
+ local nb_iter=$7
+ local nb_samples=$8
+ local sampling_algo=$9
+ local hist_bins=${10}
+ local nb_levels=${11}
+ local spacing=${12}
+ local metric=${13}
+ local optimizer=${14}
+ local interpolator=${15}
+ local log=${16}
+ local coeff=${17}
+ local init_coeff=${18}
+
+# RP 25/06/2012: unused variables (for now at elast)
+# local log=${16}
+# local coeff=${17}
+# local init_coeff=${18}
########## register in ##########
for reg_in in $reg_in_list
exec_dir=`which elastix`
exec_dir=`dirname $exec_dir`
suffix=${nb_samples}_${nb_iter}_${nb_levels}
- cat $exec_dir/params_BSpline.txt | sed -e "s+<NbIterations>+$nb_iter+" \
- -e "s+<LabelsFile>++" \
+ cat $exec_dir/params_elastix_template.txt | sed -e "s+<NbIterations>+$nb_iter+" \
-e "s+<HistBins>+$hist_bins+" \
-e "s+<Levels>+$nb_levels+" \
- -e "s+<NbSamples>+$nb_samples+" \
+ -e "s+<PctSamples>+$nb_samples+" \
-e "s+<SamplerType>+$sampling_algo+" \
- -e "s+<Spacing>+$spacing+" > params_BSpline_${suffix}.txt
+ -e "s+<Metric>+$metric+" \
+ -e "s+<Optimizer>+$optimizer+" \
+ -e "s+<Interpolator>+$interpolator+" \
+ -e "s+<Spacing>+$spacing+" > params_elastix_${suffix}.txt
+
+ # set elastix to write out the coefficient images and corresponding DVFs
+ echo "(WriteCoefficientImage \"true\")" >> params_elastix_${suffix}.txt
+ echo "(WriteDVFFromCoeff \"true\")" >> params_elastix_${suffix}.txt
vf_dir=`dirname $vf`
vf_base=`basename $vf .mhd`
+ coeff_dir=`dirname $coeff`
+ coeff_base=`basename $coeff .mhd`
result_dir=`dirname $result`
result_base=`basename $result .mhd`
# image registration
- cmd="elastix -f $reference -m $target -fMask $mask_ref -mMask $mask_targ -out $result_dir -p params_BSpline_${suffix}.txt"
+ cmd="elastix -f $reference -m $target -fMask $mask_ref -mMask $mask_targ -out $result_dir -p params_elastix_${suffix}.txt"
$cmd > /dev/null
abort_on_error registration_elastix $? clean_up_registration
# generate vector field
- cmd="transformix -tp $result_dir/TransformParameters.0.txt -out $vf_dir -def all"
- $cmd > /dev/null
- abort_on_error registration_elastix $? clean_up_registration
+ # cmd="transformix -tp $result_dir/TransformParameters.0.txt -out $vf_dir -def all"
+ # $cmd > /dev/null
+ # abort_on_error registration_elastix $? clean_up_registration
# post-processing
- mv $vf_dir/deformationField.mhd $vf
- mv $vf_dir/deformationField.raw `echo $vf | sed 's/mhd/raw/'`
- sed -i "s+deformationField+$vf_base+" $vf
+ local level=$(($nb_levels - 1))
+ mv $result_dir/dvf.0.R$level.mhd $vf
+ mv $result_dir/dvf.0.R$level.raw `echo $vf | sed 's/mhd/raw/'`
+ sed -i "s+dvf.0.R$level+$vf_base+" $vf
+
+ mv $result_dir/coeff.0.R$level.mhd $coeff_dir/${coeff_base}_0.mhd
+ mv $result_dir/coeff.0.R$level.raw $coeff_dir/${coeff_base}_0.raw
+ sed -i "s+coeff.0.R$level+$coeff_base+" $coeff_dir/${coeff_base}_0.mhd
mv $result_dir/result.0.mhd $result
mv $result_dir/result.0.raw `echo $result | sed 's/mhd/raw/'`
sed -i "s+result.0+$result_base+" $result
- mv $result_dir/elasitx.log $log
+ mv $result_dir/elastix.log $log
mv $result_dir/TransformParameters.0.txt $result_dir/${result_base}_TransformParameters.0.txt
}
\ No newline at end of file
bool founded = true;
bool tag = GetAFDB()->TagExist(structure);
if (tag) {
- typedef typename itk::Image<uchar, 3> ImageType;
+ typedef itk::Image<uchar, 3> ImageType;
founded = GetAFDB()->CheckImage<ImageType>(structure);
if (!founded) {
std::cout << " \t Image not exist in DB ";
\r
/////////////////////////////////////////////////////////////////////////////\r
// Protability issues\r
+#ifdef ntohs\r
+# undef ntohs\r
+#endif\r
+#ifdef ntohl\r
+# undef ntohl\r
+#endif\r
#ifndef _tfopen\r
# define _tfopen fopen\r
#endif\r
}
//Call normal render
- vtkImageActor::Render(ren);
+ VTK_IMAGE_ACTOR::Render(ren);
//Move back blending to weighted sum
if (vtkgl::BlendEquationEXT!=0) {
#include <vtkActor.h>
#include <vtkSmartPointer.h>
+
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+#define VTK_IMAGE_ACTOR vtkImageActor
#include <vtkImageActor.h>
+#else
+#define VTK_IMAGE_ACTOR vtkOpenGLImageActor
+#include <vtkOpenGLImageActor.h>
+#endif
-class vvBlendImageActor : public vtkImageActor
+class vvBlendImageActor : public VTK_IMAGE_ACTOR
{
public:
static vvBlendImageActor *New();
- vtkTypeMacro(vvBlendImageActor, vtkImageActor);
+ vtkTypeMacro(vvBlendImageActor, VTK_IMAGE_ACTOR);
virtual void PrintSelf(ostream& os, vtkIndent indent);
// Description:
#include <vtkAssignAttribute.h>
#include <vtkImageAccumulate.h>
#include <vtkImageReslice.h>
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+# include <vtkImageMapper3D.h>
+#endif
vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
vtkStandardNewMacro(vvSlicer);
this->InstallPipeline();
mLinkOverlayWindowLevel = true;
+
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+ this->GetImageActor()->GetMapper()->BorderOn();
+#endif
}
//------------------------------------------------------------------------------
mOverlayActor->SetPickable(0);
mOverlayActor->SetVisibility(true);
mOverlayActor->SetOpacity(0.5);
- }
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+ mOverlayActor->GetMapper()->BorderOn();
+#endif
+ }
//stupid but necessary : the Overlay need to be rendered before fusion
if (mFusionActor) {
if (!mFusionMapper)
mFusionMapper = vtkSmartPointer<vtkImageMapToColors>::New();
-
+
vtkSmartPointer<vtkLookupTable> lut = vtkLookupTable::New();
lut->SetRange(0, 1);
lut->SetValueRange(0, 1);
mFusionActor->SetPickable(0);
mFusionActor->SetVisibility(true);
mFusionActor->SetOpacity(0.7);
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+ mFusionActor->GetMapper()->BorderOn();
+#endif
this->GetRenderer()->AddActor(mFusionActor);
}
else if ((unsigned int)t >= mImage->GetVTKImages().size())
t = mImage->GetVTKImages().size() -1;
- if (mCurrentTSlice == t) return;
-
mCurrentTSlice = t;
mImageReslice->SetInput( mImage->GetVTKImages()[mCurrentTSlice] );
if (mVF && mVFActor->GetVisibility()) {
corner1[i] = mCurrent[i];
corner2[i] = mCurrent[i];
}
+
this->Renderer->WorldToView(corner1[0], corner1[1], corner1[2]);
this->Renderer->WorldToView(corner2[0], corner2[1], corner2[2]);
//----------------------------------------------------------------------------
void vvSlicerManager::ReloadFusion()
{
- mFusionReader->Update();
+ mFusionReader->Update(mImage->GetNumberOfDimensions(),mFusionComponent.c_str(),mType);
+
for ( unsigned int i = 0; i < mSlicers.size(); i++) {
mSlicers[i]->SetFusion(mFusionReader->GetOutput());
mSlicers[i]->Render();
//----------------------------------------------------------------------------
void vvSlicerManager::ReloadOverlay()
{
- mOverlayReader->Update();
+ mOverlayReader->Update(mImage->GetNumberOfDimensions(),mOverlayComponent.c_str(),mType);
for ( unsigned int i = 0; i < mSlicers.size(); i++) {
mSlicers[i]->SetOverlay(mOverlayReader->GetOutput());
mSlicers[i]->Render();