X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolImageArithm.cxx;h=7b62110d275ac4ab234b4baa36088653c6e10756;hb=73f0ab806cbb168db4d09908a714f8b7a662ee21;hp=f3cc6f39c1cd27e850500d0f8a2eca3f0662f2ef;hpb=0b7c9b1e1215634b02cbd38d4e4ba101d6111ba8;p=clitk.git diff --git a/vv/vvToolImageArithm.cxx b/vv/vvToolImageArithm.cxx index f3cc6f3..7b62110 100644 --- a/vv/vvToolImageArithm.cxx +++ b/vv/vvToolImageArithm.cxx @@ -1,9 +1,9 @@ /*========================================================================= 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 @@ -14,7 +14,8 @@ - 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" #include "clitkImageArithmGenericFilter.h" @@ -28,13 +29,14 @@ ADD_TOOL(vvToolImageArithm); //------------------------------------------------------------------------------ vvToolImageArithm::vvToolImageArithm(vvMainWindowBase * parent, Qt::WindowFlags f) - :vvToolWidgetBase(parent, f), - vvToolBase(parent), - Ui::vvToolImageArithm() { + :vvToolWidgetBase(parent, f), + vvToolBase(parent), + Ui::vvToolImageArithm() +{ // Setup the UI Ui_vvToolImageArithm::setupUi(mToolWidget); - // Main filter + // Main filter mFilter = new clitk::ImageArithmGenericFilter; // Set how many inputs are needed for this tool @@ -45,26 +47,29 @@ vvToolImageArithm::vvToolImageArithm(vvMainWindowBase * parent, Qt::WindowFlags //------------------------------------------------------------------------------ -vvToolImageArithm::~vvToolImageArithm() { +vvToolImageArithm::~vvToolImageArithm() +{ } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolImageArithm::Initialize() { +void vvToolImageArithm::Initialize() +{ SetToolName("ImageArithm"); SetToolMenuName("ImageArithm"); - SetToolIconFilename(":/new/prefix1/icons/cross.png"); + SetToolIconFilename(":/common/icons/arithm.png"); SetToolTip("Perform simple arithmetic operations on one or two images."); - SetToolExperimental(true); + SetToolExperimental(false); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvToolImageArithm::InputIsSelected(std::vector & l) { +void vvToolImageArithm::InputIsSelected(std::vector & l) +{ mInput1 = l[0]; - mInput2 = l[1]; + mInput2 = l[1]; mTwoInputs = true; mGroupBoxOneInput->setEnabled(false); mGroupBoxTwoInputs->setEnabled(true); @@ -73,10 +78,10 @@ void vvToolImageArithm::InputIsSelected(std::vector & l) { //------------------------------------------------------------------------------ -void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) { +void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) +{ mInput1 = l; mTwoInputs = false; - // DD("Single input"); mGroupBoxTwoInputs->setEnabled(false); mGroupBoxOneInput->setEnabled(true); } @@ -84,8 +89,8 @@ void vvToolImageArithm::InputIsSelected(vvSlicerManager * l) { //------------------------------------------------------------------------------ -void vvToolImageArithm::GetArgsInfoFromGUI() { - // DD("GetArgsInfoFromGUI"); +void vvToolImageArithm::GetArgsInfoFromGUI() +{ mArgsInfo.input1_given = false; if (mTwoInputs) { mArgsInfo.input2_given = true; @@ -98,9 +103,10 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { 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; + if (radioButtonDifference->isChecked()) mArgsInfo.operation_arg = 7; + if (radioButtonRelativeDiff->isChecked()) mArgsInfo.operation_arg = 8; + } else { + mArgsInfo.input2_given = false; mArgsInfo.scalar_given = true; if (radioButtonSumV->isChecked()) mArgsInfo.operation_arg = 0; if (radioButtonMultiplyV->isChecked()) mArgsInfo.operation_arg = 1; @@ -109,14 +115,17 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { if (radioButtonMinV->isChecked()) mArgsInfo.operation_arg = 4; if (radioButtonAbsDiffV->isChecked()) mArgsInfo.operation_arg = 5; if (radioButtonSquaredDiffV->isChecked()) mArgsInfo.operation_arg = 6; - if (radioButtonLogV->isChecked()) mArgsInfo.operation_arg = 7; - if (radioButtonExpV->isChecked()) mArgsInfo.operation_arg = 8; + if (radioButtonLogAlone->isChecked()) mArgsInfo.operation_arg = 7; + if (radioButtonExpAlone->isChecked()) mArgsInfo.operation_arg = 8; if (radioButtonSqrtV->isChecked()) mArgsInfo.operation_arg = 9; + if (radioButtonDivideV->isChecked()) mArgsInfo.operation_arg = 11; + if (radioButtonNormalize->isChecked()) mArgsInfo.operation_arg = 12; + if (radioButtonLogV->isChecked()) mArgsInfo.operation_arg = 13; mArgsInfo.scalar_given = true; 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; } @@ -124,7 +133,8 @@ void vvToolImageArithm::GetArgsInfoFromGUI() { //------------------------------------------------------------------------------ -void vvToolImageArithm::apply() { +void vvToolImageArithm::apply() +{ if (!mCurrentSlicerManager) close(); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); GetArgsInfoFromGUI(); @@ -134,39 +144,46 @@ void vvToolImageArithm::apply() { // 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 pixe type."); + QMessageBox::information(this, "Wrong image type","Sorry, could not perform operation. Please select inputs with same pixel type."); close(); return; } - } - else { + + // 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 images size","Sorry, could not perform operation. Please select inputs with same size and spacing."); + close(); + return; + } + } else { // Input inputs.push_back(mInput1->GetImage()); - DD("Single input"); } - + // Main filter - clitk::ImageArithmGenericFilter::Pointer filter = + clitk::ImageArithmGenericFilter::Pointer filter = clitk::ImageArithmGenericFilter::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(); }