/*=========================================================================
Program: vv http://www.creatis.insa-lyon.fr/rio/vv
- Authors belong to:
+ Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
#include "vvToolImageArithm.h"
#include "vvSlicer.h"
//------------------------------------------------------------------------------
vvToolImageArithm::vvToolImageArithm(vvMainWindowBase * parent, Qt::WindowFlags f)
- :vvToolWidgetBase(parent, f),
- vvToolBase<vvToolImageArithm>(parent),
- Ui::vvToolImageArithm() {
+ :vvToolWidgetBase(parent, f),
+ vvToolBase<vvToolImageArithm>(parent),
+ Ui::vvToolImageArithm()
+{
// Setup the UI
Ui_vvToolImageArithm::setupUi(mToolWidget);
- // Main filter
+ // Main filter
mFilter = new clitk::ImageArithmGenericFilter<args_info_clitkImageArithm>;
// Set how many inputs are needed for this tool
//------------------------------------------------------------------------------
-vvToolImageArithm::~vvToolImageArithm() {
+vvToolImageArithm::~vvToolImageArithm()
+{
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvToolImageArithm::Initialize() {
+void vvToolImageArithm::Initialize()
+{
SetToolName("ImageArithm");
SetToolMenuName("ImageArithm");
SetToolIconFilename(":/common/icons/arithm.png");
SetToolTip("Perform simple arithmetic operations on one or two images.");
- SetToolExperimental(true);
+ SetToolExperimental(false);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
-void vvToolImageArithm::InputIsSelected(std::vector<vvSlicerManager *> & l) {
+void vvToolImageArithm::InputIsSelected(std::vector<vvSlicerManager *> & l)
+{
mInput1 = l[0];
- mInput2 = l[1];
+ mInput2 = l[1];
mTwoInputs = true;
mGroupBoxOneInput->setEnabled(false);
mGroupBoxTwoInputs->setEnabled(true);
//------------------------------------------------------------------------------
-void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) {
+void vvToolImageArithm::InputIsSelected(vvSlicerManager * l)
+{
mInput1 = l;
mTwoInputs = false;
- // DD("Single input");
mGroupBoxTwoInputs->setEnabled(false);
mGroupBoxOneInput->setEnabled(true);
}
//------------------------------------------------------------------------------
-void vvToolImageArithm::GetArgsInfoFromGUI() {
- // DD("GetArgsInfoFromGUI");
+void vvToolImageArithm::GetArgsInfoFromGUI()
+{
mArgsInfo.input1_given = false;
if (mTwoInputs) {
mArgsInfo.input2_given = true;
if (radioButtonMin->isChecked()) mArgsInfo.operation_arg = 4;
if (radioButtonAbsDiff->isChecked()) mArgsInfo.operation_arg = 5;
if (radioButtonSquaredDiff->isChecked()) mArgsInfo.operation_arg = 6;
- }
- else {
- mArgsInfo.input2_given = false;
+ } else {
+ mArgsInfo.input2_given = false;
mArgsInfo.scalar_given = true;
if (radioButtonSumV->isChecked()) mArgsInfo.operation_arg = 0;
if (radioButtonMultiplyV->isChecked()) mArgsInfo.operation_arg = 1;
mArgsInfo.scalar_arg = mValueSpinBox->value();
}
mArgsInfo.output_given = false;
- mArgsInfo.verbose_flag = false;
+ mArgsInfo.verbose_flag = false;
mArgsInfo.setFloatOutput_flag = mCheckBoxUseFloatOutputType->isChecked();
mArgsInfo.imagetypes_flag = false;
}
//------------------------------------------------------------------------------
-void vvToolImageArithm::apply() {
+void vvToolImageArithm::apply()
+{
if (!mCurrentSlicerManager) close();
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
GetArgsInfoFromGUI();
// Input
inputs.push_back(mInput1->GetImage());
inputs.push_back(mInput2->GetImage());
-
+
// Check input type
- if (inputs[0]->GetScalarTypeAsString() != inputs[1]->GetScalarTypeAsString()) {
+ if (inputs[0]->GetScalarTypeAsITKString() != inputs[1]->GetScalarTypeAsITKString()) {
std::cerr << "Sorry inputs should have the same pixeltype." << std::endl;
- std::cerr << "Input1 = " << inputs[0]->GetScalarTypeAsString() << std::endl;
- std::cerr << "Input2 = " << inputs[1]->GetScalarTypeAsString() << std::endl;
+ std::cerr << "Input1 = " << inputs[0]->GetScalarTypeAsITKString() << std::endl;
+ std::cerr << "Input2 = " << inputs[1]->GetScalarTypeAsITKString() << std::endl;
+ QApplication::restoreOverrideCursor();
+ QMessageBox::information(this, "Wrong image type","Sorry, could not perform operation. Please select inputs with same pixel type.");
+ close();
+ return;
+ }
+
+ // Check size
+ if (!mInput1->GetImage()->HaveSameSizeAndSpacingThan(mInput2->GetImage())) {
+ std::cerr << "Sorry inputs should have the same size and spacing." << std::endl;
QApplication::restoreOverrideCursor();
- QMessageBox::information(this, "Wrong image type","Sorry, could not perform operation. Please select inputs with same pixe type.");
+ QMessageBox::information(this, "Wrong images size","Sorry, could not perform operation. Please select inputs with same size and spacing.");
close();
return;
}
- }
- else {
+ } else {
// Input
inputs.push_back(mInput1->GetImage());
- DD("Single input");
}
-
+
// Main filter
- clitk::ImageArithmGenericFilter<args_info_clitkImageArithm>::Pointer filter =
+ clitk::ImageArithmGenericFilter<args_info_clitkImageArithm>::Pointer filter =
clitk::ImageArithmGenericFilter<args_info_clitkImageArithm>::New();
filter->SetInputVVImages(inputs);
filter->SetArgsInfo(mArgsInfo);
filter->EnableReadOnDisk(false);
filter->EnableOverwriteInputImage(false);
filter->Update();
-
+
// Output
vvImage::Pointer output = filter->GetOutputVVImage();
std::ostringstream osstream;
- osstream << "Arithm_" << mArgsInfo.operation_arg << "_ "
+ osstream << "Arithm_" << mArgsInfo.operation_arg << "_ "
<< mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
- AddImage(output,osstream.str());
+ AddImage(output,osstream.str());
QApplication::restoreOverrideCursor();
close();
}