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
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
29
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
162
168
191
192
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
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
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
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