4
4
from collections import OrderedDict
5
5
import pyqtgraph .parametertree .parameterTypes as pTypes
6
6
from pyqtgraph .parametertree import Parameter , ParameterTree , ParameterItem , registerParameterType
7
- from helpers import setPolicy
8
- from abc import ABCMeta ,abstractmethod
9
7
8
+ from abc import ABCMeta ,abstractmethod
9
+
10
+ from helpers import setPolicy ,permuteLabels
10
11
from inputCheck import InputCheck
12
+ from normalize import norm01
11
13
#from lazycall import lazyCall
12
- from normalize import norm01
14
+
13
15
14
16
15
17
class LayerBase (object ):
@@ -123,11 +125,11 @@ def lala(self):
123
125
class LayerImageItem (pg .ImageItem ):
124
126
def __init__ (self ,* args ,** kwargs ):
125
127
super (LayerImageItem ,self ).__init__ (* args ,** kwargs )
126
-
128
+ """
127
129
def mouseClickEvent(self, ev):
128
130
print type(self)
129
131
print ev.pos()
130
-
132
+ """
131
133
132
134
class ImageRgbLayer (LayerImageItem ,LayerBase ):
133
135
@@ -140,12 +142,8 @@ def checkData(self,data):
140
142
InputCheck .colorImage (data )
141
143
142
144
def setData (self ,data = None ):
143
- if data is None :
144
- self .removeItems ()
145
- return
146
- else :
147
- self .data = data
148
- self .setImage (self .data ,opacity = self .getParamValue ('Opacity' ))
145
+ self .data = data
146
+ self .setImage (self .data ,opacity = self .getParamValue ('Opacity' ))
149
147
150
148
def controlTemplate (self ):
151
149
return [{'name' : 'Opacity' , 'type' : 'float' , 'value' : 0.75 , 'step' : 0.1 ,'limits' :[0 ,1 ]} ]
@@ -160,7 +158,6 @@ def onOpacityChanged(param,changes):
160
158
self .connectParam ('Opacity' ,onOpacityChanged )
161
159
162
160
163
-
164
161
class ImageGrayLayer (LayerImageItem ,LayerBase ):
165
162
166
163
@@ -180,14 +177,10 @@ def checkData(self,data):
180
177
InputCheck .grayImage (data )
181
178
182
179
def setData (self ,data = None ):
183
- if data is None :
184
- self .removeItems ()
185
- return
186
- else :
187
- self .data = data
188
- self .preProcessedData = norm01 (np .squeeze (self .data ))
189
- self .cmappedData = self .getParamValue ('ColorMap' ).map (self .preProcessedData )
190
- self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
180
+ self .data = data
181
+ self .preProcessedData = norm01 (np .squeeze (self .data ))
182
+ self .cmappedData = self .getParamValue ('ColorMap' ).map (self .preProcessedData )
183
+ self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
191
184
192
185
def controlTemplate (self ):
193
186
return [
@@ -212,7 +205,6 @@ def onColorMapChanged(param,changes):
212
205
self .connectParam ('ColorMap' ,onColorMapChanged )
213
206
214
207
215
-
216
208
class ImageMultiGrayLayer (LayerImageItem ,LayerBase ):
217
209
218
210
@@ -223,22 +215,18 @@ def __init__(self,name,layerViewer):
223
215
self .addItem (self )
224
216
self .preProcessedData = None
225
217
self .selectedChannelImg = None
226
- self .cmappedData = None
218
+ self .cmappedData = None
227
219
228
220
def checkData (self ,data ):
229
221
InputCheck .multiGrayImage (data )
230
222
231
223
def setData (self ,data = None ):
232
- if data is None :
233
- self .removeItems ()
234
- return
235
- else :
236
- self .layerParameter .param ('Channel' ).setOpts (name = 'Channel' ,value = 0 ,limits = [0 ,data .shape [2 ]- 1 ])
237
- self .data = data
238
- self .preProcessedData = norm01 (self .data ,channelWise = True )
239
- self .selectedChannelImg = self .preProcessedData [:,:,self .getParamValue ('Channel' )]
240
- self .cmappedData = self .getParamValue ('ColorMap' ).map (self .selectedChannelImg )
241
- self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
224
+ self .layerParameter .param ('Channel' ).setOpts (name = 'Channel' ,value = 0 ,limits = [0 ,data .shape [2 ]- 1 ])
225
+ self .data = data
226
+ self .preProcessedData = norm01 (self .data ,channelWise = True )
227
+ self .selectedChannelImg = self .preProcessedData [:,:,self .getParamValue ('Channel' )]
228
+ self .cmappedData = self .getParamValue ('ColorMap' ).map (self .selectedChannelImg )
229
+ self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
242
230
243
231
244
232
def controlTemplate (self ):
@@ -274,6 +262,69 @@ def onOpacityChanged(param,changes):
274
262
self .connectParam ('ColorMap' ,onColorMapChanged )
275
263
276
264
265
+ class SegmentationLayer (LayerImageItem ,LayerBase ):
266
+
267
+
268
+ def __init__ (self ,name ,layerViewer ):
269
+ LayerBase .__init__ (self ,name ,layerViewer )
270
+ LayerImageItem .__init__ (self ,parent = self .layerView )
271
+
272
+ self .addItem (self )
273
+ self .preProcessedData = None
274
+ self .cmappedData = None
275
+
276
+
277
+ def checkData (self ,data ):
278
+ InputCheck .grayImage (data )
279
+
280
+ def setData (self ,data = None ):
281
+ self .data = data
282
+ self .preProcessedData = norm01 (np .require ( permuteLabels (self .data ),dtype = np .float32 ) )
283
+ self .cmappedData = self .getParamValue ('ColorMap' ).map (self .preProcessedData )
284
+ self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
285
+
286
+ def controlTemplate (self ):
287
+ return [
288
+ {'name' : 'ColorMap' , 'type' : 'colormap' },
289
+ {'name' : 'Opacity' , 'type' : 'float' , 'value' : 0.75 , 'step' : 0.1 ,'limits' :[0 ,1 ]}
290
+ ]
291
+
292
+ def connectControls (self ):
293
+
294
+ def onOpacityChanged (param ,changes ):
295
+ assert len (changes )== 1
296
+ param ,change ,opacity = changes [0 ]
297
+ self .setImage (self .cmappedData ,opacity = opacity )
298
+
299
+ def onColorMapChanged (param ,changes ):
300
+ assert len (changes )== 1
301
+ param ,change ,cmap = changes [0 ]
302
+ self .cmappedData = cmap .map (self .preProcessedData )
303
+ self .setImage (self .cmappedData ,opacity = self .getParamValue ('Opacity' ))
304
+
305
+ self .connectParam ('Opacity' ,onOpacityChanged )
306
+ self .connectParam ('ColorMap' ,onColorMapChanged )
307
+
308
+
309
+ def mouseClickEvent (self , ev ):
310
+ pos = ev .pos ()
311
+ label = self .data [pos [0 ],pos [1 ]]
312
+ self .segClicked (label ,ev )
313
+
314
+
315
+ def segClicked (self ,label ,ev ):
316
+ print "label %d clicked" % label
317
+
318
+
319
+
320
+ class PixelLabelLayer (LayerImageItem ,LayerBase ):
321
+ pass
322
+
323
+
324
+
325
+
326
+
277
327
layerTypes ['RgbLayer' ]= ImageRgbLayer
278
328
layerTypes ['GrayLayer' ]= ImageGrayLayer
279
- layerTypes ['MultiGrayLayer' ]= ImageMultiGrayLayer
329
+ layerTypes ['MultiGrayLayer' ]= ImageMultiGrayLayer
330
+ layerTypes ['SegmentationLayer' ]= SegmentationLayer
0 commit comments