1 from SlicerVMTKAdvancedPageSkeleton import SlicerVMTKAdvancedPageSkeleton
2 from Slicer import slicer
3
4 vtkKWPushButton_InvokedEvent = 10000
5 vtkKWSpinBox_ValueChangedEvent = 10000
6 vtkKWThumbWheel_ValueChangedEvent = 10001
7
9
10 - def __init__(self,parentFrame,parentClass):
11 SlicerVMTKAdvancedPageSkeleton.__init__(self,parentFrame,parentClass)
12
13 self._spinboxFrame = slicer.vtkKWFrameWithLabel()
14 self._thrFrame = slicer.vtkKWFrameWithLabel()
15
16 self._sigmaMin = slicer.vtkKWSpinBoxWithLabel()
17 self._sigmaMax = slicer.vtkKWSpinBoxWithLabel()
18 self._numberOfSigmaSteps = slicer.vtkKWThumbWheel()
19 self._alpha = slicer.vtkKWSpinBoxWithLabel()
20 self._alpha2 = slicer.vtkKWSpinBoxWithLabel()
21
22 self._startButton = slicer.vtkKWPushButton()
23 self._resetButton = slicer.vtkKWPushButton()
24
27
28
30 SlicerVMTKAdvancedPageSkeleton.BuildGUI(self)
31
32
33
34 self._spinboxFrame.SetParent(self._parentFrame)
35 self._spinboxFrame.Create()
36 self._spinboxFrame.AllowFrameToCollapseOff()
37 self._spinboxFrame.SetLabelText("Tubular structure detection:")
38 self._spinboxFrame.SetReliefToSunken()
39
40 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 10 -in %s" % (self._spinboxFrame.GetWidgetName(), self._parentFrame.GetWidgetName()))
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 self._sigmaMin.SetParent(self._spinboxFrame.GetFrame())
59 self._sigmaMin.Create()
60 self._sigmaMin.GetWidget().SetRange(0.0,100.0)
61 self._sigmaMin.GetWidget().SetIncrement(0.1)
62 self._sigmaMin.GetWidget().SetWidth(5)
63 self._sigmaMin.GetWidget().SetValueFormat("%.1f")
64 self._sigmaMin.SetLabelText("Min. Diameter of the Tube:")
65 self._sigmaMin.SetBalloonHelpString("Select the minimal diameter of tubes to enhance in physical units (e.g. mm).")
66
67 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._sigmaMin.GetWidgetName())
68
69 self._sigmaMax.SetParent(self._spinboxFrame.GetFrame())
70 self._sigmaMax.Create()
71 self._sigmaMax.GetWidget().SetRange(0.0,100.0)
72 self._sigmaMax.GetWidget().SetIncrement(0.1)
73 self._sigmaMax.GetWidget().SetWidth(5)
74 self._sigmaMax.GetWidget().SetValueFormat("%.1f")
75 self._sigmaMax.SetLabelText("Max. Diameter of the Tube:")
76 self._sigmaMax.SetBalloonHelpString("Select the maximal diameter of tubes to enhance in physical units (e.g. mm).")
77
78 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._sigmaMax.GetWidgetName())
79
80 self._thrFrame.SetParent(self._parentFrame)
81 self._thrFrame.Create()
82 self._thrFrame.AllowFrameToCollapseOff()
83 self._thrFrame.SetLabelText("Sensitivity Thresholds:")
84 self._thrFrame.SetReliefToSunken()
85
86 slicer.TkCall("pack %s -side top -expand y -padx 2 -pady 10 -in %s" % (self._thrFrame.GetWidgetName(), self._parentFrame.GetWidgetName()))
87
88
89 self._alpha.SetParent(self._thrFrame.GetFrame())
90 self._alpha.Create()
91 self._alpha.GetWidget().SetRange(0.0,100.0)
92 self._alpha.GetWidget().SetIncrement(0.1)
93 self._alpha.GetWidget().SetWidth(5)
94 self._alpha.GetWidget().SetValueFormat("%.1f")
95 self._alpha.SetLabelText("Plate-like and line-like structures:")
96 self._alpha.SetBalloonHelpString("This controls the sensitivity for plate-like and line-like structures.")
97
98 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._alpha.GetWidgetName())
99
100
101 self._alpha2.SetParent(self._thrFrame.GetFrame())
102 self._alpha2.Create()
103 self._alpha2.GetWidget().SetRange(0.0,100.0)
104 self._alpha2.GetWidget().SetIncrement(0.1)
105 self._alpha2.GetWidget().SetWidth(5)
106 self._alpha2.GetWidget().SetValueFormat("%.1f")
107 self._alpha2.SetLabelText("Blob-like structures:")
108 self._alpha2.SetBalloonHelpString("This controls the sensitivity for blob-like structures.")
109
110 slicer.TkCall("pack %s -side top -anchor e -expand y -padx 2 -pady 2" % self._alpha2.GetWidgetName())
111
112
113
114 self._startButton.SetParent(self._parentFrame)
115 self._startButton.Create()
116 self._startButton.SetEnabled(1)
117 self._startButton.SetActiveBackgroundColor(0.9,0.9,0.9)
118 self._startButton.SetReliefToRaised()
119 self._startButton.SetBackgroundColor(0.9,0.9,0.9)
120 self._startButton.SetText("Start!")
121 self._startButton.SetBalloonHelpString("Click to start")
122
123 self._resetButton.SetParent(self._parentFrame)
124 self._resetButton.Create()
125 self._resetButton.SetEnabled(1)
126 self._resetButton.SetActiveBackgroundColor(0.9,0.9,0.9)
127 self._resetButton.SetReliefToRaised()
128 self._resetButton.SetBackgroundColor(0.9,0.9,0.9)
129 self._resetButton.SetText("Cancel")
130 self._resetButton.SetBalloonHelpString("Click to reset")
131
132
133
134 slicer.TkCall("pack %s -side top -anchor e -padx 2 -pady 2" % self._startButton.GetWidgetName())
135 slicer.TkCall("pack %s -side top -anchor e -padx 2 -pady 2" % self._resetButton.GetWidgetName())
136
137
138 self.Reset()
139
140
153
160
182
183
185 SlicerVMTKAdvancedPageSkeleton.UpdateMRML(self)
186
187 node = self._parentClass.GetScriptedModuleNode()
188
189 if node:
190
191 node.SetParameter('SATO_numberOfSigmaSteps',self._numberOfSigmaSteps.GetValue())
192 node.SetParameter('SATO_sigmaMin',self._sigmaMin.GetWidget().GetValue())
193 node.SetParameter('SATO_sigmaMax',self._sigmaMax.GetWidget().GetValue())
194 node.SetParameter('SATO_alpha',self._alpha.GetWidget().GetValue())
195 node.SetParameter('SATO_alpha2',self._alpha2.GetWidget().GetValue())
196
197
199 SlicerVMTKAdvancedPageSkeleton.UpdateGUI(self)
200
201 node = self._parentClass.GetScriptedModuleNode()
202
203 if node:
204
205 if node.GetParameter('SATO_numberOfSigmaSteps'):
206 self._numberOfSigmaSteps.SetValue(node.GetParameter('SATO_numberOfSigmaSteps'))
207
208 if node.GetParameter('SATO_sigmaMin'):
209 self._sigmaMin.GetWidget().SetValue(node.GetParameter('SATO_sigmaMin'))
210
211 if node.GetParameter('SATO_sigmaMax'):
212 self._sigmaMax.GetWidget().SetValue(node.GetParameter('SATO_sigmaMax'))
213
214 if node.GetParameter('SATO_alpha'):
215 self._alpha.GetWidget().SetValue(node.GetParameter('SATO_alpha'))
216
217 if node.GetParameter('SATO_alpha2'):
218 self._alpha2.GetWidget().SetValue(node.GetParameter('SATO_alpha2'))
219
221 SlicerVMTKAdvancedPageSkeleton.Execute(self)
222
223 inVolume = self._parentClass._inVolumeSelector.GetSelected()
224 outVolume = self._parentClass._outVolumeSelector.GetSelected()
225 sigmaMin = float(self._sigmaMin.GetWidget().GetValue())
226 sigmaMax = float(self._sigmaMax.GetWidget().GetValue())
227 numberOfSigmaSteps = int(self._numberOfSigmaSteps.GetValue())
228 alpha = float(self._alpha.GetWidget().GetValue())
229 alpha2 = float(self._alpha2.GetWidget().GetValue())
230
231
232 self._parentClass._logic.ApplySatoVesselness(inVolume,outVolume,sigmaMin,sigmaMax,numberOfSigmaSteps,alpha,alpha2)
233
234
235
237 SlicerVMTKAdvancedPageSkeleton.Reset(self)
238
239 self._numberOfSigmaSteps.SetValue(10)
240 self._sigmaMin.GetWidget().SetValue(0.2)
241 self._sigmaMax.GetWidget().SetValue(2.0)
242 self._alpha.GetWidget().SetValue(0.5)
243 self._alpha2.GetWidget().SetValue(2.0)
244