Computer Assited Medical Intervention Tool Kit  version 4.1
ImageComponent.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $CAMITK_LICENCE_BEGIN$
3  *
4  * CamiTK - Computer Assisted Medical Intervention ToolKit
5  * (c) 2001-2018 Univ. Grenoble Alpes, CNRS, TIMC-IMAG UMR 5525 (GMCAO)
6  *
7  * Visit http://camitk.imag.fr for more information
8  *
9  * This file is part of CamiTK.
10  *
11  * CamiTK is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * CamiTK is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License version 3 for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22  *
23  * $CAMITK_LICENCE_END$
24  ****************************************************************************/
25 
26 #ifndef IMAGE_COMPONENT_H
27 #define IMAGE_COMPONENT_H
28 
29 // -- Core image component stuff
30 #include "SingleImageComponent.h"
31 #include "CamiTKAPI.h"
32 #include "ImageOrientationHelper.h"
33 
34 // -- vtk stuff
35 #include <vtkPolyData.h>
36 #include <vtkSmartPointer.h>
37 #include <vtkImageData.h>
38 #include <vtkTransform.h>
39 #include <vtkImageFlip.h>
40 #include <vtkWindowLevelLookupTable.h>
41 #include <vtkMatrix4x4.h>
42 
43 // -- QT stuff classes
44 class QMenu;
45 class QTableView;
46 class QVector3D;
47 class QVariant;
48 class QTableView;
49 class QStandardItemModel;
50 
51 namespace camitk {
52 
53 class MeshComponent;
54 
73 class CAMITK_API ImageComponent : public camitk::Component {
74  Q_OBJECT
75 
76 public:
79  ImageComponent(const QString& file);
80 
91  ImageComponent(vtkSmartPointer<vtkImageData> anImageData, const QString& name, bool copy = false, ImageOrientationHelper::PossibleImageOrientations initialOrientation = ImageOrientationHelper::RAI);
92 
94  ~ImageComponent() override;
95 
97  void setSelected(const bool b, const bool recursive = false) override;
98 
100  QString getImageName() const;
101  void setImageName(const QString&);
102 
104  vtkSmartPointer<vtkImageData> getImageData() const {
105  return originalImageData;
106  }
107 
113  vtkSmartPointer<vtkImageData> getImageDataWithFrameTransform();
114 
116  ImageOrientationHelper::PossibleImageOrientations getInitialOrientation() const {
117  return initialOrientation;
118  }
119 
124  void pixelPicked(double x, double y, double z, SingleImageComponent* whoIsAsking);
125 
128  void getLastPixelPicked(int* x, int* y, int* z);
129 
132  void getLastPointPickedImageCoords(double* x, double* y, double* z);
133 
136  void getLastPointPickedWorldCoords(double* x, double* y, double* z);
137 
138 
143  int getNumberOfColors() const override;
144 
146  double getMinColor() const;
147 
149  double getMaxColor() const;
150 
154  int getActualNumberOfColors() const;
155 
157  double getActualMinColor() const;
158 
160  double getActualMaxColor() const;
161 
163  int getNumberOfSlices() const override;
164 
166  virtual void setLut(vtkSmartPointer<vtkWindowLevelLookupTable> lookupTable);
167 
169  virtual vtkSmartPointer<vtkWindowLevelLookupTable> getLut();
170 
173  void refresh() const override;
174 
176  SingleImageComponent* getAxialSlices();
178  SingleImageComponent* getCoronalSlices();
180  SingleImageComponent* getSagittalSlices();
182  SingleImageComponent* getArbitrarySlices();
184  MeshComponent* getVolumeRenderingChild();
185 
191  virtual void replaceImageData(vtkSmartPointer<vtkImageData> anImageData, bool copy = false, ImageOrientationHelper::PossibleImageOrientations initialOrientation = ImageOrientationHelper::RAI);
192 
197  void updateProperty(QString, QVariant) override;
200 
202  unsigned int getNumberOfPropertyWidget() override;
203 
205  QWidget* getPropertyWidgetAt(unsigned int i) override;
207 
208  const vtkSmartPointer<vtkMatrix4x4> getRotationMatrix() {
209  return rotationMatrix;
210  }
211 
212 
213 protected:
214 
222  virtual void setImageData(vtkSmartPointer<vtkImageData> anImageData,
223  bool copy,
225  vtkSmartPointer<vtkMatrix4x4> initialTransformMatrix = nullptr);
226 
236  virtual void setSingleImageComponents(SingleImageComponent* axialSlices, SingleImageComponent* sagittalSlices, SingleImageComponent* coronalSlices, SingleImageComponent* arbitrarySlices);
237 
238 private:
249  virtual void initImageProperties();
250 
252  void initRepresentation() {}
253 
254  // builds default lookup table
255  void initLookupTable();
256 
258  void buildImageComponents();
259 
261  void updateImageComponents();
262 
268  void update3DViewer();
269 
272  vtkSmartPointer<vtkPolyData> getBoundingBox();
273 
275  vtkSmartPointer<vtkImageData> originalImageData;
276 
278  SingleImageComponent* axialSlices;
279 
281  SingleImageComponent* sagittalSlices;
282 
284  SingleImageComponent* coronalSlices;
285 
287  SingleImageComponent* arbitrarySlices;
288 
291  MeshComponent* volumeRenderingChild;
292 
294  vtkSmartPointer<vtkWindowLevelLookupTable> lut;
295 
297  double currentPixelPicked[3];
298 
300  virtual void init();
301 
303  QTableView* selectionView;
304 
306  QStandardItemModel* model;
307 
310 
314  vtkSmartPointer<vtkTransform> initialImageDataTransform;
315 
320  vtkSmartPointer<vtkTransform> initialFrameTransform;
321 
324  vtkSmartPointer<vtkMatrix4x4> rotationMatrix;
325 };
326 
327 }
328 
329 #endif //IMAGE_COMPONENT_H
camitk::ImageComponent::getCoronalSlices
SingleImageComponent * getCoronalSlices()
Returns the coronal slice.
Definition: ImageComponent.cpp:473
camitk::ImageComponent::replaceImageData
virtual void replaceImageData(vtkSmartPointer< vtkImageData > anImageData, bool copy=false, ImageOrientationHelper::PossibleImageOrientations initialOrientation=ImageOrientationHelper::RAI)
Replaces the current image volume by the one given in parameters.
Definition: ImageComponent.cpp:428
camitk::Component::setRenderingModes
setRenderingModes
Definition: sdk/libraries/core/component/Component.h:631
ImageComponentExtension.h
camitk::Component::getTransform
const vtkSmartPointer< vtkTransform > getTransform() const override
Get the transformation with respect to the parent frame.
Definition: sdk/libraries/core/component/Component.cpp:665
PropertyExplorer.h
camitk::ImageComponent::initImageProperties
virtual void initImageProperties()
Update the Properties displayed in the PropertyExplorer It should be called by setImageData to update...
Definition: ImageComponent.cpp:179
camitk::Component::setParentFrame
void setParentFrame(InterfaceFrame *frame, bool keepTransform=true) override
Set the parent frame and update or not its transform during the parent transition.
Definition: sdk/libraries/core/component/Component.cpp:637
camitk::ImageComponent::initLookupTable
void initLookupTable()
Definition: ImageComponent.cpp:402
camitk::ImageComponent::rotationMatrix
vtkSmartPointer< vtkMatrix4x4 > rotationMatrix
The rotation matrix, that might have been altered by the user Will be saved in header file informatio...
Definition: ImageComponent.h:323
camitk::ImageComponent::coronalSlices
SingleImageComponent * coronalSlices
the coronal slices representation (all intelligence is delegated to a Slice class instance)
Definition: ImageComponent.h:283
camitk::Component::childrenComponent
ComponentList childrenComponent
The explorer sub items.
Definition: sdk/libraries/core/component/Component.h:775
camitk::Component::setOriginalVolume
setOriginalVolume
Definition: sdk/libraries/core/component/Component.h:676
SingleImageComponent.h
CamiTKAPI.h
camitk::ImageComponent::getActualMaxColor
double getActualMaxColor() const
Max gray level found in the image given its data type.
Definition: ImageComponent.cpp:733
camitk::Component::refresh
virtual void refresh() const
refresh all the viewer that are currently displaying this Component
Definition: sdk/libraries/core/component/Component.cpp:298
camitk::Component::removeChild
void removeChild(InterfaceNode *) override
remove from the the sub item vector.
Definition: sdk/libraries/core/component/Component.cpp:582
camitk::ImageComponent::getMaxColor
double getMaxColor() const
Max possible gray level of the image given its data type.
Definition: ImageComponent.cpp:716
camitk::ImageComponent::getLastPointPickedImageCoords
void getLastPointPickedImageCoords(double *x, double *y, double *z)
Get the last point picked using CTRL + LEFT/RIGHT CLICK in image real coordinates (this takes into ac...
Definition: ImageComponent.cpp:777
camitk::ImageComponent::pixelPicked
void pixelPicked(double x, double y, double z, SingleImageComponent *whoIsAsking)
Method called when a pixel has been picked in the 3D view.
Definition: ImageComponent.cpp:663
camitk::ImageComponent::getActualMinColor
double getActualMinColor() const
Min gray level found in the image given its data type.
Definition: ImageComponent.cpp:728
camitk::ImageComponent::getNumberOfColors
int getNumberOfColors() const override
Number of colors: number of possible gray levels in the image computed from the min and the max of th...
Definition: ImageComponent.cpp:703
camitk::ImageComponent::axialSlices
SingleImageComponent * axialSlices
the axial slices representation (all intelligence is delegated to a Slice class instance)
Definition: ImageComponent.h:277
camitk::InteractiveViewer::get3DViewer
static InteractiveViewer * get3DViewer()
get the 3D viewer default InteractiveViewer (provided for convenience, equivalent to getViewer("3DVie...
Definition: InteractiveViewer.cpp:181
camitk::ImageComponent::initialOrientation
ImageOrientationHelper::PossibleImageOrientations initialOrientation
Initial image orientation.
Definition: ImageComponent.h:308
camitk::ImageComponent::getImageDataWithFrameTransform
vtkSmartPointer< vtkImageData > getImageDataWithFrameTransform()
Compute a copy of the original image data on which the frame transform has been applied.
Definition: ImageComponent.cpp:342
camitk::Slice::AXIAL
Definition: Slice.h:176
camitk::ImageComponent::updateImageComponents
void updateImageComponents()
update the image components vtkImageData of all the available SingleImageComponent
Definition: ImageComponent.cpp:643
camitk::ImageComponent::getImageName
QString getImageName() const
getter/setter for the property
Definition: ImageComponent.cpp:526
camitk::ImageComponent::setLut
virtual void setLut(vtkSmartPointer< vtkWindowLevelLookupTable > lookupTable)
Update the lookup table of the image viewer (see InterfaceBitMap).
Definition: ImageComponent.cpp:743
camitk::Component::setIndexOfPropertyExplorerTab
void setIndexOfPropertyExplorerTab(unsigned int index)
Set the index of the tab in the ProperlyExplorer to select for display.
Definition: sdk/libraries/core/component/Component.h:461
camitk::ImageComponent::getLastPixelPicked
void getLastPixelPicked(int *x, int *y, int *z)
Get the last pixel picked using CTRL + LEFT/RIGHT CLICK in voxel index (i, j, k) indicates the voxel ...
Definition: ImageComponent.cpp:767
camitk::ImageComponent::lut
vtkSmartPointer< vtkWindowLevelLookupTable > lut
the current lookup table
Definition: ImageComponent.h:293
camitk::ImageComponent::setSingleImageComponents
virtual void setSingleImageComponents(SingleImageComponent *axialSlices, SingleImageComponent *sagittalSlices, SingleImageComponent *coronalSlices, SingleImageComponent *arbitrarySlices)
Set all single images.
Definition: ImageComponent.cpp:488
camitk::ImageComponent::~ImageComponent
~ImageComponent() override
Destructor.
Definition: ImageComponent.cpp:107
camitk::SingleImageComponent::setViewSliceIn3D
void setViewSliceIn3D(bool viewSliceIn3D)
set the visibility in 3D and refresh the 3D viewers
Definition: SingleImageComponent.cpp:102
camitk::ImageComponent::getAxialSlices
SingleImageComponent * getAxialSlices()
Returns the axial slice.
Definition: ImageComponent.cpp:468
camitk::ImageComponent::getPropertyWidgetAt
QWidget * getPropertyWidgetAt(unsigned int i) override
get the property widget (to view as tabs in the property explorer): the default property widget and t...
Definition: ImageComponent.cpp:842
camitk::Property
This class describes a property that can be used in components and actions or any class that needs to...
Definition: Property.h:312
MeshComponent.h
camitk::SingleImageComponent
This Component manages a set of images, destined to be seen in a single orientation only (axial OR sa...
Definition: SingleImageComponent.h:55
camitk::ImageComponent::getLut
virtual vtkSmartPointer< vtkWindowLevelLookupTable > getLut()
get the current lookup table
Definition: ImageComponent.cpp:748
camitk::ImageComponent::selectionView
QTableView * selectionView
Tab displaying data selected point in the property explorer.
Definition: ImageComponent.h:302
camitk::ImageComponent::updateProperty
void updateProperty(QString, QVariant) override
Definition: ImageComponent.cpp:222
Property.h
camitk::Component::setVisibility
virtual void setVisibility(Viewer *, bool)
set the visibility for a viewer
Definition: sdk/libraries/core/component/Component.cpp:275
camitk::Component::setSelected
virtual void setSelected(const bool b, const bool recursive=true)
Update the selection flag.
Definition: sdk/libraries/core/component/Component.cpp:557
camitk::Component::getName
QString getName() const override
get the name to be displayed
Definition: sdk/libraries/core/component/Component.h:848
Frame.h
camitk::ImageComponent::getSagittalSlices
SingleImageComponent * getSagittalSlices()
Returns the sagittal slice.
Definition: ImageComponent.cpp:478
camitk::ImageComponent::ImageComponent
ImageComponent(const QString &file)
constructor This method may throw an AbortException if a problem occurs.
Definition: ImageComponent.cpp:95
camitk::Component::getTransformFromWorld
const vtkSmartPointer< vtkTransform > getTransformFromWorld() const override
Transforms accessors / Modifyers.
Definition: sdk/libraries/core/component/Component.cpp:656
camitk::Slice::CORONAL
Definition: Slice.h:177
camitk::ImageOrientationHelper::RAI
Direct Orientations X: Right to Left, Y: Anterior to Posterior, Z: Inferior to Superiror.
Definition: ImageOrientationHelper.h:55
camitk::ImageComponent::getBoundingBox
vtkSmartPointer< vtkPolyData > getBoundingBox()
internal method used to put a mesh in volumeRenderingChild and accessoiry display the bounding box
Definition: ImageComponent.cpp:803
camitk::ImageComponent::getMinColor
double getMinColor() const
Min possible gray level of the image given its data type.
Definition: ImageComponent.cpp:711
camitk::Component::setSlice
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane setSlice
Definition: sdk/libraries/core/component/Component.h:694
camitk::ImageComponent::setSelected
void setSelected(const bool b, const bool recursive=false) override
set selected will select all the Image components (axial, sagittal and coronal).
Definition: ImageComponent.cpp:753
camitk::ImageComponent::currentPixelPicked
double currentPixelPicked[3]
Store the last pixel selected, in original slices ref.
Definition: ImageComponent.h:296
camitk::Component::getChildren
const ComponentList & getChildren() override
get the list of the InterfaceNode children (sub items in the hierarchy)
Definition: sdk/libraries/core/component/Component.h:843
Component
A component is something that composed something and could also be a part of something.
Definition: modeling/libraries/pml/Component.h:47
camitk::ImageComponent::sagittalSlices
SingleImageComponent * sagittalSlices
the sagittal slices representation (all intelligence is delegated to a Slice class instance)
Definition: ImageComponent.h:280
ImageOrientationHelper.h
InteractiveViewer.h
camitk::Slice::SAGITTAL
Definition: Slice.h:178
camitk::ImageComponent::refresh
void refresh() const override
force refresh of all interactive viewers that are displayng sub-components as ImageComponent is not i...
Definition: ImageComponent.cpp:796
camitk::SingleImageComponent::singleImageSelected
void singleImageSelected(const bool)
new method used to call the Component set selected
Definition: SingleImageComponent.cpp:92
camitk::ImageComponent::arbitrarySlices
SingleImageComponent * arbitrarySlices
the arbitrary slices representation (all intelligence is delegated to a Slice class instance)
Definition: ImageComponent.h:286
camitk::ImageComponent::update3DViewer
void update3DViewer()
Update visibility in the 3D viewer.
Definition: ImageComponent.cpp:531
camitk::InterfaceGeometry::Wireframe
the wireframe is visible
Definition: InterfaceGeometry.h:67
camitk::Property::setReadOnly
void setReadOnly(bool)
set this property as read-only
Definition: Property.cpp:81
camitk::ImageComponent::getNumberOfPropertyWidget
unsigned int getNumberOfPropertyWidget() override
return number of tabs in property explorer: there is more than one widget
Definition: ImageComponent.cpp:837
camitk::ImageComponent::getVolumeRenderingChild
MeshComponent * getVolumeRenderingChild()
Returns the MeshComponent which will contain the volume rendering actor.
Definition: ImageComponent.cpp:515
camitk::ImageComponent::getArbitrarySlices
SingleImageComponent * getArbitrarySlices()
Returns the arbitrary slice.
Definition: ImageComponent.cpp:483
camitk::Component::setName
void setName(const QString &) override
set the name to be displayed
Definition: sdk/libraries/core/component/Component.h:873
camitk::MeshComponent
Basic component to manage any kind of mesh.
Definition: MeshComponent.h:52
camitk::Component::updateProperty
void updateProperty(QString name, QVariant value) override
update property: if you this method, do not forget to call the superclass method for the property not...
Definition: sdk/libraries/core/component/Component.cpp:209
camitk::refresh
void refresh()
refresh the display
camitk::ImageComponent::originalImageData
vtkSmartPointer< vtkImageData > originalImageData
the core Image Volume that is managed here
Definition: ImageComponent.h:274
camitk::ImageComponent::setImageData
virtual void setImageData(vtkSmartPointer< vtkImageData > anImageData, bool copy, ImageOrientationHelper::PossibleImageOrientations initialOrientation=ImageOrientationHelper::RAI, vtkSmartPointer< vtkMatrix4x4 > initialTransformMatrix=nullptr)
Set the image data of the volumic images with the given orientation options.
Definition: ImageComponent.cpp:243
camitk::ImageComponent::volumeRenderingChild
MeshComponent * volumeRenderingChild
When an action computes volume rendering for an image, it stores the corresponding actor as a prop of...
Definition: ImageComponent.h:290
camitk::InterfaceFrame::setTransform
virtual void setTransform(vtkSmartPointer< vtkTransform > transform)=0
Set the current input frame position (according to its parent Frame)
camitk::ImageComponent::getLastPointPickedWorldCoords
void getLastPointPickedWorldCoords(double *x, double *y, double *z)
Get Get the last point picked using CTRL + LEFT/RIGHT CLICK in world coordinates This takes into acco...
Definition: ImageComponent.cpp:784
camitk::ImageComponent::getActualNumberOfColors
int getActualNumberOfColors() const
Actual Number of colors: difference betweent the maximun and the minimum gray levels found in the ima...
Definition: ImageComponent.cpp:722
camitk::Component::refreshInterfaceNode
virtual void refreshInterfaceNode()
Asks all viewers that are currently displaying this Component to rebuild the representation of the In...
Definition: sdk/libraries/core/component/Component.cpp:307
camitk::ImageComponent::init
virtual void init()
initialize pointers to NULL and other attributes
Definition: ImageComponent.cpp:120
camitk::Component::addProperty
bool addProperty(Property *) override
Add a new CamiTK property to the component.
Definition: sdk/libraries/core/component/Component.cpp:220
camitk::ImageComponent::getNumberOfSlices
int getNumberOfSlices() const override
Number of axial slices (i.e.
Definition: ImageComponent.cpp:738
camitk::ImageComponent::initialImageDataTransform
vtkSmartPointer< vtkTransform > initialImageDataTransform
The initial transform to the vtkImageData.
Definition: ImageComponent.h:313
camitk::ImageComponent::buildImageComponents
void buildImageComponents()
build the SingleImageComponent (one for each image plane);
Definition: ImageComponent.cpp:581
camitk::ImageComponent::initialFrameTransform
vtkSmartPointer< vtkTransform > initialFrameTransform
The initial frame of the image at opening.
Definition: ImageComponent.h:319
camitk::ImageOrientationHelper::getOrientationAsQString
static QString getOrientationAsQString(PossibleImageOrientations orientation)
Returns the Possible Medical Image orientation in QString format from a PossibleImageOrientation enum...
Definition: ImageOrientationHelper.cpp:61
camitk::ImageOrientationHelper::PossibleImageOrientations
PossibleImageOrientations
For each axis (x, y or z), 6 possibilities:
Definition: ImageOrientationHelper.h:52
camitk::ImageComponent::model
QStandardItemModel * model
Model to display data.
Definition: ImageComponent.h:305
ImageComponent.h
camitk::ImageComponent::setImageName
void setImageName(const QString &)
Definition: ImageComponent.cpp:520
camitk::ImageOrientationHelper::getTransformToRAI
static vtkSmartPointer< vtkMatrix4x4 > getTransformToRAI(PossibleImageOrientations orientation, double dimX, double dimY, double dimZ)
Given a possible Dicom Image Orientation, this method returns the transform matrix to express the ima...
Definition: ImageOrientationHelper.cpp:216
camitk::Component
A Component represents something that could be included in the explorer view, the interactive 3D view...
Definition: sdk/libraries/core/component/Component.h:297
CAMITK_API
#define CAMITK_API
Definition: CamiTKAPI.h:48
camitk
Definition: Action.cpp:36
camitk::Component::getFrame
virtual InterfaceFrame * getFrame()
get the associated frame
Definition: sdk/libraries/core/component/Component.h:858