]> Creatis software - clitk.git/blob - vv/vvToolMedianFilter.cxx
04ca82cf27cc84d5af1f17f3776b41b112d7266a
[clitk.git] / vv / vvToolMedianFilter.cxx
1     /*=========================================================================
2
3       Program:   vv
4       Module:    $RCSfile: vvToolMedianFilter.cxx,v $
5       Language:  C++
6       Date:      $Date: 2010/05/17 10:41:49 $
7       Version:   $Revision: 1.3 $
8       Author :   Bharath Navalpakkam (Bharath.Navalpakkam@creatis.insa-lyon.fr)
9
10       Copyright (C) 2010
11       Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
12       CREATIS                   http://www.creatis.insa-lyon.fr
13
14       This program is free software: you can redistribute it and/or modify
15       it under the terms of the GNU General Public License as published by
16       the Free Software Foundation, version 3 of the License.
17
18       This program is distributed in the hope that it will be useful,
19       but WITHOUT ANY WARRANTY; without even the implied warranty of
20       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21       GNU General Public License for more details.
22
23       You should have received a copy of the GNU General Public License
24       along with this program.  If not, see <http://www.gnu.org/licenses/>.
25
26       =========================================================================*/
27
28     #include "vvToolMedianFilter.h"
29     #include "vvSlicerManager.h"
30     #include "vvSlicer.h"
31     #include "vvToolInputSelectorWidget.h"
32     #include <clitkMedianImageGenericFilter.h>
33
34
35     //------------------------------------------------------------------------------
36     // Create the tool and automagically 
37     ADD_TOOL(vvToolMedianFilter);
38     //------------------------------------------------------------------------------
39
40     //------------------------------------------------------------------------------
41     vvToolMedianFilter::vvToolMedianFilter(vvMainWindowBase * parent, Qt::WindowFlags f) 
42       :vvToolWidgetBase(parent,f), 
43       vvToolBase<vvToolMedianFilter>(parent), 
44       Ui::vvToolMedianFilter()
45       {         
46         
47       // Setup the UI
48     
49     Ui_vvToolMedianFilter::setupUi(mToolWidget);
50     
51     mFilter = new clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>;
52     
53
54
55       // Main filter 
56
57       // Set how many inputs are needed for this tool
58   AddInputSelector("Select one image", mFilter);
59     }
60
61     //------------------------------------------------------------------------------
62     vvToolMedianFilter::~vvToolMedianFilter() {
63     }
64     //------------------------------------------------------------------------------
65     void vvToolMedianFilter::Initialize() {
66       SetToolName("MedianFilter");
67       SetToolMenuName("MedianFilter");
68       SetToolIconFilename(":common/icons/ducky.png");
69       SetToolTip("Make 'MedianFilter' on an image.");
70       SetToolExperimental(true);
71     }
72     //------------------------------------------------------------------------------
73
74   void vvToolMedianFilter::apply() {
75
76      GetArgsInfoFromGUI();
77     if (!mCurrentSlicerManager) close();
78   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
79   // Main filter
80   clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>::Pointer filter = 
81      clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>::New();
82    filter->SetInputVVImage(mCurrentImage);
83    filter->SetArgsInfo(mArgsInfo);
84    filter->EnableReadOnDisk(false);
85    filter->Update();
86   // Output
87   vvImage::Pointer output = filter->GetOutputVVImage();
88   std::ostringstream osstream;
89   osstream << "MedianFiltered_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
90   AddImage(output,osstream.str()); 
91   QApplication::restoreOverrideCursor();
92   close();
93   }
94     //------------------------------------------------------------------------------
95   void vvToolMedianFilter::GetArgsInfoFromGUI() {
96     /* //KEEP THIS FOR READING GGO FROM FILE
97       int argc=1;
98       std::string a = "toto";
99       char * const* argv = new char*;
100       //a.c_str();
101       struct cmdline_parser_params p;
102       p.check_required = 0;
103       int good = cmdline_parser_ext(argc, argv, &args_info, &p);
104     DD(good);
105     */
106     mArgsInfo.radius_given=0;
107     mArgsInfo.verbose_flag = false;
108    // mArgsInfo.radius_arg = new int[3];
109   // Required (even if not used)
110     mArgsInfo.input_given = 0;
111     mArgsInfo.output_given = 0;
112     mArgsInfo.input_arg=new char;
113     mArgsInfo.output_arg = new char;
114     mArgsInfo.config_given=0;
115     mArgsInfo.verbose_given=0;
116   }
117   //------------------------------------------------------------------------------
118 void vvToolMedianFilter::InputIsSelected(vvSlicerManager *m){
119   mCurrentSlicerManager =m;
120   // Specific for this gui
121     mArgsInfo.radius_arg = new int[3];
122   int checkdimensions=mCurrentSlicerManager->GetDimension();
123   if(checkdimensions<3)
124   {
125    horizontalSlider_3->hide();
126    spinBox_3->hide();
127    mArgsInfo.radius_arg[2]=0;
128    connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(UpdateH1slider()));
129    connect(horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(UpdateH2slider())); 
130   }
131   else
132   {
133   horizontalSlider->show();
134   horizontalSlider_2->show();  
135   horizontalSlider_3->show();
136   connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(UpdateH1slider()));
137   connect(horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(UpdateH2slider()));
138   connect(horizontalSlider_3, SIGNAL(valueChanged(int)), this, SLOT(UpdateH3slider()));   
139   }
140 }
141
142 //-----------------------------------------------------------------------------
143
144 void vvToolMedianFilter::UpdateH1slider()
145 {
146   
147   mArgsInfo.radius_arg[0]=horizontalSlider->value();
148   spinBox->setValue(mArgsInfo.radius_arg[0]);
149 }
150 void vvToolMedianFilter::UpdateH2slider()
151 {
152   mArgsInfo.radius_arg[1]=horizontalSlider_2->value(); 
153   spinBox_2->setValue(mArgsInfo.radius_arg[1]);
154 }
155 void vvToolMedianFilter::UpdateH3slider()
156 {
157   mArgsInfo.radius_arg[2]=horizontalSlider_3->value(); 
158   spinBox_3->setValue(mArgsInfo.radius_arg[2]);
159 }