diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
index 193108ebb4..83c6bcfac2 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
@@ -1,92 +1,92 @@
SET(SRC_CPP_FILES
QmitkODFDetailsWidget.cpp
QmitkODFRenderWidget.cpp
QmitkPartialVolumeAnalysisWidget.cpp
)
SET(INTERNAL_CPP_FILES
mitkPluginActivator.cpp
QmitkQBallReconstructionView.cpp
QmitkPreprocessingView.cpp
QmitkDiffusionDicomImportView.cpp
QmitkDiffusionQuantificationView.cpp
QmitkTensorReconstructionView.cpp
QmitkDiffusionImagingPublicPerspective.cpp
QmitkControlVisualizationPropertiesView.cpp
QmitkODFDetailsView.cpp
- QmitkGlobalFiberTrackingView.cpp
+ QmitkGibbsTrackingView.cpp
QmitkFiberBundleOperationsView.cpp
QmitkFiberBundleDeveloperView.cpp
QmitkPartialVolumeAnalysisView.cpp
)
SET(UI_FILES
src/internal/QmitkQBallReconstructionViewControls.ui
src/internal/QmitkPreprocessingViewControls.ui
src/internal/QmitkDiffusionDicomImportViewControls.ui
src/internal/QmitkDiffusionQuantificationViewControls.ui
src/internal/QmitkTensorReconstructionViewControls.ui
src/internal/QmitkControlVisualizationPropertiesViewControls.ui
src/internal/QmitkODFDetailsViewControls.ui
- src/internal/QmitkGlobalFiberTrackingViewControls.ui
+ src/internal/QmitkGibbsTrackingViewControls.ui
src/internal/QmitkFiberBundleOperationsViewControls.ui
src/internal/QmitkFiberBundleDeveloperViewControls.ui
src/internal/QmitkPartialVolumeAnalysisViewControls.ui
)
SET(MOC_H_FILES
src/internal/mitkPluginActivator.h
src/internal/QmitkQBallReconstructionView.h
src/internal/QmitkPreprocessingView.h
src/internal/QmitkDiffusionDicomImportView.h
src/internal/QmitkDiffusionImagingPublicPerspective.h
src/internal/QmitkDiffusionQuantificationView.h
src/internal/QmitkTensorReconstructionView.h
src/internal/QmitkControlVisualizationPropertiesView.h
src/internal/QmitkODFDetailsView.h
src/QmitkODFRenderWidget.h
src/QmitkODFDetailsWidget.h
- src/internal/QmitkGlobalFiberTrackingView.h
+ src/internal/QmitkGibbsTrackingView.h
src/internal/QmitkFiberBundleOperationsView.h
src/internal/QmitkFiberBundleDeveloperView.h
src/internal/QmitkPartialVolumeAnalysisView.h
src/QmitkPartialVolumeAnalysisWidget.h
)
SET(CACHED_RESOURCE_FILES
# list of resource files which can be used by the plug-in
# system without loading the plug-ins shared library,
# for example the icon used in the menu and tabs for the
# plug-in views in the workbench
plugin.xml
resources/preprocessing.png
resources/dwiimport.png
resources/quantification.png
resources/reconodf.png
resources/recontensor.png
resources/vizControls.png
resources/OdfDetails.png
- resources/GlobalTracking.png
+ resources/GibbsTracking.png
resources/FiberBundleOperations.png
resources/PartialVolumeAnalysis_24.png
)
SET(QRC_FILES
# uncomment the following line if you want to use Qt resources
resources/QmitkDiffusionImaging.qrc
)
SET(CPP_FILES )
foreach(file ${SRC_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/${file})
endforeach(file ${SRC_CPP_FILES})
foreach(file ${INTERNAL_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/internal/${file})
endforeach(file ${INTERNAL_CPP_FILES})
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
index 0f57022457..970a215860 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
@@ -1,89 +1,89 @@
-
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/GlobalTracking.png b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/GibbsTracking.png
similarity index 100%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/GlobalTracking.png
rename to Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/GibbsTracking.png
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.cpp
similarity index 85%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.cpp
rename to Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.cpp
index 30e297870c..e16b7c410e 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.cpp
@@ -1,699 +1,699 @@
/*=========================================================================
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.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.
=========================================================================*/
// Blueberry
#include
#include
// Qmitk
-#include "QmitkGlobalFiberTrackingView.h"
+#include "QmitkGibbsTrackingView.h"
#include
// Qt
#include
#include
#include
// MITK
#include
#include
#include
#include
// ITK
-#include
+#include
#include
// MISC
#include
-QmitkTrackingWorker::QmitkTrackingWorker(QmitkGlobalFiberTrackingView* view)
+QmitkTrackingWorker::QmitkTrackingWorker(QmitkGibbsTrackingView* view)
: m_View(view)
{
}
void QmitkTrackingWorker::run()
{
MITK_INFO << "Resampling mask images";
// setup resampler
- typedef itk::ResampleImageFilter ResamplerType;
+ typedef itk::ResampleImageFilter ResamplerType;
ResamplerType::Pointer resampler = ResamplerType::New();
resampler->SetOutputSpacing( m_View->m_ItkQBallImage->GetSpacing() );
resampler->SetOutputOrigin( m_View->m_ItkQBallImage->GetOrigin() );
resampler->SetOutputDirection( m_View->m_ItkQBallImage->GetDirection() );
resampler->SetSize( m_View->m_ItkQBallImage->GetLargestPossibleRegion().GetSize() );
// resample mask image
resampler->SetInput( m_View->m_MaskImage );
resampler->SetDefaultPixelValue(0);
resampler->Update();
m_View->m_MaskImage = resampler->GetOutput();
- m_View->m_GlobalTracker = QmitkGlobalFiberTrackingView::GlobalTrackingFilterType::New();
+ m_View->m_GlobalTracker = QmitkGibbsTrackingView::GibbsTrackingFilterType::New();
m_View->m_GlobalTracker->SetInput0(m_View->m_ItkQBallImage.GetPointer());
m_View->m_GlobalTracker->SetMaskImage(m_View->m_MaskImage);
m_View->m_GlobalTracker->SetTempStart((float)m_View->m_Controls->m_StartTempSlider->value()/100);
m_View->m_GlobalTracker->SetTempEnd((float)m_View->m_Controls->m_EndTempSlider->value()/10000);
m_View->m_GlobalTracker->SetNumIt(m_View->m_Iterations);
m_View->m_GlobalTracker->SetParticleWeight((float)m_View->m_Controls->m_ParticleWeightSlider->value()/10000);
m_View->m_GlobalTracker->SetSubtractMean(m_View->m_Controls->m_MeanSubtractionCheckbox->isChecked());
m_View->m_GlobalTracker->SetParticleWidth((float)(m_View->m_Controls->m_ParticleWidthSlider->value())/10);
m_View->m_GlobalTracker->SetParticleLength((float)(m_View->m_Controls->m_ParticleLengthSlider->value())/10);
m_View->m_GlobalTracker->SetInexBalance((float)m_View->m_Controls->m_InExBalanceSlider->value()/10);
m_View->m_GlobalTracker->SetFiberLength(m_View->m_Controls->m_FiberLengthSlider->value());
m_View->m_GlobalTracker->Update();
m_View->m_TrackingThread.quit();
}
-const std::string QmitkGlobalFiberTrackingView::VIEW_ID =
-"org.mitk.views.globalfibertracking";
+const std::string QmitkGibbsTrackingView::VIEW_ID =
+"org.mitk.views.gibbstracking";
-QmitkGlobalFiberTrackingView::QmitkGlobalFiberTrackingView()
+QmitkGibbsTrackingView::QmitkGibbsTrackingView()
: QmitkFunctionality()
, m_Controls( 0 )
, m_MultiWidget( NULL )
, m_ThreadIsRunning(false)
, m_GlobalTracker(NULL)
, m_QBallImage(NULL)
, m_MaskImage(NULL)
, m_QBallImageNode(NULL)
, m_ItkQBallImage(NULL)
, m_FiberBundleNode(NULL)
, m_TrackingWorker(this)
, m_QBallSelected(false)
, m_FibSelected(false)
, m_Iterations(10000000)
, m_LastStep(0)
{
m_TrackingWorker.moveToThread(&m_TrackingThread);
connect(&m_TrackingThread, SIGNAL(started()), this, SLOT(BeforeThread()));
connect(&m_TrackingThread, SIGNAL(started()), &m_TrackingWorker, SLOT(run()));
connect(&m_TrackingThread, SIGNAL(finished()), this, SLOT(AfterThread()));
connect(&m_TrackingThread, SIGNAL(terminated()), this, SLOT(AfterThread()));
m_TrackingTimer = new QTimer(this);
}
-QmitkGlobalFiberTrackingView::~QmitkGlobalFiberTrackingView()
+QmitkGibbsTrackingView::~QmitkGibbsTrackingView()
{
delete m_TrackingTimer;
}
// update tracking status and generate fiber bundle
-void QmitkGlobalFiberTrackingView::TimerUpdate()
+void QmitkGibbsTrackingView::TimerUpdate()
{
mitk::ProgressBar::GetInstance()->Progress(m_GlobalTracker->GetCurrentStep()-m_LastStep);
m_LastStep = m_GlobalTracker->GetCurrentStep();
UpdateTrackingStatus();
GenerateFiberBundle();
}
// tell global tractography filter to stop after current step
-void QmitkGlobalFiberTrackingView::StopGlobalTracking()
+void QmitkGibbsTrackingView::StopGibbsTracking()
{
if (m_GlobalTracker.IsNull())
return;
m_GlobalTracker->SetAbortTracking(true);
- m_Controls->m_GlobalTrackingStop->setEnabled(false);
- m_Controls->m_GlobalTrackingStop->setText("Stopping Tractography ...");
+ m_Controls->m_TrackingStop->setEnabled(false);
+ m_Controls->m_TrackingStop->setText("Stopping Tractography ...");
}
// update gui elements and generate fiber bundle after tracking is finished
-void QmitkGlobalFiberTrackingView::AfterThread()
+void QmitkGibbsTrackingView::AfterThread()
{
m_ThreadIsRunning = false;
m_TrackingTimer->stop();
UpdateGUI();
UpdateTrackingStatus();
GenerateFiberBundle();
}
// start tracking timer and update gui elements before tracking is started
-void QmitkGlobalFiberTrackingView::BeforeThread()
+void QmitkGibbsTrackingView::BeforeThread()
{
m_ThreadIsRunning = true;
m_TrackingTime = QTime::currentTime();
m_ElapsedTime = 0;
m_TrackingTimer->start(1000);
UpdateGUI();
}
// setup gui elements and signal/slot connections
-void QmitkGlobalFiberTrackingView::CreateQtPartControl( QWidget *parent )
+void QmitkGibbsTrackingView::CreateQtPartControl( QWidget *parent )
{
// build up qt view, unless already done
if ( !m_Controls )
{
// create GUI widgets from the Qt Designer's .ui file
- m_Controls = new Ui::QmitkGlobalFiberTrackingViewControls;
+ m_Controls = new Ui::QmitkGibbsTrackingViewControls;
m_Controls->setupUi( parent );
AdvancedSettings();
connect( m_TrackingTimer, SIGNAL(timeout()), this, SLOT(TimerUpdate()) );
- connect( m_Controls->m_GlobalTrackingStop, SIGNAL(clicked()), this, SLOT(StopGlobalTracking()) );
- connect( m_Controls->m_GlobalTrackingStart, SIGNAL(clicked()), this, SLOT(StartGlobalTracking()) );
+ connect( m_Controls->m_TrackingStop, SIGNAL(clicked()), this, SLOT(StopGibbsTracking()) );
+ connect( m_Controls->m_TrackingStart, SIGNAL(clicked()), this, SLOT(StartGibbsTracking()) );
connect( m_Controls->m_SetMaskButton, SIGNAL(clicked()), this, SLOT(SetMask()) );
connect( m_Controls->m_AdvancedSettingsCheckbox, SIGNAL(clicked()), this, SLOT(AdvancedSettings()) );
connect( m_Controls->m_SaveTrackingParameters, SIGNAL(clicked()), this, SLOT(SaveTrackingParameters()) );
connect( m_Controls->m_LoadTrackingParameters, SIGNAL(clicked()), this, SLOT(LoadTrackingParameters()) );
connect( m_Controls->m_IterationsSlider, SIGNAL(valueChanged(int)), this, SLOT(SetIterations(int)) );
connect( m_Controls->m_ParticleWidthSlider, SIGNAL(valueChanged(int)), this, SLOT(SetParticleWidth(int)) );
connect( m_Controls->m_ParticleLengthSlider, SIGNAL(valueChanged(int)), this, SLOT(SetParticleLength(int)) );
connect( m_Controls->m_InExBalanceSlider, SIGNAL(valueChanged(int)), this, SLOT(SetInExBalance(int)) );
connect( m_Controls->m_FiberLengthSlider, SIGNAL(valueChanged(int)), this, SLOT(SetFiberLength(int)) );
connect( m_Controls->m_ParticleWeightSlider, SIGNAL(valueChanged(int)), this, SLOT(SetParticleWeight(int)) );
connect( m_Controls->m_StartTempSlider, SIGNAL(valueChanged(int)), this, SLOT(SetStartTemp(int)) );
connect( m_Controls->m_EndTempSlider, SIGNAL(valueChanged(int)), this, SLOT(SetEndTemp(int)) );
}
}
-void QmitkGlobalFiberTrackingView::SetInExBalance(int value)
+void QmitkGibbsTrackingView::SetInExBalance(int value)
{
m_Controls->m_InExBalanceLabel->setText(QString::number((float)value/10));
}
-void QmitkGlobalFiberTrackingView::SetFiberLength(int value)
+void QmitkGibbsTrackingView::SetFiberLength(int value)
{
m_Controls->m_FiberLengthLabel->setText(QString::number(value));
}
-void QmitkGlobalFiberTrackingView::SetParticleWeight(int value)
+void QmitkGibbsTrackingView::SetParticleWeight(int value)
{
m_Controls->m_ParticleWeightLabel->setText(QString::number((float)value/10000));
}
-void QmitkGlobalFiberTrackingView::SetStartTemp(int value)
+void QmitkGibbsTrackingView::SetStartTemp(int value)
{
m_Controls->m_StartTempLabel->setText(QString::number((float)value/100));
}
-void QmitkGlobalFiberTrackingView::SetEndTemp(int value)
+void QmitkGibbsTrackingView::SetEndTemp(int value)
{
m_Controls->m_EndTempLabel->setText(QString::number((float)value/10000));
}
-void QmitkGlobalFiberTrackingView::SetParticleWidth(int value)
+void QmitkGibbsTrackingView::SetParticleWidth(int value)
{
if (value>0)
m_Controls->m_ParticleWidthLabel->setText(QString::number((float)value/10)+" mm");
else
m_Controls->m_ParticleWidthLabel->setText("auto");
}
-void QmitkGlobalFiberTrackingView::SetParticleLength(int value)
+void QmitkGibbsTrackingView::SetParticleLength(int value)
{
if (value>0)
m_Controls->m_ParticleLengthLabel->setText(QString::number((float)value/10)+" mm");
else
m_Controls->m_ParticleLengthLabel->setText("auto");
}
-void QmitkGlobalFiberTrackingView::SetIterations(int value)
+void QmitkGibbsTrackingView::SetIterations(int value)
{
switch(value)
{
case 0:
m_Controls->m_IterationsLabel->setText("Iterations: 10^4");
m_Iterations = 10000;
break;
case 1:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^4");
m_Iterations = 50000;
break;
case 2:
m_Controls->m_IterationsLabel->setText("Iterations: 10^5");
m_Iterations = 100000;
break;
case 3:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^5");
m_Iterations = 500000;
break;
case 4:
m_Controls->m_IterationsLabel->setText("Iterations: 10^6");
m_Iterations = 1000000;
break;
case 5:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^6");
m_Iterations = 5000000;
break;
case 6:
m_Controls->m_IterationsLabel->setText("Iterations: 10^7");
m_Iterations = 10000000;
break;
case 7:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^7");
m_Iterations = 50000000;
break;
case 8:
m_Controls->m_IterationsLabel->setText("10^8");
m_Iterations = 100000000;
break;
case 9:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^8");
m_Iterations = 500000000;
break;
case 10:
m_Controls->m_IterationsLabel->setText("Iterations: 10^9");
m_Iterations = 1000000000;
break;
case 11:
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^9");
m_Iterations = 5000000000;
break;
}
}
-void QmitkGlobalFiberTrackingView::StdMultiWidgetAvailable(QmitkStdMultiWidget &stdMultiWidget)
+void QmitkGibbsTrackingView::StdMultiWidgetAvailable(QmitkStdMultiWidget &stdMultiWidget)
{
m_MultiWidget = &stdMultiWidget;
}
-void QmitkGlobalFiberTrackingView::StdMultiWidgetNotAvailable()
+void QmitkGibbsTrackingView::StdMultiWidgetNotAvailable()
{
m_MultiWidget = NULL;
}
// called if datamanager selection changes
-void QmitkGlobalFiberTrackingView::OnSelectionChanged( std::vector nodes )
+void QmitkGibbsTrackingView::OnSelectionChanged( std::vector nodes )
{
m_QBallSelected = false;
m_FibSelected = false;
// iterate all selected objects
for( std::vector::iterator it = nodes.begin(); it != nodes.end(); ++it )
{
mitk::DataNode::Pointer node = *it;
if( node.IsNotNull() && dynamic_cast(node->GetData()) )
{
m_QBallSelected = true;
m_QBallImageNode = node;
}
else if (node.IsNotNull() && dynamic_cast(node->GetData()))
{
m_FibSelected = true;
m_FiberBundleNode = node;
}
}
UpdateGUI();
}
// update gui elements displaying trackings status
-void QmitkGlobalFiberTrackingView::UpdateTrackingStatus()
+void QmitkGibbsTrackingView::UpdateTrackingStatus()
{
if (m_GlobalTracker.IsNull())
return;
m_ElapsedTime += m_TrackingTime.elapsed()/1000;
m_TrackingTime.restart();
unsigned long hours = m_ElapsedTime/3600;
unsigned long minutes = (m_ElapsedTime%3600)/60;
unsigned long seconds = m_ElapsedTime%60;
m_Controls->m_ProposalAcceptance->setText(QString::number(m_GlobalTracker->GetProposalAcceptance()*100)+"%");
m_Controls->m_TrackingTimeLabel->setText( QString::number(hours)+QString("h ")+QString::number(minutes)+QString("m ")+QString::number(seconds)+QString("s") );
m_Controls->m_NumConnectionsLabel->setText( QString::number(m_GlobalTracker->GetNumConnections()) );
m_Controls->m_NumParticlesLabel->setText( QString::number(m_GlobalTracker->GetNumParticles()) );
m_Controls->m_CurrentStepLabel->setText( QString::number(100*(float)m_GlobalTracker->GetCurrentStep()/m_GlobalTracker->GetSteps())+"%" );
m_Controls->m_AcceptedFibersLabel->setText( QString::number(m_GlobalTracker->GetNumAcceptedFibers()) );
}
// update gui elements (enable/disable elements and set tooltips)
-void QmitkGlobalFiberTrackingView::UpdateGUI()
+void QmitkGibbsTrackingView::UpdateGUI()
{
if (!m_ThreadIsRunning && m_QBallSelected)
{
- m_Controls->m_GlobalTrackingStop->setEnabled(false);
- m_Controls->m_GlobalTrackingStart->setEnabled(true);
+ m_Controls->m_TrackingStop->setEnabled(false);
+ m_Controls->m_TrackingStart->setEnabled(true);
m_Controls->m_LoadTrackingParameters->setEnabled(true);
m_Controls->m_MaskFrame->setEnabled(true);
m_Controls->m_IterationsSlider->setEnabled(true);
m_Controls->m_AdvancedFrame->setEnabled(true);
- m_Controls->m_GlobalTrackingStop->setText("Stop Tractography");
- m_Controls->m_GlobalTrackingStart->setToolTip("Start tractography. No further change of parameters possible.");
- m_Controls->m_GlobalTrackingStop->setToolTip("");
+ m_Controls->m_TrackingStop->setText("Stop Tractography");
+ m_Controls->m_TrackingStart->setToolTip("Start tractography. No further change of parameters possible.");
+ m_Controls->m_TrackingStop->setToolTip("");
}
else if (!m_ThreadIsRunning)
{
- m_Controls->m_GlobalTrackingStop->setEnabled(false);
- m_Controls->m_GlobalTrackingStart->setEnabled(false);
+ m_Controls->m_TrackingStop->setEnabled(false);
+ m_Controls->m_TrackingStart->setEnabled(false);
m_Controls->m_LoadTrackingParameters->setEnabled(true);
m_Controls->m_MaskFrame->setEnabled(true);
m_Controls->m_IterationsSlider->setEnabled(true);
m_Controls->m_AdvancedFrame->setEnabled(true);
- m_Controls->m_GlobalTrackingStop->setText("Stop Tractography");
- m_Controls->m_GlobalTrackingStart->setToolTip("No Q-Ball image selected.");
- m_Controls->m_GlobalTrackingStop->setToolTip("");
+ m_Controls->m_TrackingStop->setText("Stop Tractography");
+ m_Controls->m_TrackingStart->setToolTip("No Q-Ball image selected.");
+ m_Controls->m_TrackingStop->setToolTip("");
}
else
{
- m_Controls->m_GlobalTrackingStop->setEnabled(true);
- m_Controls->m_GlobalTrackingStart->setEnabled(false);
+ m_Controls->m_TrackingStop->setEnabled(true);
+ m_Controls->m_TrackingStart->setEnabled(false);
m_Controls->m_LoadTrackingParameters->setEnabled(false);
m_Controls->m_MaskFrame->setEnabled(false);
m_Controls->m_IterationsSlider->setEnabled(false);
m_Controls->m_AdvancedFrame->setEnabled(false);
m_Controls->m_AdvancedFrame->setVisible(false);
m_Controls->m_AdvancedSettingsCheckbox->setChecked(false);
- m_Controls->m_GlobalTrackingStart->setToolTip("Tracking in progress.");
- m_Controls->m_GlobalTrackingStop->setToolTip("Stop tracking and display results.");
+ m_Controls->m_TrackingStart->setToolTip("Tracking in progress.");
+ m_Controls->m_TrackingStop->setToolTip("Stop tracking and display results.");
}
}
// show/hide advanced settings frame
-void QmitkGlobalFiberTrackingView::AdvancedSettings()
+void QmitkGibbsTrackingView::AdvancedSettings()
{
m_Controls->m_AdvancedFrame->setVisible(m_Controls->m_AdvancedSettingsCheckbox->isChecked());
}
// set mask image data node
-void QmitkGlobalFiberTrackingView::SetMask()
+void QmitkGibbsTrackingView::SetMask()
{
std::vector nodes = GetDataManagerSelection();
if (nodes.empty())
{
m_MaskImageNode = NULL;
m_Controls->m_MaskImageEdit->setText("N/A");
return;
}
for( std::vector::iterator it = nodes.begin();
it != nodes.end();
++it )
{
mitk::DataNode::Pointer node = *it;
if (node.IsNotNull() && dynamic_cast(node->GetData()))
{
m_MaskImageNode = node;
m_Controls->m_MaskImageEdit->setText(node->GetName().c_str());
return;
}
}
}
// cast image to float
template
-void QmitkGlobalFiberTrackingView::CastToFloat(InputImageType* image, mitk::Image::Pointer outImage)
+void QmitkGibbsTrackingView::CastToFloat(InputImageType* image, mitk::Image::Pointer outImage)
{
typedef itk::CastImageFilter ItkCastFilter;
typename ItkCastFilter::Pointer itkCaster = ItkCastFilter::New();
itkCaster->SetInput(image);
itkCaster->Update();
outImage->InitializeByItk(itkCaster->GetOutput());
outImage->SetVolume(itkCaster->GetOutput()->GetBufferPointer());
}
// check for mask and qbi and start tracking thread
-void QmitkGlobalFiberTrackingView::StartGlobalTracking()
+void QmitkGibbsTrackingView::StartGibbsTracking()
{
if(m_ThreadIsRunning)
{
- MITK_WARN("QmitkGlobalFiberTrackingView")<<"Thread already running!";
+ MITK_WARN("QmitkGibbsTrackingView")<<"Thread already running!";
return;
}
if (!m_QBallSelected)
{
// Nothing selected. Inform the user and return
QMessageBox::information( NULL, "Template", "Please load and select a qball image before starting image processing.");
return;
}
// a node itself is not very useful, we need its data item (the image)
mitk::BaseData* data = m_QBallImageNode->GetData();
if (!data)
return;
// test if this data item is an image or not (could also be a surface or something totally different)
m_QBallImage = dynamic_cast( data );
if (m_QBallImage.IsNull())
return;
// cast qbi to itk
m_ItkQBallImage = ItkQBallImgType::New();
mitk::CastToItkImage(m_QBallImage, m_ItkQBallImage);
// mask image found?
if(m_Controls->m_MaskImageEdit->text().compare("N/A") != 0)
{
m_MaskImage = 0;
mitk::BaseData* data = m_MaskImageNode->GetData();
if (data)
{
// test if this data item is an image or not (could also be a surface or something totally different)
mitk::Image* tmpImage = dynamic_cast( data );
if (tmpImage)
{
mitk::Image::Pointer mitkMaskImg = mitk::Image::New();
AccessFixedDimensionByItk_1(tmpImage, CastToFloat, 3, mitkMaskImg);
typedef mitk::ImageToItk CastType;
CastType::Pointer caster = CastType::New();
caster->SetInput(mitkMaskImg);
caster->Update();
m_MaskImage = caster->GetOutput();
}
}
}
// if no mask image is selected generate it
if( m_MaskImage.IsNull() )
{
m_MaskImage = MaskImgType::New();
m_MaskImage->SetSpacing( m_ItkQBallImage->GetSpacing() ); // Set the image spacing
m_MaskImage->SetOrigin( m_ItkQBallImage->GetOrigin() ); // Set the image origin
m_MaskImage->SetDirection( m_ItkQBallImage->GetDirection() ); // Set the image direction
m_MaskImage->SetLargestPossibleRegion( m_ItkQBallImage->GetLargestPossibleRegion());
m_MaskImage->SetBufferedRegion( m_ItkQBallImage->GetLargestPossibleRegion() );
m_MaskImage->Allocate();
itk::ImageRegionIterator it (m_MaskImage, m_MaskImage->GetLargestPossibleRegion() );
for (it = it.Begin(); !it.IsAtEnd(); ++it)
{
it.Set(1);
}
}
int steps = m_Iterations/10000;
if (steps<10)
steps = 10;
m_LastStep = 0;
mitk::ProgressBar::GetInstance()->AddStepsToDo(steps);
// start worker thread
m_TrackingThread.start(QThread::LowestPriority);
}
// generate mitkFiberBundle from tracking filter output
-void QmitkGlobalFiberTrackingView::GenerateFiberBundle()
+void QmitkGibbsTrackingView::GenerateFiberBundle()
{
if (m_GlobalTracker.IsNull() || m_ItkQBallImage.IsNull() || m_QBallImage.IsNull() || (!m_Controls->m_VisualizationCheckbox->isChecked() && m_ThreadIsRunning))
return;
m_FiberBundle = mitk::FiberBundle::New();
typedef std::vector< itk::Point > FiberTractType;
typedef std::vector< FiberTractType > FiberBundleType;
FiberBundleType* fiberBundle = m_GlobalTracker->GetFiberBundle();
for (int i=0; isize(); i++)
{
FiberTractType* tract = &fiberBundle->at(i);
for (int j=0; jsize(); j++)
m_FiberBundle->PushPoint(i, tract->at(j));
}
m_FiberBundle->initFiberGroup();
float bounds[] = {0,0,0};
bounds[0] = m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(0);
bounds[1] = m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(1);
bounds[2] = m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(2);
m_FiberBundle->SetBounds(bounds);
m_FiberBundle->SetGeometry(m_QBallImage->GetGeometry());
if (m_FiberBundleNode.IsNotNull()){
GetDefaultDataStorage()->Remove(m_FiberBundleNode);
m_FiberBundleNode = 0;
}
m_FiberBundleNode = mitk::DataNode::New();
m_FiberBundleNode->SetData(m_FiberBundle);
QString name(m_QBallImageNode->GetName().c_str());
name += "_FiberBundle";
m_FiberBundleNode->SetName(name.toStdString());
m_FiberBundleNode->SetVisibility(true);
if(m_QBallImageNode.IsNull())
GetDataStorage()->Add(m_FiberBundleNode);
else
GetDataStorage()->Add(m_FiberBundleNode, m_QBallImageNode);
}
// save current tracking paramters as xml file (.gtp)
-void QmitkGlobalFiberTrackingView::SaveTrackingParameters()
+void QmitkGibbsTrackingView::SaveTrackingParameters()
{
TiXmlDocument documentXML;
TiXmlDeclaration* declXML = new TiXmlDeclaration( "1.0", "", "" );
documentXML.LinkEndChild( declXML );
TiXmlElement* mainXML = new TiXmlElement("global_tracking_parameter_file");
mainXML->SetAttribute("file_version", "0.1");
documentXML.LinkEndChild(mainXML);
TiXmlElement* paramXML = new TiXmlElement("parameter_set");
paramXML->SetAttribute("iterations", m_Iterations);
paramXML->SetAttribute("particle_length", QString::number((float)m_Controls->m_ParticleLengthSlider->value()/10).toStdString());
paramXML->SetAttribute("particle_width", QString::number((float)m_Controls->m_ParticleWidthSlider->value()/10).toStdString());
paramXML->SetAttribute("particle_weight", QString::number((float)m_Controls->m_ParticleWeightSlider->value()/10000).toStdString());
paramXML->SetAttribute("temp_start", QString::number((float)m_Controls->m_StartTempSlider->value()/100).toStdString());
paramXML->SetAttribute("temp_end", QString::number((float)m_Controls->m_EndTempSlider->value()/10000).toStdString());
paramXML->SetAttribute("inexbalance", QString::number((float)m_Controls->m_InExBalanceSlider->value()/10).toStdString());
paramXML->SetAttribute("fiber_length", QString::number(m_Controls->m_FiberLengthSlider->value()).toStdString());
mainXML->LinkEndChild(paramXML);
QString filename = QFileDialog::getSaveFileName(
0,
tr("Save Parameters"),
QDir::currentPath()+"/param.gtp",
tr("Global Tracking Parameters (*.gtp)") );
if(filename.isEmpty() || filename.isNull())
return;
if(!filename.endsWith(".gtp"))
filename += ".gtp";
documentXML.SaveFile( filename.toStdString() );
}
-void QmitkGlobalFiberTrackingView::UpdateIteraionsGUI(unsigned long iterations)
+void QmitkGibbsTrackingView::UpdateIteraionsGUI(unsigned long iterations)
{
switch(iterations)
{
case 10000:
m_Controls->m_IterationsSlider->setValue(0);
m_Controls->m_IterationsLabel->setText("Iterations: 10^4");
break;
case 50000:
m_Controls->m_IterationsSlider->setValue(1);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^4");
break;
case 100000:
m_Controls->m_IterationsSlider->setValue(2);
m_Controls->m_IterationsLabel->setText("Iterations: 10^5");
break;
case 500000:
m_Controls->m_IterationsSlider->setValue(3);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^5");
break;
case 1000000:
m_Controls->m_IterationsSlider->setValue(4);
m_Controls->m_IterationsLabel->setText("Iterations: 10^6");
break;
case 5000000:
m_Controls->m_IterationsSlider->setValue(5);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^6");
break;
case 10000000:
m_Controls->m_IterationsSlider->setValue(6);
m_Controls->m_IterationsLabel->setText("Iterations: 10^7");
break;
case 50000000:
m_Controls->m_IterationsSlider->setValue(7);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^7");
break;
case 100000000:
m_Controls->m_IterationsSlider->setValue(8);
m_Controls->m_IterationsLabel->setText("Iterations: 10^8");
break;
case 500000000:
m_Controls->m_IterationsSlider->setValue(9);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^8");
break;
case 1000000000:
m_Controls->m_IterationsSlider->setValue(10);
m_Controls->m_IterationsLabel->setText("Iterations: 10^9");
break;
case 5000000000:
m_Controls->m_IterationsSlider->setValue(11);
m_Controls->m_IterationsLabel->setText("Iterations: 5x10^9");
break;
}
}
// load current tracking paramters from xml file (.gtp)
-void QmitkGlobalFiberTrackingView::LoadTrackingParameters()
+void QmitkGibbsTrackingView::LoadTrackingParameters()
{
QString filename = QFileDialog::getOpenFileName(0, tr("Load Parameters"), QDir::currentPath(), tr("Global Tracking Parameters (*.gtp)") );
if(filename.isEmpty() || filename.isNull())
return;
TiXmlDocument doc( filename.toStdString() );
doc.LoadFile();
TiXmlHandle hDoc(&doc);
TiXmlElement* pElem;
TiXmlHandle hRoot(0);
pElem = hDoc.FirstChildElement().Element();
hRoot = TiXmlHandle(pElem);
pElem = hRoot.FirstChildElement("parameter_set").Element();
QString iterations(pElem->Attribute("iterations"));
m_Iterations = iterations.toULong();
UpdateIteraionsGUI(m_Iterations);
QString particleLength(pElem->Attribute("particle_length"));
float pLength = particleLength.toFloat();
QString particleWidth(pElem->Attribute("particle_width"));
float pWidth = particleWidth.toFloat();
if (pLength==0)
m_Controls->m_ParticleLengthLabel->setText("auto");
else
m_Controls->m_ParticleLengthLabel->setText(particleLength+" mm");
if (pWidth==0)
m_Controls->m_ParticleWidthLabel->setText("auto");
else
m_Controls->m_ParticleWidthLabel->setText(particleWidth+" mm");
m_Controls->m_ParticleWidthSlider->setValue(pWidth*10);
m_Controls->m_ParticleLengthSlider->setValue(pLength*10);
QString partWeight(pElem->Attribute("particle_weight"));
m_Controls->m_ParticleWeightSlider->setValue(partWeight.toFloat()*10000);
m_Controls->m_ParticleWeightLabel->setText(partWeight);
QString startTemp(pElem->Attribute("temp_start"));
m_Controls->m_StartTempSlider->setValue(startTemp.toFloat()*100);
m_Controls->m_StartTempLabel->setText(startTemp);
QString endTemp(pElem->Attribute("temp_end"));
m_Controls->m_EndTempSlider->setValue(endTemp.toFloat()*10000);
m_Controls->m_EndTempLabel->setText(endTemp);
QString inExBalance(pElem->Attribute("inexbalance"));
m_Controls->m_InExBalanceSlider->setValue(inExBalance.toFloat()*10);
m_Controls->m_InExBalanceLabel->setText(inExBalance);
QString fiberLength(pElem->Attribute("fiber_length"));
m_Controls->m_FiberLengthSlider->setValue(fiberLength.toInt());
m_Controls->m_FiberLengthLabel->setText(fiberLength);
}
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.h b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.h
similarity index 81%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.h
rename to Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.h
index 6669acf79a..06bd290e4b 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingView.h
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingView.h
@@ -1,162 +1,162 @@
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $
Version: $Revision: 21975 $
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.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 QmitkGlobalFiberTrackingView_h
-#define QmitkGlobalFiberTrackingView_h
+#ifndef QmitkGibbsTrackingView_h
+#define QmitkGibbsTrackingView_h
#include
#include
-#include "ui_QmitkGlobalFiberTrackingViewControls.h"
+#include "ui_QmitkGibbsTrackingViewControls.h"
#include
#include
#include
#include
#include
-class QmitkGlobalFiberTrackingView;
+class QmitkGibbsTrackingView;
class QmitkTrackingWorker : public QObject
{
Q_OBJECT
public:
- QmitkTrackingWorker(QmitkGlobalFiberTrackingView* view);
+ QmitkTrackingWorker(QmitkGibbsTrackingView* view);
public slots:
void run();
private:
- QmitkGlobalFiberTrackingView* m_View;
+ QmitkGibbsTrackingView* m_View;
};
/*!
- \brief QmitkGlobalFiberTrackingView
+ \brief QmitkGibbsTrackingView
\warning This application module is not yet documented. Use "svn blame/praise/annotate" and ask the author to provide basic documentation.
\sa QmitkFunctionality
\ingroup Functionalities
*/
typedef itk::Image< float, 3 > FloatImageType;
namespace itk
{
template
-class GlobalTractographyFilter;
+class GibbsTrackingFilter;
}
-class QmitkGlobalFiberTrackingView : public QmitkFunctionality
+class QmitkGibbsTrackingView : public QmitkFunctionality
{
// this is needed for all Qt objects that should have a Qt meta-object
// (everything that derives from QObject and wants to have signal/slots)
Q_OBJECT
public:
typedef itk::Image MaskImgType;
typedef itk::Vector OdfVectorType;
typedef itk::Image ItkQBallImgType;
- typedef itk::GlobalTractographyFilter GlobalTrackingFilterType;
+ typedef itk::GibbsTrackingFilter GibbsTrackingFilterType;
static const std::string VIEW_ID;
- QmitkGlobalFiberTrackingView();
- virtual ~QmitkGlobalFiberTrackingView();
+ QmitkGibbsTrackingView();
+ virtual ~QmitkGibbsTrackingView();
virtual void CreateQtPartControl(QWidget *parent);
virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget);
virtual void StdMultiWidgetNotAvailable();
signals:
protected slots:
- void StartGlobalTracking();
- void StopGlobalTracking();
+ void StartGibbsTracking();
+ void StopGibbsTracking();
void AfterThread();
void BeforeThread();
void TimerUpdate();
void SetMask();
void AdvancedSettings();
void SaveTrackingParameters();
void LoadTrackingParameters();
void SetIterations(int value);
void SetParticleWidth(int value);
void SetParticleLength(int value);
void SetInExBalance(int value);
void SetFiberLength(int value);
void SetParticleWeight(int value);
void SetStartTemp(int value);
void SetEndTemp(int value);
private:
// Visualization & GUI
void GenerateFiberBundle();
void UpdateGUI();
void UpdateTrackingStatus();
/// \brief called by QmitkFunctionality when DataManager's selection has changed
virtual void OnSelectionChanged( std::vector nodes );
template
void CastToFloat(InputImageType* image, typename mitk::Image::Pointer outImage);
void UpdateIteraionsGUI(unsigned long iterations);
- Ui::QmitkGlobalFiberTrackingViewControls* m_Controls;
+ Ui::QmitkGibbsTrackingViewControls* m_Controls;
QmitkStdMultiWidget* m_MultiWidget;
// data objects
mitk::FiberBundle::Pointer m_FiberBundle;
MaskImgType::Pointer m_MaskImage;
mitk::QBallImage::Pointer m_QBallImage;
ItkQBallImgType::Pointer m_ItkQBallImage;
// data nodes
mitk::DataNode::Pointer m_QBallImageNode;
mitk::DataNode::Pointer m_MaskImageNode;
mitk::DataNode::Pointer m_FiberBundleNode;
// flags etc.
bool m_ThreadIsRunning;
QTimer* m_TrackingTimer;
QTime m_TrackingTime;
unsigned long m_ElapsedTime;
bool m_QBallSelected;
bool m_FibSelected;
unsigned long m_Iterations;
int m_LastStep;
// global tracker and friends
- itk::SmartPointer m_GlobalTracker;
+ itk::SmartPointer m_GlobalTracker;
QmitkTrackingWorker m_TrackingWorker;
QThread m_TrackingThread;
friend class QmitkTrackingWorker;
};
-#endif // _QMITKGLOBALFIBERTRACKINGVIEW_H_INCLUDED
+#endif // _QMITKGibbsTrackingVIEW_H_INCLUDED
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingViewControls.ui
similarity index 97%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingViewControls.ui
rename to Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingViewControls.ui
index 7f907bfd2b..8ead3eed2f 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGlobalFiberTrackingViewControls.ui
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkGibbsTrackingViewControls.ui
@@ -1,946 +1,948 @@
- QmitkGlobalFiberTrackingViewControls
-
+ QmitkGibbsTrackingViewControls
+
0
0
463
1011
0
0
0
0
QmitkTemplate
0
3
0
3
0
-
false
0
0
-
true
false
QFrame::NoFrame
QFrame::Raised
QFormLayout::AllNonFixedFieldsGrow
0
4
0
-
Mask Image
-
Mask image. Particles will be sampled with a probability according to the voxel value.
QFrame::StyledPanel
QFrame::Raised
0
-
true
=>
-
true
N/A
true
-
Iterations: 10^7
-
true
Visualize Tractography
true
-
Advanced Settings
-
true
QFrame::StyledPanel
QFrame::Raised
0
4
0
-
auto
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
auto = 1.5 * min. spacing; l
100
1
Qt::Horizontal
QSlider::NoTicks
-
auto
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
auto = 0.5 * min. spacing; sigma
100
1
Qt::Horizontal
QSlider::NoTicks
-
0.001
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
unitless w
1
1000
1
10
Qt::Horizontal
true
QSlider::NoTicks
-
0.1
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
1
100
1
10
Qt::Horizontal
false
false
QSlider::NoTicks
-
0.001
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
1
99
1
10
Qt::Horizontal
QSlider::NoTicks
-
0
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
IE Bias < 0 < EE Bias
-50
50
1
Qt::Horizontal
QSlider::NoTicks
-
10
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
Only fibers containing more than the specified number of particles are accepted.
100
1
10
Qt::Horizontal
QSlider::NoTicks
-
Particle Length:
-
Particle Width:
-
Particle Weight:
-
Start Temperature:
-
End Temperature:
-
Balance In/Ex Energy:
-
Min. Fiber Length:
-
true
Use mean subtracted ODFs (recommended).
Subtract ODF Mean
true
-
Qt::Horizontal
QSizePolicy::Fixed
60
20
-
true
Save current parameters as xml (.gtp)
Qt::LeftToRight
Save Parameters
-
+
:/qmitk/btnMoveDown.png:/qmitk/btnMoveDown.png
-
true
Load parameters from xml file (.gtp)
Qt::LeftToRight
Load Parameters
-
+
:/qmitk/btnMoveUp.png:/qmitk/btnMoveUp.png
-
Specify number of iterations for the tracking algorithm.
11
6
Qt::Horizontal
QSlider::TicksBelow
-
-
+
false
No Q-Ball image selected.
Qt::LeftToRight
Start Tractography
-
+
:/qmitk/play.xpm:/qmitk/play.xpm
-
-
+
false
Qt::LeftToRight
Stop Tractography
-
+
:/qmitk/stop.xpm:/qmitk/stop.xpm
-
0
0
0
0
QFrame::StyledPanel
QFrame::Raised
0
7
0
-
Will only be updated if tracking is visualized
Will only be updated if tracking is visualized
Accepted Fibers:
-
Will only be updated if tracking is visualized
-
-
Progress:
-
-
-
Connections:
-
Particles:
-
-
-
-
-
Tracking Time:
-
-
-
Proposal Acceptance Rate:
-
-
-
Qt::Vertical
QSizePolicy::Expanding
0
0
-
+
+
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
index a95a91f56b..ec30dbed30 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
@@ -1,46 +1,46 @@
#include "mitkPluginActivator.h"
#include
#include "src/internal/QmitkDiffusionImagingPublicPerspective.h"
#include "src/internal/QmitkQBallReconstructionView.h"
#include "src/internal/QmitkPreprocessingView.h"
#include "src/internal/QmitkDiffusionDicomImportView.h"
#include "src/internal/QmitkDiffusionQuantificationView.h"
#include "src/internal/QmitkTensorReconstructionView.h"
#include "src/internal/QmitkControlVisualizationPropertiesView.h"
#include "src/internal/QmitkODFDetailsView.h"
-#include "src/internal/QmitkGlobalFiberTrackingView.h"
+#include "src/internal/QmitkGibbsTrackingView.h"
#include "src/internal/QmitkFiberBundleOperationsView.h"
#include "src/internal/QmitkFiberBundleDeveloperView.h"
#include "src/internal/QmitkPartialVolumeAnalysisView.h"
namespace mitk {
void PluginActivator::start(ctkPluginContext* context)
{
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionImagingPublicPerspective, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkQBallReconstructionView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkPreprocessingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionDicomImport, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionQuantificationView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkTensorReconstructionView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkControlVisualizationPropertiesView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkODFDetailsView, context)
- BERRY_REGISTER_EXTENSION_CLASS(QmitkGlobalFiberTrackingView, context)
+ BERRY_REGISTER_EXTENSION_CLASS(QmitkGibbsTrackingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkFiberBundleOperationsView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkFiberBundleDeveloperView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkPartialVolumeAnalysisView, context)
}
void PluginActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
}
}
Q_EXPORT_PLUGIN2(org_mitk_gui_qt_diffusionimaging, mitk::PluginActivator)
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkDIAppFiberTractographyPerspective.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkDIAppFiberTractographyPerspective.cpp
index 710cc4d952..3d368eb148 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkDIAppFiberTractographyPerspective.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkDIAppFiberTractographyPerspective.cpp
@@ -1,69 +1,69 @@
/*=========================================================================
-
+
Program: BlueBerry Platform
Language: C++
Date: $Date: 2009-10-23 02:59:36 +0200 (Fr, 23 Okt 2009) $
Version: $Revision: 19652 $
-
+
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.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 "QmitkDIAppFiberTractographyPerspective.h"
#include "berryIViewLayout.h"
void QmitkDIAppFiberTractographyPerspective::CreateInitialLayout(berry::IPageLayout::Pointer layout)
{
/////////////////////////////////////////////////////
// all di-app perspectives should have the following:
/////////////////////////////////////////////////////
std::string editorArea = layout->GetEditorArea();
layout->AddStandaloneView("org.mitk.views.datamanager",
false, berry::IPageLayout::LEFT, 0.3f, editorArea);
layout->AddStandaloneView("org.mitk.views.controlvisualizationpropertiesview",
false, berry::IPageLayout::BOTTOM, .2f, "org.mitk.views.datamanager");
berry::IFolderLayout::Pointer left =
layout->CreateFolder("org.mitk.diffusionimaginginternal.leftcontrols",
berry::IPageLayout::BOTTOM, 0.15f, "org.mitk.views.controlvisualizationpropertiesview");
layout->AddStandaloneView("org.mitk.views.imagenavigator",
false, berry::IPageLayout::BOTTOM, .4f, "org.mitk.diffusionimaginginternal.leftcontrols");
left->AddView("org.mitk.views.masterview");
berry::IViewLayout::Pointer lo = layout->GetViewLayout("org.mitk.views.masterview");
lo->SetCloseable(false);
berry::IFolderLayout::Pointer right =
layout->CreateFolder("org.mitk.diffusionimaginginternal.rightcontrols", berry::IPageLayout::RIGHT, 0.5f, editorArea);
/////////////////////////////////////////////
// here goes the perspective specific stuff
/////////////////////////////////////////////
- right->AddView("org.mitk.views.globalfibertracking");
- lo = layout->GetViewLayout("org.mitk.views.globalfibertracking");
+ right->AddView("org.mitk.views.gibbstracking");
+ lo = layout->GetViewLayout("org.mitk.views.gibbstracking");
lo->SetCloseable(false);
right->AddView("org.mitk.views.fibertracking");
lo = layout->GetViewLayout("org.mitk.views.fibertracking");
lo->SetCloseable(false);
right->AddView("org.mitk.views.fiberbundleoperations");
lo = layout->GetViewLayout("org.mitk.views.fiberbundleoperations");
lo->SetCloseable(false);
right->AddView("org.mitk.views.trackingevaluation");
lo = layout->GetViewLayout("org.mitk.views.trackingevaluation");
lo->SetCloseable(false);
}
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkTrackingPerspective.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkTrackingPerspective.cpp
index 37bfe4c3ef..dacb3350b6 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkTrackingPerspective.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimagingapp/src/internal/QmitkTrackingPerspective.cpp
@@ -1,41 +1,41 @@
/*=========================================================================
Program: BlueBerry Platform
Language: C++
Date: $Date: 2009-10-23 02:59:36 +0200 (Fr, 23 Okt 2009) $
Version: $Revision: 19652 $
Copyright (c) German Cancer Research Center, Division of Medical and
Biological Informatics. All rights reserved.
See MITKCopyright.txt or http://www.mitk.org/copyright.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 "QmitkTrackingPerspective.h"
void QmitkTrackingPerspective::CreateInitialLayout(berry::IPageLayout::Pointer layout)
{
std::string editorArea = layout->GetEditorArea();
layout->AddStandaloneView("org.mitk.views.datamanager", false, berry::IPageLayout::LEFT, 0.3f, editorArea);
layout->AddStandaloneView("org.mitk.views.controlvisualizationpropertiesview",
false, berry::IPageLayout::BOTTOM, .2f, "org.mitk.views.datamanager");
berry::IFolderLayout::Pointer left =
layout->CreateFolder("org.mitk.leftcontrols",
berry::IPageLayout::BOTTOM, 0.2f, "org.mitk.views.controlvisualizationpropertiesview");
- left->AddView("org.mitk.views.globalfibertracking");
+ left->AddView("org.mitk.views.gibbstracking");
left->AddView("org.mitk.views.fiberbundleoperations");
- berry::IViewLayout::Pointer lo = layout->GetViewLayout("org.mitk.views.globalfibertracking");
+ berry::IViewLayout::Pointer lo = layout->GetViewLayout("org.mitk.views.gibbstracking");
lo->SetCloseable(false);
lo = layout->GetViewLayout("org.mitk.views.fiberbundleoperations");
lo->SetCloseable(false);
}
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/AccumulateBilin.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/AccumulateBilin.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/AccumulateBilin.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/AccumulateBilin.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/AccumulateBilinWeighted.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/AccumulateBilinWeighted.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/AccumulateBilinWeighted.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/AccumulateBilinWeighted.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/BuildFibres.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/BuildFibres.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/BuildFibres.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/BuildFibres.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/EnergyComputerBase.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/EnergyComputerBase.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/EnergyComputerBase.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/EnergyComputerBase.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/EnergyComputer_connec.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/EnergyComputer_connec.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/EnergyComputer_connec.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/EnergyComputer_connec.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/MersenneTwister.h b/Modules/DiffusionImaging/Tractography/GibbsTracking/MersenneTwister.h
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/MersenneTwister.h
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/MersenneTwister.h
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/ParticleGrid.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/ParticleGrid.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/ParticleGrid.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/ParticleGrid.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/RJMCMCBase.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/RJMCMCBase.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/RJMCMCBase.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/RJMCMCBase.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/RJMCMC_randshift.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/RJMCMC_randshift.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/RJMCMC_randshift.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/RJMCMC_randshift.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/SphereInterpolator.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/SphereInterpolator.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/SphereInterpolator.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/SphereInterpolator.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/anisoDiffusion.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/anisoDiffusion.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/anisoDiffusion.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/anisoDiffusion.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/anisoDiffusionHomogenous.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/anisoDiffusionHomogenous.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/anisoDiffusionHomogenous.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/anisoDiffusionHomogenous.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/auxilary_classes.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/auxilary_classes.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/auxilary_classes.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/auxilary_classes.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/pcRJMCMC.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/pcRJMCMC.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/pcRJMCMC.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/pcRJMCMC.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen2.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen2.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen2.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen2.cpp
diff --git a/Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen_new.cpp b/Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen_new.cpp
similarity index 100%
rename from Modules/DiffusionImaging/Tractography/GlobalTracking/reparametrize_arclen_new.cpp
rename to Modules/DiffusionImaging/Tractography/GibbsTracking/reparametrize_arclen_new.cpp
diff --git a/Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.cpp b/Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.cpp
similarity index 93%
rename from Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.cpp
rename to Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.cpp
index 9f13de5ccb..44d0c4ee47 100644
--- a/Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.cpp
+++ b/Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.cpp
@@ -1,475 +1,475 @@
-#include "itkGlobalTractographyFilter.h"
+#include "itkGibbsTrackingFilter.h"
#include
#include
#include "itkPointShell.h"
-#include "GlobalTracking/BuildFibres.cpp"
+#include "GibbsTracking/BuildFibres.cpp"
#pragma GCC visibility push(default)
#include
#pragma GCC visibility pop
#include
#include
#include
#include
#include
#include
-#include "GlobalTracking/reparametrize_arclen2.cpp"
+#include "GibbsTracking/reparametrize_arclen2.cpp"
#include
struct LessDereference {
template
bool operator()(const T * lhs, const T * rhs) const {
return *lhs < *rhs;
}
};
namespace itk{
template< class TInputOdfImage, class TInputROIImage >
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
- ::GlobalTractographyFilter():
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
+ ::GibbsTrackingFilter():
m_TempStart(0.1),
m_TempEnd(0.001),
m_NumIt(500000),
m_ParticleWeight(0),
m_ParticleWidth(0),
m_ParticleLength(0),
m_ChempotConnection(10),
m_ChempotParticle(0),
m_InexBalance(0),
m_Chempot2(0.2),
m_FiberLength(10),
m_AbortTracking(false),
m_NumConnections(0),
m_NumParticles(0),
m_NumAcceptedFibers(0),
m_CurrentStep(0),
m_SubtractMean(true),
m_BuildFibers(false),
m_Sampler(NULL),
m_Steps(10),
m_Memory(0),
m_ProposalAcceptance(0)
{
//this->m_MeasurementFrame.set_identity();
this->SetNumberOfRequiredInputs(2); //Filter needs a DWI image + a Mask Image
}
template< class TInputOdfImage, class TInputROIImage >
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
- ::~GlobalTractographyFilter(){
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
+ ::~GibbsTrackingFilter(){
delete BESSEL_APPROXCOEFF;
if (m_Sampler!=NULL)
delete m_Sampler;
}
template< class TInputOdfImage, class TInputROIImage >
void
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
::ComputeFiberCorrelation(){
// float bD = 15;
// vnl_matrix_fixed bDir =
// *itk::PointShell >::DistributePointShell();
// const int N = QBALL_ODFSIZE;
// vnl_matrix_fixed temp = bDir.transpose();
// vnl_matrix_fixed C = temp*bDir;
// vnl_matrix_fixed Q = C;
// vnl_vector_fixed mean;
// for(int i=0; i repMean;
// for (int i=0; i P = Q*Q;
// std::vector pointer;
// pointer.reserve(N*N);
// double * start = C.data_block();
// double * end = start + N*N;
// for (double * iter = start; iter != end; ++iter)
// {
// pointer.push_back(iter);
// }
// std::sort(pointer.begin(), pointer.end(), LessDereference());
// vnl_vector_fixed alpha;
// vnl_vector_fixed beta;
// for (int i=0; im_Meanval_sq = (sum*sum)/N;
// vnl_vector_fixed alpha_0;
// vnl_vector_fixed alpha_2;
// vnl_vector_fixed alpha_4;
// vnl_vector_fixed alpha_6;
// for(int i=0; i T;
// T.set_column(0,alpha_0);
// T.set_column(1,alpha_2);
// T.set_column(2,alpha_4);
// T.set_column(3,alpha_6);
// vnl_vector_fixed coeff = vnl_matrix_inverse(T).pinverse()*beta;
// MITK_INFO << "Bessel oefficients: " << coeff;
BESSEL_APPROXCOEFF = new float[4];
// BESSEL_APPROXCOEFF[0] = coeff(0);
// BESSEL_APPROXCOEFF[1] = coeff(1);
// BESSEL_APPROXCOEFF[2] = coeff(2);
// BESSEL_APPROXCOEFF[3] = coeff(3);
BESSEL_APPROXCOEFF[0] = -0.1714;
BESSEL_APPROXCOEFF[1] = 0.5332;
BESSEL_APPROXCOEFF[2] = -1.4889;
BESSEL_APPROXCOEFF[3] = 2.0389;
}
// build fibers from tracking result
template< class TInputOdfImage, class TInputROIImage >
void
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
::BuildFibers(float* points, int numPoints)
{
MITK_INFO << "Building fibers ...";
typename InputQBallImageType::Pointer odfImage
= dynamic_cast(this->GetInput(0));
double spacing[3];
spacing[0] = odfImage->GetSpacing().GetElement(0);
spacing[1] = odfImage->GetSpacing().GetElement(1);
spacing[2] = odfImage->GetSpacing().GetElement(2);
// initialize array of particles
CCAnalysis ccana(points, numPoints, spacing);
// label the particles according to fiber affiliation and return number of fibers
int numFibers = ccana.iterate(m_FiberLength);
if (numFibers<=0){
MITK_INFO << "0 fibers accepted";
return;
}
// fill output datastructure
m_FiberBundle.clear();
for (int i = 0; i < numFibers; i++)
{
vector< Particle* >* particleContainer = ccana.m_FiberContainer->at(i);
// resample fibers
std::vector< Particle* >* pCon = ResampleFibers(particleContainer, 0.9*spacing[0]);
FiberTractType tract;
for (int j=0; jsize(); j++)
{
Particle* particle = pCon->at(j);
pVector p = particle->R;
itk::Point point;
point[0] = p[0]-0.5;
point[1] = p[1]-0.5;
point[2] = p[2]-0.5;
tract.push_back(point);
delete(particle);
}
m_FiberBundle.push_back(tract);
delete(pCon);
}
m_NumAcceptedFibers = numFibers;
- MITK_INFO << "itkGlobalTractographyFilter: " << numFibers << " fibers accepted";
+ MITK_INFO << "itkGibbsTrackingFilter: " << numFibers << " fibers accepted";
}
// fill output fiber bundle datastructure
template< class TInputOdfImage, class TInputROIImage >
- typename GlobalTractographyFilter< TInputOdfImage, TInputROIImage >::FiberBundleType*
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
+ typename GibbsTrackingFilter< TInputOdfImage, TInputROIImage >::FiberBundleType*
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
::GetFiberBundle()
{
if (!m_AbortTracking)
{
m_BuildFibers = true;
while (m_BuildFibers){}
}
return &m_FiberBundle;
}
// get memory allocated for particle grid
template< class TInputOdfImage, class TInputROIImage >
float
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
::GetMemoryUsage()
{
if (m_Sampler!=NULL)
return m_Sampler->m_ParticleGrid.GetMemoryUsage();
return 0;
}
// perform global tracking
template< class TInputOdfImage, class TInputROIImage >
void
- GlobalTractographyFilter< TInputOdfImage, TInputROIImage >
+ GibbsTrackingFilter< TInputOdfImage, TInputROIImage >
::GenerateData(){
// input qball image
m_ItkQBallImage = dynamic_cast(this->GetInput(0));
// approximationscoeffizienten der
// teilchenkorrelationen im orientierungsraum
// 4er vektor
ComputeFiberCorrelation();
// image sizes and spacing
int qBallImageSize[4] = {QBALL_ODFSIZE,
m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(0),
m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(1),
m_ItkQBallImage->GetLargestPossibleRegion().GetSize().GetElement(2)};
double qBallImageSpacing[3] = {m_ItkQBallImage->GetSpacing().GetElement(0),m_ItkQBallImage->GetSpacing().GetElement(1),m_ItkQBallImage->GetSpacing().GetElement(2)};
// make sure image has enough slices
if (qBallImageSize[1]<3 || qBallImageSize[2]<3 || qBallImageSize[3]<3)
{
MITK_INFO << "image size < 3 not supported";
return;
}
// calculate rotation matrix
vnl_matrix_fixed directionMatrix = m_ItkQBallImage->GetDirection().GetVnlMatrix();
vnl_vector_fixed d0 = directionMatrix.get_column(0); d0.normalize();
vnl_vector_fixed d1 = directionMatrix.get_column(1); d1.normalize();
vnl_vector_fixed d2 = directionMatrix.get_column(2); d2.normalize();
directionMatrix.set_column(0, d0);
directionMatrix.set_column(1, d1);
directionMatrix.set_column(2, d2);
vnl_matrix_fixed I = directionMatrix*directionMatrix.transpose();
if(!I.is_identity(mitk::eps)){
MITK_INFO << "Image direction is not a rotation matrix. Tracking not possible!";
return;
}
// generate local working copy of image buffer
int bufferSize = qBallImageSize[0]*qBallImageSize[1]*qBallImageSize[2]*qBallImageSize[3];
float* qBallImageBuffer = (float*) m_ItkQBallImage->GetBufferPointer();
float* workingQballImage = new float[bufferSize];
for (int i=0; i0 && i%qBallImageSize[0] == 0 && i>0)
{
sum /= qBallImageSize[0];
for (int j=i-qBallImageSize[0]; jGetBufferPointer();
maskImageSize[0] = m_MaskImage->GetLargestPossibleRegion().GetSize().GetElement(0);
maskImageSize[1] = m_MaskImage->GetLargestPossibleRegion().GetSize().GetElement(1);
maskImageSize[2] = m_MaskImage->GetLargestPossibleRegion().GetSize().GetElement(2);
}
else
{
mask = 0;
maskImageSize[0] = qBallImageSize[1];
maskImageSize[1] = qBallImageSize[2];
maskImageSize[2] = qBallImageSize[3];
}
int mask_oversamp_mult = maskImageSize[0]/qBallImageSize[1];
// load lookuptable
ifstream BaryCoords;
BaryCoords.open("FiberTrackingLUTBaryCoords.bin", ios::in | ios::binary);
float* coords;
if (BaryCoords.is_open())
{
float tmp;
coords = new float [1630818];
BaryCoords.seekg (0, ios::beg);
for (int i=0; i<1630818; i++)
{
BaryCoords.read((char *)&tmp, sizeof(tmp));
coords[i] = tmp;
}
BaryCoords.close();
}
else
{
MITK_INFO << "Unable to open barycoords file";
return;
}
ifstream Indices;
Indices.open("FiberTrackingLUTIndices.bin", ios::in | ios::binary);
int* ind;
if (Indices.is_open())
{
int tmp;
ind = new int [1630818];
Indices.seekg (0, ios::beg);
for (int i=0; i<1630818; i++)
{
Indices.read((char *)&tmp, 4);
ind[i] = tmp;
}
Indices.close();
}
else
{
MITK_INFO << "Unable to open indices file";
return;
}
// initialize sphere interpolator with lookuptables
SphereInterpolator *sinterp = new SphereInterpolator(coords, ind, QBALL_ODFSIZE, 301, 0.5);
// get paramters
float minSpacing;
if(qBallImageSpacing[0]m_NumIt)
{
MITK_INFO << "not enough iterations!";
return;
}
unsigned long singleIts = (unsigned long)((1.0*m_NumIt) / (1.0*m_Steps));
// setup metropolis hastings sampler
- MITK_INFO << "itkGlobalTractographyFilter: setting up MH-sampler";
+ MITK_INFO << "itkGibbsTrackingFilter: setting up MH-sampler";
if (m_Sampler!=NULL)
delete m_Sampler;
m_Sampler = new RJMCMC(NULL, 0, workingQballImage, qBallImageSize, qBallImageSpacing, cellsize);
// setup energy computer
- MITK_INFO << "itkGlobalTractographyFilter: setting up Energy-computer";
+ MITK_INFO << "itkGibbsTrackingFilter: setting up Energy-computer";
EnergyComputer encomp(workingQballImage,qBallImageSize,qBallImageSpacing,sinterp,&(m_Sampler->m_ParticleGrid),mask,mask_oversamp_mult, directionMatrix);
encomp.setParameters(m_ParticleWeight,m_ParticleWidth,m_ChempotConnection*m_ParticleLength*m_ParticleLength,m_ParticleLength,curvatureHardThreshold,m_InexBalance,m_Chempot2);
m_Sampler->SetEnergyComputer(&encomp);
m_Sampler->SetParameters(m_TempStart,singleIts,m_ParticleLength,curvatureHardThreshold,m_ChempotParticle);
// main loop
for( int step = 0; step < m_Steps; step++ )
{
if (m_AbortTracking)
break;
m_CurrentStep = step+1;
float temperature = m_TempStart * exp(alpha*(((1.0)*step)/((1.0)*m_Steps)));
MITK_INFO << "iterating step " << m_CurrentStep;
m_Sampler->SetTemperature(temperature);
m_Sampler->Iterate(&m_ProposalAcceptance, &m_NumConnections, &m_NumParticles, &m_AbortTracking);
MITK_INFO << "proposal acceptance: " << 100*m_ProposalAcceptance << "%";
MITK_INFO << "particles: " << m_NumParticles;
MITK_INFO << "connections: " << m_NumConnections;
MITK_INFO << "progress: " << 100*(float)step/m_Steps << "%";
if (m_BuildFibers)
{
int numPoints = m_Sampler->m_ParticleGrid.pcnt;
float* points = new float[numPoints*m_Sampler->m_NumAttributes];
m_Sampler->WriteOutParticles(points);
BuildFibers(points, numPoints);
delete points;
m_BuildFibers = false;
}
}
int numPoints = m_Sampler->m_ParticleGrid.pcnt;
float* points = new float[numPoints*m_Sampler->m_NumAttributes];
m_Sampler->WriteOutParticles(points);
BuildFibers(points, numPoints);
delete points;
delete sinterp;
delete coords;
delete ind;
delete workingQballImage;
m_AbortTracking = true;
m_BuildFibers = false;
MITK_INFO << "done generate data";
}
}
diff --git a/Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.h b/Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.h
similarity index 91%
rename from Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.h
rename to Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.h
index 45c31a9f09..8760c6fdf9 100644
--- a/Modules/DiffusionImaging/Tractography/itkGlobalTractographyFilter.h
+++ b/Modules/DiffusionImaging/Tractography/itkGibbsTrackingFilter.h
@@ -1,164 +1,164 @@
-#ifndef itkGlobalTractographyFilter_h
-#define itkGlobalTractographyFilter_h
+#ifndef itkGibbsTrackingFilter_h
+#define itkGibbsTrackingFilter_h
#include "itkProcessObject.h"
#include "itkVectorContainer.h"
#include "itkImage.h"
-#include "GlobalTracking/pcRJMCMC.cpp"
-#include "GlobalTracking/auxilary_classes.cpp"
+#include "GibbsTracking/pcRJMCMC.cpp"
+#include "GibbsTracking/auxilary_classes.cpp"
#include
namespace itk{
template< class TInputQBallImage, class TInputROIImage >
- class GlobalTractographyFilter :
+ class GibbsTrackingFilter :
public ProcessObject{
public:
- typedef GlobalTractographyFilter Self;
+ typedef GibbsTrackingFilter Self;
typedef ProcessObject Superclass;
typedef SmartPointer< Self > Pointer;
typedef SmartPointer< const Self > ConstPointer;
itkNewMacro(Self);
- itkTypeMacro( GlobalTractographyFilter, ProcessObject );
+ itkTypeMacro( GibbsTrackingFilter, ProcessObject );
/** Types for the DWI Input Image **/
typedef TInputQBallImage InputQBallImageType;
/** Types for the Mask Image **/
typedef TInputROIImage MaskImageType;
typedef typename MaskImageType::Pointer MaskImageTypePointer;
typedef std::vector< itk::Point > FiberTractType;
typedef std::vector< FiberTractType > FiberBundleType;
itkSetMacro( TempStart, float );
itkGetMacro( TempStart, float );
itkSetMacro( TempEnd, float );
itkGetMacro( TempEnd, float );
itkSetMacro( NumIt, int );
itkGetMacro( NumIt, int );
itkSetMacro( ParticleWeight, float );
itkGetMacro( ParticleWeight, float );
/** width of particle sigma (std-dev of gaussian around center) **/
itkSetMacro( ParticleWidth, float );
itkGetMacro( ParticleWidth, float );
/** length of particle from midpoint to ends **/
itkSetMacro( ParticleLength, float );
itkGetMacro( ParticleLength, float );
itkSetMacro( ChempotConnection, float );
itkGetMacro( ChempotConnection, float );
itkSetMacro( ChempotParticle, float );
itkGetMacro( ChempotParticle, float );
itkSetMacro( InexBalance, float );
itkGetMacro( InexBalance, float );
itkSetMacro( Chempot2, float );
itkGetMacro( Chempot2, float );
itkSetMacro( FiberLength, int );
itkGetMacro( FiberLength, int );
itkGetMacro( Steps, int );
itkSetMacro( AbortTracking, bool );
itkGetMacro( AbortTracking, bool );
itkSetMacro( CurrentStep, unsigned long );
itkGetMacro( CurrentStep, unsigned long );
itkSetMacro( SubtractMean, bool);
itkGetMacro( SubtractMean, bool);
/** Set/Get the Odf Input Image **/
itkSetInputMacro(OdfImage, InputQBallImageType, 0);
itkGetInputMacro(OdfImage, InputQBallImageType, 0);
/** Set/Get the Input mask image **/
itkSetMacro(MaskImage, MaskImageTypePointer);
itkGetMacro(MaskImage, MaskImageTypePointer);
itkGetMacro(NumParticles, unsigned long);
itkGetMacro(NumConnections, unsigned long);
itkGetMacro(NumAcceptedFibers, int);
itkGetMacro(ProposalAcceptance, float);
/** Entry Point For the Algorithm: Is invoked when Update() is called
either directly or through itk pipeline propagation
**/
void GenerateData();
/** override the Process Object Update because we don't have a
dataobject as an outpgnome themeut. We can change this later by wrapping the
tractcontainer in a dataobject decorator and letting the Superclass
know about it.
**/
struct StochasticTractGenerationCallbackStruct{
Pointer Filter;
};
virtual void Update(){
this->GenerateData();
}
FiberBundleType* GetFiberBundle();
float GetMemoryUsage();
protected:
- GlobalTractographyFilter();
- virtual ~GlobalTractographyFilter();
+ GibbsTrackingFilter();
+ virtual ~GibbsTrackingFilter();
void ComputeFiberCorrelation();
void BuildFibers(float* points, int numPoints);
// Input Images
typename InputQBallImageType::Pointer m_ItkQBallImage;
typename MaskImageType::Pointer m_MaskImage;
// Tracking parameters
float m_TempStart; // Start temperature
float m_TempEnd; // End temperature
unsigned long m_NumIt; // Total number of iterations
unsigned long m_CurrentStep; // current tracking step
float m_ParticleWeight; //w (unitless)
float m_ParticleWidth; //sigma (mm)
float m_ParticleLength; // ell (mm)
float m_ChempotConnection; // gross L (chemisches potential)
float m_ChempotParticle;// unbenutzt (immer null, wenn groesser dann insgesamt weniger teilchen)
float m_InexBalance; // gewichtung zwischen den lambdas
// -5 ... 5 -> nur intern ... nur extern,default 0
float m_Chempot2; // typischerweise 0,
// korrektur fuer das geschaetzte integral
int m_FiberLength;
bool m_AbortTracking;
bool m_SubtractMean;
int m_NumAcceptedFibers;
bool m_BuildFibers;
int m_Steps;
float m_Memory;
float m_ProposalAcceptance;
RJMCMC* m_Sampler;
FiberBundleType m_FiberBundle;
unsigned long m_NumParticles;
unsigned long m_NumConnections;
};
}
#ifndef ITK_MANUAL_INSTANTIATION
-#include "itkGlobalTractographyFilter.cpp"
+#include "itkGibbsTrackingFilter.cpp"
#endif
#endif
diff --git a/Modules/DiffusionImaging/files.cmake b/Modules/DiffusionImaging/files.cmake
index 1fb7dd7b1c..4ef5b58a76 100644
--- a/Modules/DiffusionImaging/files.cmake
+++ b/Modules/DiffusionImaging/files.cmake
@@ -1,150 +1,150 @@
SET(CPP_FILES
# DicomImport
DicomImport/mitkDicomDiffusionImageReader.cpp
DicomImport/mitkGroupDiffusionHeadersFilter.cpp
DicomImport/mitkDicomDiffusionImageHeaderReader.cpp
DicomImport/mitkGEDicomDiffusionImageHeaderReader.cpp
DicomImport/mitkPhilipsDicomDiffusionImageHeaderReader.cpp
DicomImport/mitkSiemensDicomDiffusionImageHeaderReader.cpp
DicomImport/mitkSiemensMosaicDicomDiffusionImageHeaderReader.cpp
# DataStructures
IODataStructures/mitkDiffusionImagingObjectFactory.cpp
# DataStructures -> DWI
IODataStructures/DiffusionWeightedImages/mitkDiffusionImageHeaderInformation.cpp
IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSource.cpp
IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageReader.cpp
IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriter.cpp
IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageIOFactory.cpp
IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriterFactory.cpp
IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSerializer.cpp
# DataStructures -> QBall
IODataStructures/QBallImages/mitkQBallImageSource.cpp
IODataStructures/QBallImages/mitkNrrdQBallImageReader.cpp
IODataStructures/QBallImages/mitkNrrdQBallImageWriter.cpp
IODataStructures/QBallImages/mitkNrrdQBallImageIOFactory.cpp
IODataStructures/QBallImages/mitkNrrdQBallImageWriterFactory.cpp
IODataStructures/QBallImages/mitkQBallImage.cpp
IODataStructures/QBallImages/mitkQBallImageSerializer.cpp
# DataStructures -> Tensor
IODataStructures/TensorImages/mitkTensorImageSource.cpp
IODataStructures/TensorImages/mitkNrrdTensorImageReader.cpp
IODataStructures/TensorImages/mitkNrrdTensorImageWriter.cpp
IODataStructures/TensorImages/mitkNrrdTensorImageIOFactory.cpp
IODataStructures/TensorImages/mitkNrrdTensorImageWriterFactory.cpp
IODataStructures/TensorImages/mitkTensorImage.cpp
IODataStructures/TensorImages/mitkTensorImageSerializer.cpp
# DataStructures -> FiberBundle
IODataStructures/FiberBundle/mitkFiberBundle.cpp
IODataStructures/FiberBundle/mitkFiberBundleWriter.cpp
IODataStructures/FiberBundle/mitkFiberBundleReader.cpp
IODataStructures/FiberBundle/mitkFiberBundleIOFactory.cpp
IODataStructures/FiberBundle/mitkFiberBundleWriterFactory.cpp
IODataStructures/FiberBundle/mitkFiberBundleSerializer.cpp
IODataStructures/FiberBundle/mitkParticle.cpp
IODataStructures/FiberBundle/mitkParticleGrid.cpp
# DataStructures -> FiberBundleX
IODataStructures/FiberBundleX/mitkFiberBundleX.cpp
IODataStructures/FiberBundleX/mitkFiberBundleXWriter.cpp
IODataStructures/FiberBundleX/mitkFiberBundleXReader.cpp
IODataStructures/FiberBundleX/mitkFiberBundleXIOFactory.cpp
IODataStructures/FiberBundleX/mitkFiberBundleXWriterFactory.cpp
IODataStructures/FiberBundleX/mitkFiberBundleXSerializer.cpp
# DataStructures -> PlanarFigureComposite
IODataStructures/PlanarFigureComposite/mitkPlanarFigureComposite.cpp
# DataStructures -> Tbss
IODataStructures/TbssImages/mitkTbssImageSource.cpp
IODataStructures/TbssImages/mitkNrrdTbssImageReader.cpp
IODataStructures/TbssImages/mitkNrrdTbssImageIOFactory.cpp
IODataStructures/TbssImages/mitkTbssImage.cpp
IODataStructures/TbssImages/mitkNrrdTbssImageWriter.cpp
IODataStructures/TbssImages/mitkNrrdTbssImageWriterFactory.cpp
# Rendering
Rendering/vtkMaskedProgrammableGlyphFilter.cpp
Rendering/mitkCompositeMapper.cpp
Rendering/mitkVectorImageVtkGlyphMapper3D.cpp
Rendering/vtkOdfSource.cxx
Rendering/vtkThickPlane.cxx
Rendering/mitkOdfNormalizationMethodProperty.cpp
Rendering/mitkOdfScaleByProperty.cpp
Rendering/mitkFiberBundleMapper3D.cpp
Rendering/mitkFiberBundleXMapper3D.cpp
# Interactions
Interactions/mitkFiberBundleInteractor.cpp
# Algorithms
Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.cpp
Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.cpp
)
SET(H_FILES
# Rendering
Rendering/mitkDiffusionImageMapper.h
Rendering/mitkOdfVtkMapper2D.h
Rendering/mitkFiberBundleMapper3D.h
Rendering/mitkFiberBundleXMapper3D.h
# Reconstruction
Reconstruction/itkDiffusionQballReconstructionImageFilter.h
Reconstruction/mitkTeemDiffusionTensor3DReconstructionImageFilter.h
Reconstruction/itkAnalyticalDiffusionQballReconstructionImageFilter.h
Reconstruction/itkPointShell.h
Reconstruction/itkOrientationDistributionFunction.h
# IO Datastructures
IODataStructures/DiffusionWeightedImages/mitkDiffusionImage.h
IODataStructures/FiberBundle/itkSlowPolyLineParametricPath.h
IODataStructures/TbssImages/mitkTbssImage.h
# DataStructures -> FiberBundleX
IODataStructures/FiberBundleX/mitkFiberBundleX.h
IODataStructures/FiberBundleX/mitkFiberBundleXWriter.h
IODataStructures/FiberBundleX/mitkFiberBundleXReader.h
IODataStructures/FiberBundleX/mitkFiberBundleXIOFactory.h
IODataStructures/FiberBundleX/mitkFiberBundleXWriterFactory.h
IODataStructures/FiberBundleX/mitkFiberBundleXSerializer.h
# Tractography
- Tractography/itkGlobalTractographyFilter.h
+ Tractography/itkGibbsTrackingFilter.h
# Algorithms
Algorithms/itkDiffusionQballGeneralizedFaImageFilter.h
Algorithms/itkDiffusionQballPrepareVisualizationImageFilter.h
Algorithms/itkTensorDerivedMeasurementsFilter.h
Algorithms/itkBrainMaskExtractionImageFilter.h
Algorithms/itkB0ImageExtractionImageFilter.h
Algorithms/itkTensorImageToDiffusionImageFilter.h
Algorithms/itkTensorToL2NormImageFilter.h
Algorithms/itkTractsToProbabilityImageFilter.h
Algorithms/itkTractsToDWIImageFilter.h
Algorithms/itkTractsToFiberEndingsImageFilter.h
Algorithms/itkGaussianInterpolateImageFunction.h
Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.h
Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.h
Algorithms/itkDiffusionTensorPrincipleDirectionImageFilter.h
Algorithms/itkCartesianToPolarVectorImageFilter.h
Algorithms/itkPolarToCartesianVectorImageFilter.h
)
SET( TOOL_FILES
)
IF(WIN32)
ENDIF(WIN32)
#MITK_MULTIPLEX_PICTYPE( Algorithms/mitkImageRegistrationMethod-TYPE.cpp )