QmitkRegionGrowingView. More...
#include <QmitkRegionGrowingView.h>
Public Member Functions | |
QmitkRegionGrowingView () | |
virtual | ~QmitkRegionGrowingView () |
virtual void | CreateQtPartControl (QWidget *parent) |
virtual void | StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) |
virtual void | StdMultiWidgetNotAvailable () |
virtual void | Deactivated () |
Static Public Attributes | |
static const std::string | VIEW_ID = "org.mitk.views.regiongrowing" |
Protected Slots | |
void | DoImageProcessing () |
Called when the user clicks the GUI button. | |
Protected Member Functions | |
template<typename TPixel , unsigned int VImageDimension> | |
void | ItkImageProcessing (itk::Image< TPixel, VImageDimension > *itkImage, mitk::Geometry3D *imageGeometry, mitk::DataNode *parent) |
ITK image processing function This function is templated like an ITK image. The MITK-Macro AccessByItk determines the actual pixel type and dimensionality of a given MITK image and calls this function for further processing (in our case region growing) | |
virtual void | OnSelectionChanged (std::vector< mitk::DataNode * > nodes) |
called by QmitkFunctionality when DataManager's selection has changed | |
Protected Attributes | |
mitk::PointSet::Pointer | m_PointSet |
This is the actual seed point data object. | |
Ui::QmitkRegionGrowingViewControls * | m_Controls |
QmitkStdMultiWidget * | m_MultiWidget |
Functionality for demonstration of MITK basics.
This functionality allows the user to set some seed points that are used for a simple region growing algorithm from ITK.
Definition at line 45 of file QmitkRegionGrowingView.h.
QmitkRegionGrowingView::QmitkRegionGrowingView | ( | ) |
Definition at line 41 of file QmitkRegionGrowingView.cpp.
: QmitkFunctionality() , m_Controls( 0 ) , m_MultiWidget( NULL ) { }
QmitkRegionGrowingView::~QmitkRegionGrowingView | ( | ) | [virtual] |
Definition at line 48 of file QmitkRegionGrowingView.cpp.
{ }
void QmitkRegionGrowingView::CreateQtPartControl | ( | QWidget * | parent ) | [virtual] |
Implements berry::QtViewPart.
Definition at line 57 of file QmitkRegionGrowingView.cpp.
References Ui_QmitkRegionGrowingViewControls::btnPerformImageProcessing, DoImageProcessing(), QmitkFunctionality::GetDefaultDataStorage(), Ui_QmitkRegionGrowingViewControls::lstPoints, m_Controls, m_MultiWidget, m_PointSet, mitk::IntProperty::New(), mitk::BoolProperty::New(), mitk::DataNode::New(), mitk::PointSet::New(), QmitkPointListWidget::SetMultiWidget(), QmitkPointListWidget::SetPointSetNode(), and Ui_QmitkRegionGrowingViewControls::setupUi().
{ // build up qt view, unless already done if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkRegionGrowingViewControls; m_Controls->setupUi( parent ); connect( m_Controls->btnPerformImageProcessing, SIGNAL(clicked()), this, SLOT(DoImageProcessing()) ); // let the point set widget know about the multi widget (crosshair updates) m_Controls->lstPoints->SetMultiWidget( m_MultiWidget ); // create a new DataNode containing a PointSet with some interaction m_PointSet = mitk::PointSet::New(); mitk::DataNode::Pointer pointSetNode = mitk::DataNode::New(); pointSetNode->SetData( m_PointSet ); pointSetNode->SetName("seed points for region growing"); pointSetNode->SetProperty("helper object", mitk::BoolProperty::New(true) ); pointSetNode->SetProperty("layer", mitk::IntProperty::New(1024) ); // add the pointset to the data tree (for rendering and access by other modules) GetDefaultDataStorage()->Add( pointSetNode ); // tell the GUI widget about out point set m_Controls->lstPoints->SetPointSetNode( pointSetNode ); } }
void QmitkRegionGrowingView::Deactivated | ( | ) | [virtual] |
Only called when IsExclusiveFunctionality() returns true.
Reimplemented from QmitkFunctionality.
Definition at line 52 of file QmitkRegionGrowingView.cpp.
References QmitkPointListWidget::DeactivateInteractor(), Ui_QmitkRegionGrowingViewControls::lstPoints, and m_Controls.
{ m_Controls->lstPoints->DeactivateInteractor(true); }
void QmitkRegionGrowingView::DoImageProcessing | ( | ) | [protected, slot] |
Called when the user clicks the GUI button.
Definition at line 123 of file QmitkRegionGrowingView.cpp.
References AccessByItk_2, mitk::DataNode::GetData(), QmitkFunctionality::GetDataManagerSelection(), mitk::BaseData::GetGeometry(), mitk::DataNode::GetName(), ItkImageProcessing(), m_PointSet, and MITK_INFO.
Referenced by CreateQtPartControl().
{ std::vector<mitk::DataNode*> nodes = this->GetDataManagerSelection(); if (nodes.empty()) return; mitk::DataNode* node = nodes.front(); if (!node) { // Nothing selected. Inform the user and return QMessageBox::information( NULL, "Region growing functionality", "Please load and select an image before region growing."); return; } // here we have a valid mitk::DataNode // a node itself is not very useful, we need its data item (the image) mitk::BaseData* data = node->GetData(); if (data) { // test if this data item is an image or not (could also be a surface or something totally different) mitk::Image* image = dynamic_cast<mitk::Image*>( data ); if (image) { std::stringstream message; std::string name; message << "Performing image processing for image "; if (node->GetName(name)) { // a property called "name" was found for this DataNode message << "'" << name << "'"; } message << "."; MITK_INFO << message.str(); // So we have an image. Let's see if the user has set some seed points already if ( m_PointSet->GetSize() == 0 ) { // no points there. Not good for region growing QMessageBox::information( NULL, "Region growing functionality", "Please set some seed points inside the image first.\n" "(hold Shift key and click left mouse button inside the image.)" ); return; } // actually perform region growing. Here we have both an image and some seed points AccessByItk_2( image, ItkImageProcessing, image->GetGeometry(), node ); // some magic to call the correctly templated function } } }
void QmitkRegionGrowingView::ItkImageProcessing | ( | itk::Image< TPixel, VImageDimension > * | itkImage, |
mitk::Geometry3D * | imageGeometry, | ||
mitk::DataNode * | parent | ||
) | [protected] |
ITK image processing function This function is templated like an ITK image. The MITK-Macro AccessByItk determines the actual pixel type and dimensionality of a given MITK image and calls this function for further processing (in our case region growing)
Definition at line 178 of file QmitkRegionGrowingView.cpp.
References QmitkFunctionality::GetDefaultDataStorage(), mitk::RenderingManager::GetInstance(), mitk::ImportItkImage(), mitk::Geometry3D::IsInside(), m_PointSet, QuadProgPP::max(), min, mitk::FloatProperty::New(), mitk::IntProperty::New(), mitk::ColorProperty::New(), mitk::StringProperty::New(), mitk::BoolProperty::New(), mitk::DataNode::New(), and mitk::Geometry3D::WorldToIndex().
Referenced by DoImageProcessing().
{ typedef itk::Image< TPixel, VImageDimension > InputImageType; typedef typename InputImageType::IndexType IndexType; // instantiate an ITK region growing filter, set its parameters typedef itk::ConnectedThresholdImageFilter<InputImageType, InputImageType> RegionGrowingFilterType; typename RegionGrowingFilterType::Pointer regionGrower = RegionGrowingFilterType::New(); regionGrower->SetInput( itkImage ); // don't forget this // determine a thresholding interval IndexType seedIndex; TPixel min( std::numeric_limits<TPixel>::max() ); TPixel max( std::numeric_limits<TPixel>::min() ); mitk::PointSet::PointsContainer* points = m_PointSet->GetPointSet()->GetPoints(); for ( mitk::PointSet::PointsConstIterator pointsIterator = points->Begin(); pointsIterator != points->End(); ++pointsIterator ) { // first test if this point is inside the image at all if ( !imageGeometry->IsInside( pointsIterator.Value()) ) { continue; } // convert world coordinates to image indices imageGeometry->WorldToIndex( pointsIterator.Value(), seedIndex); // get the pixel value at this point TPixel currentPixelValue = itkImage->GetPixel( seedIndex ); // adjust minimum and maximum values if (currentPixelValue > max) max = currentPixelValue; if (currentPixelValue < min) min = currentPixelValue; regionGrower->AddSeed( seedIndex ); } std::cout << "Values between " << min << " and " << max << std::endl; min -= 30; max += 30; // set thresholds and execute filter regionGrower->SetLower( min ); regionGrower->SetUpper( max ); regionGrower->Update(); mitk::Image::Pointer resultImage = mitk::ImportItkImage( regionGrower->GetOutput() ); mitk::DataNode::Pointer newNode = mitk::DataNode::New(); newNode->SetData( resultImage ); // set some properties newNode->SetProperty("binary", mitk::BoolProperty::New(true)); newNode->SetProperty("name", mitk::StringProperty::New("dumb segmentation")); newNode->SetProperty("color", mitk::ColorProperty::New(1.0,0.0,0.0)); newNode->SetProperty("volumerendering", mitk::BoolProperty::New(false)); newNode->SetProperty("layer", mitk::IntProperty::New(1)); newNode->SetProperty("opacity", mitk::FloatProperty::New(0.5)); // add result to data tree this->GetDefaultDataStorage()->Add( newNode, parent ); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); }
void QmitkRegionGrowingView::OnSelectionChanged | ( | std::vector< mitk::DataNode * > | nodes ) | [protected, virtual] |
called by QmitkFunctionality when DataManager's selection has changed
Reimplemented from QmitkFunctionality.
Definition at line 103 of file QmitkRegionGrowingView.cpp.
References Ui_QmitkRegionGrowingViewControls::lblWarning, and m_Controls.
{ // iterate all selected objects, adjust warning visibility for( std::vector<mitk::DataNode*>::iterator it = nodes.begin(); it != nodes.end(); ++it ) { mitk::DataNode::Pointer node = *it; if( node.IsNotNull() && dynamic_cast<mitk::Image*>(node->GetData()) ) { m_Controls->lblWarning->setVisible( false ); return; } } m_Controls->lblWarning->setVisible( true ); }
void QmitkRegionGrowingView::StdMultiWidgetAvailable | ( | QmitkStdMultiWidget & | stdMultiWidget ) | [virtual] |
Called when a StdMultiWidget is available. Should not be used anymore, see GetActiveStdMultiWidget()
Reimplemented from QmitkFunctionality.
Definition at line 89 of file QmitkRegionGrowingView.cpp.
References Ui_QmitkRegionGrowingViewControls::lstPoints, m_Controls, m_MultiWidget, and QmitkPointListWidget::SetMultiWidget().
{ m_MultiWidget = &stdMultiWidget; m_Controls->lstPoints->SetMultiWidget( m_MultiWidget ); }
void QmitkRegionGrowingView::StdMultiWidgetNotAvailable | ( | ) | [virtual] |
Called when no StdMultiWidget is available anymore. Should not be used anymore, see GetActiveStdMultiWidget()
Reimplemented from QmitkFunctionality.
Definition at line 96 of file QmitkRegionGrowingView.cpp.
References Ui_QmitkRegionGrowingViewControls::lstPoints, m_Controls, m_MultiWidget, and QmitkPointListWidget::SetMultiWidget().
{ m_MultiWidget = NULL; m_Controls->lstPoints->SetMultiWidget( NULL ); }
Definition at line 85 of file QmitkRegionGrowingView.h.
Referenced by CreateQtPartControl(), Deactivated(), OnSelectionChanged(), StdMultiWidgetAvailable(), and StdMultiWidgetNotAvailable().
QmitkStdMultiWidget* QmitkRegionGrowingView::m_MultiWidget [protected] |
Definition at line 87 of file QmitkRegionGrowingView.h.
Referenced by CreateQtPartControl(), StdMultiWidgetAvailable(), and StdMultiWidgetNotAvailable().
This is the actual seed point data object.
Definition at line 83 of file QmitkRegionGrowingView.h.
Referenced by CreateQtPartControl(), DoImageProcessing(), and ItkImageProcessing().
const std::string QmitkRegionGrowingView::VIEW_ID = "org.mitk.views.regiongrowing" [static] |
Definition at line 53 of file QmitkRegionGrowingView.h.