Package VMTKVesselEnhancement :: Module SlicerVMTKVesselEnhancementFrangiGUI
[hide private]
[frames] | no frames]

Source Code for Module VMTKVesselEnhancement.SlicerVMTKVesselEnhancementFrangiGUI

  1  from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton 
  2  from Slicer import slicer 
  3   
  4   
  5  vtkKWPushButton_InvokedEvent = 10000 
  6  vtkKWSpinBox_ValueChangedEvent = 10000 
  7  vtkKWThumbWheel_ValueChangedEvent = 10001 
  8   
9 -class SlicerVMTKVesselEnhancementFrangiGUI(SlicerVMTKAdvancedPageSkeleton):
10
11 - def __init__(self,parentFrame,parentClass):
12 SlicerVMTKAdvancedPageSkeleton.__init__(self,parentFrame,parentClass) 13 14 self._spinboxFrame = slicer.vtkKWFrameWithLabel() 15 self._thrFrame = slicer.vtkKWFrameWithLabel() 16 self._sigmaMin = slicer.vtkKWSpinBoxWithLabel() 17 self._sigmaMax = slicer.vtkKWSpinBoxWithLabel() 18 self._numberOfSigmaSteps = slicer.vtkKWThumbWheel() 19 self._alpha = slicer.vtkKWSpinBoxWithLabel() 20 self._beta = slicer.vtkKWSpinBoxWithLabel() 21 self._gamma = slicer.vtkKWSpinBoxWithLabel() 22 23 self._startButton = slicer.vtkKWPushButton() 24 self._resetButton = slicer.vtkKWPushButton()
25 26
27 - def Destructor(self):
29
30 - def BuildGUI(self):
31 SlicerVMTKAdvancedPageSkeleton.BuildGUI(self) 32 33 self._spinboxFrame.SetParent(self._parentFrame) 34 self._spinboxFrame.Create() 35 self._spinboxFrame.AllowFrameToCollapseOff() 36 self._spinboxFrame.SetLabelText("Tubular structure detection") 37 self._spinboxFrame.SetReliefToSunken() 38 39 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 10 -in %s" % (self._spinboxFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 40 41 42 self._numberOfSigmaSteps.SetParent(self._spinboxFrame.GetFrame()) 43 self._numberOfSigmaSteps.Create() 44 self._numberOfSigmaSteps.SetRange(0.0,2000.0) 45 self._numberOfSigmaSteps.ClampMinimumValueOn() 46 self._numberOfSigmaSteps.ClampMaximumValueOn() 47 self._numberOfSigmaSteps.ClampResolutionOn() 48 self._numberOfSigmaSteps.SetThumbWheelHeight(10) 49 self._numberOfSigmaSteps.SetResolution(1.0) 50 self._numberOfSigmaSteps.SetLength(150) 51 self._numberOfSigmaSteps.DisplayEntryOn() 52 self._numberOfSigmaSteps.DisplayLabelOn() 53 self._numberOfSigmaSteps.GetLabel().SetText("Steps between max. and min. Diameter") 54 55 56 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 10" % self._numberOfSigmaSteps.GetWidgetName()) 57 58 59 self._sigmaMin.SetParent(self._spinboxFrame.GetFrame()) 60 self._sigmaMin.Create() 61 self._sigmaMin.GetWidget().SetRange(0.0,100.0) 62 self._sigmaMin.GetWidget().SetIncrement(0.1) 63 self._sigmaMin.GetWidget().SetWidth(5) 64 self._sigmaMin.GetWidget().SetValueFormat("%.1f") 65 self._sigmaMin.SetLabelText("Min. Diameter of the Tube:") 66 self._sigmaMin.SetBalloonHelpString("Select the minimal diameter of tubes to enhance in physical units (e.g. mm).") 67 68 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._sigmaMin.GetWidgetName()) 69 70 self._sigmaMax.SetParent(self._spinboxFrame.GetFrame()) 71 self._sigmaMax.Create() 72 self._sigmaMax.GetWidget().SetRange(0.0,100.0) 73 self._sigmaMax.GetWidget().SetIncrement(0.1) 74 self._sigmaMax.GetWidget().SetWidth(5) 75 self._sigmaMax.GetWidget().SetValueFormat("%.1f") 76 self._sigmaMax.SetLabelText("Max. Diameter of the Tube:") 77 self._sigmaMax.SetBalloonHelpString("Select the maximal diameter of tubes to enhance in physical units (e.g. mm).") 78 79 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._sigmaMax.GetWidgetName()) 80 81 82 self._thrFrame.SetParent(self._parentFrame) 83 self._thrFrame.Create() 84 self._thrFrame.AllowFrameToCollapseOff() 85 self._thrFrame.SetLabelText("Sensitivity Thresholds:") 86 self._thrFrame.SetReliefToSunken() 87 88 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 10 -in %s" % (self._thrFrame.GetWidgetName(), self._parentFrame.GetWidgetName())) 89 90 91 self._alpha.SetParent(self._thrFrame.GetFrame()) 92 self._alpha.Create() 93 self._alpha.GetWidget().SetRange(0.0,100.0) 94 self._alpha.GetWidget().SetIncrement(0.1) 95 self._alpha.GetWidget().SetWidth(5) 96 self._alpha.GetWidget().SetValueFormat("%.1f") 97 self._alpha.SetLabelText("Plate-like and line-like structures:") 98 self._alpha.SetBalloonHelpString("This controls the sensitivity for plate-like and line-like structures.") 99 100 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._alpha.GetWidgetName()) 101 102 self._beta.SetParent(self._thrFrame.GetFrame()) 103 self._beta.Create() 104 self._beta.GetWidget().SetRange(0.0,100.0) 105 self._beta.GetWidget().SetIncrement(0.1) 106 self._beta.GetWidget().SetWidth(5) 107 self._beta.GetWidget().SetValueFormat("%.1f") 108 self._beta.SetLabelText("Blob-like structures:") 109 self._beta.SetBalloonHelpString("This controls the sensitivity for blob-like structures.") 110 111 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._beta.GetWidgetName()) 112 113 self._gamma.SetParent(self._thrFrame.GetFrame()) 114 self._gamma.Create() 115 self._gamma.GetWidget().SetRange(0.0,100.0) 116 self._gamma.GetWidget().SetIncrement(0.1) 117 self._gamma.GetWidget().SetWidth(5) 118 self._gamma.GetWidget().SetValueFormat("%.1f") 119 self._gamma.SetLabelText("Contrast of image:") 120 self._gamma.SetBalloonHelpString("This controls the sensitivity in terms of the contrast of the image.") 121 122 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._gamma.GetWidgetName()) 123 124 125 self._startButton.SetParent(self._parentFrame) 126 self._startButton.Create() 127 self._startButton.SetEnabled(1) 128 self._startButton.SetActiveBackgroundColor(0.9,0.9,0.9) 129 self._startButton.SetReliefToRaised() 130 self._startButton.SetBackgroundColor(0.9,0.9,0.9) 131 self._startButton.SetText("Start!") 132 self._startButton.SetBalloonHelpString("Click to start") 133 134 self._resetButton.SetParent(self._parentFrame) 135 self._resetButton.Create() 136 self._resetButton.SetEnabled(1) 137 self._resetButton.SetActiveBackgroundColor(0.9,0.9,0.9) 138 self._resetButton.SetReliefToRaised() 139 self._resetButton.SetBackgroundColor(0.9,0.9,0.9) 140 self._resetButton.SetText("Cancel") 141 self._resetButton.SetBalloonHelpString("Click to reset") 142 143 144 slicer.TkCall("pack %s -side top -anchor e -padx 2 -pady 2" % self._startButton.GetWidgetName()) 145 slicer.TkCall("pack %s -side top -anchor e -padx 2 -pady 2" % self._resetButton.GetWidgetName()) 146 147 148 self.Reset()
149
150 - def AddGUIObservers(self):
151 SlicerVMTKAdvancedPageSkeleton.AddGUIObservers(self) 152 153 self._numberOfSigmaStepsTag = self._parentClass.AddObserverByNumber(self._numberOfSigmaSteps,vtkKWThumbWheel_ValueChangedEvent) 154 self._sigmaMinTag = self._parentClass.AddObserverByNumber(self._sigmaMin.GetWidget(),vtkKWSpinBox_ValueChangedEvent) 155 self._sigmaMaxTag = self._parentClass.AddObserverByNumber(self._sigmaMax.GetWidget(),vtkKWSpinBox_ValueChangedEvent) 156 self._alphaTag = self._parentClass.AddObserverByNumber(self._alpha.GetWidget(),vtkKWSpinBox_ValueChangedEvent) 157 self._betaTag = self._parentClass.AddObserverByNumber(self._beta.GetWidget(),vtkKWSpinBox_ValueChangedEvent) 158 self._gammaTag = self._parentClass.AddObserverByNumber(self._gamma.GetWidget(),vtkKWSpinBox_ValueChangedEvent) 159 160 self._startButtonTag = self._parentClass.AddObserverByNumber(self._startButton,vtkKWPushButton_InvokedEvent) 161 self._resetButtonTag = self._parentClass.AddObserverByNumber(self._resetButton,vtkKWPushButton_InvokedEvent)
162
163 - def RemoveGUIObservers(self):
164 SlicerVMTKAdvancedPageSkeleton.RemoveGUIObservers(self) 165 166 self._parentClass.RemoveObserver(self._startButtonTag) 167 self._parentClass.RemoveObserver(self._resetButtonTag)
168
169 - def ProcessGUIEvents(self,caller,event):
170 SlicerVMTKAdvancedPageSkeleton.ProcessGUIEvents(self,caller,event) 171 172 if caller == self._numberOfSigmaSteps and event == vtkKWThumbWheel_ValueChangedEvent: 173 self._parentClass.UpdateMRML() 174 elif caller == self._sigmaMin.GetWidget() and event == vtkKWSpinBox_ValueChangedEvent: 175 self._parentClass.UpdateMRML() 176 elif caller == self._sigmaMax.GetWidget() and event == vtkKWSpinBox_ValueChangedEvent: 177 self._parentClass.UpdateMRML() 178 elif caller == self._alpha.GetWidget() and event == vtkKWSpinBox_ValueChangedEvent: 179 self._parentClass.UpdateMRML() 180 elif caller == self._beta.GetWidget() and event == vtkKWSpinBox_ValueChangedEvent: 181 self._parentClass.UpdateMRML() 182 elif caller == self._gamma.GetWidget() and event == vtkKWSpinBox_ValueChangedEvent: 183 self._parentClass.UpdateMRML() 184 185 elif caller == self._startButton and event == vtkKWPushButton_InvokedEvent: 186 self.Execute() 187 self._parentClass.UpdateMRML() 188 elif caller == self._resetButton and event == vtkKWPushButton_InvokedEvent: 189 self.Reset() 190 self._parentClass.UpdateMRML()
191 192
193 - def UpdateMRML(self):
194 SlicerVMTKAdvancedPageSkeleton.UpdateMRML(self) 195 196 node = self._parentClass.GetScriptedModuleNode() 197 198 if node: 199 200 node.SetParameter('FRANGI_numberOfSigmaSteps',self._numberOfSigmaSteps.GetValue()) 201 node.SetParameter('FRANGI_sigmaMin',self._sigmaMin.GetWidget().GetValue()) 202 node.SetParameter('FRANGI_sigmaMax',self._sigmaMax.GetWidget().GetValue()) 203 node.SetParameter('FRANGI_alpha',self._alpha.GetWidget().GetValue()) 204 node.SetParameter('FRANGI_beta',self._beta.GetWidget().GetValue()) 205 node.SetParameter('FRANGI_gamma',self._gamma.GetWidget().GetValue())
206
207 - def UpdateGUI(self):
208 SlicerVMTKAdvancedPageSkeleton.UpdateGUI(self) 209 210 node = self._parentClass.GetScriptedModuleNode() 211 212 if node: 213 214 if node.GetParameter('FRANGI_numberOfSigmaSteps'): 215 self._numberOfSigmaSteps.SetValue(node.GetParameter('FRANGI_numberOfSigmaSteps')) 216 217 if node.GetParameter('FRANGI_sigmaMin'): 218 self._sigmaMin.GetWidget().SetValue(node.GetParameter('FRANGI_sigmaMin')) 219 220 if node.GetParameter('FRANGI_sigmaMax'): 221 self._sigmaMax.GetWidget().SetValue(node.GetParameter('FRANGI_sigmaMax')) 222 223 if node.GetParameter('FRANGI_alpha'): 224 self._alpha.GetWidget().SetValue(node.GetParameter('FRANGI_alpha')) 225 226 if node.GetParameter('FRANGI_beta'): 227 self._beta.GetWidget().SetValue(node.GetParameter('FRANGI_beta')) 228 229 if node.GetParameter('FRANGI_gamma'): 230 self._gamma.GetWidget().SetValue(node.GetParameter('FRANGI_gamma'))
231 232
233 - def Execute(self):
234 SlicerVMTKAdvancedPageSkeleton.Execute(self) 235 236 inVolume = self._parentClass._inVolumeSelector.GetSelected() 237 outVolume = self._parentClass._outVolumeSelector.GetSelected() 238 sigmaMin = float(self._sigmaMin.GetWidget().GetValue()) 239 sigmaMax = float(self._sigmaMax.GetWidget().GetValue()) 240 numberOfSigmaSteps = int(self._numberOfSigmaSteps.GetValue()) 241 alpha = float(self._alpha.GetWidget().GetValue()) 242 beta = float(self._beta.GetWidget().GetValue()) 243 gamma = float(self._gamma.GetWidget().GetValue()) 244 245 246 self._parentClass._logic.ApplyFrangiVesselness(inVolume,outVolume,sigmaMin,sigmaMax,numberOfSigmaSteps,alpha,beta,gamma)
247 248 249
250 - def Reset(self):
251 SlicerVMTKAdvancedPageSkeleton.Reset(self) 252 253 self._numberOfSigmaSteps.SetValue(10) 254 self._sigmaMin.GetWidget().SetValue(0.2) 255 self._sigmaMax.GetWidget().SetValue(2.0) 256 self._alpha.GetWidget().SetValue(0.5) 257 self._beta.GetWidget().SetValue(0.5) 258 self._gamma.GetWidget().SetValue(5.0)
259