8383
8484"""
8585
86+ "Select Cellpose Docker Image"
8687CELLPOSE_DOCKER_NO_PRETRAINED = "cellprofiler/runcellpose_no_pretrained:0.1"
8788CELLPOSE_DOCKER_IMAGE_WITH_PRETRAINED = "cellprofiler/runcellpose_with_pretrained:0.1"
8889
90+ "Detection mode"
8991MODEL_NAMES = ['cyto' ,'nuclei' ,'tissuenet' ,'livecell' , 'cyto2' , 'general' ,
9092 'CP' , 'CPx' , 'TN1' , 'TN2' , 'TN3' , 'LC1' , 'LC2' , 'LC3' , 'LC4' , 'custom' ]
9193
@@ -95,7 +97,7 @@ class RunCellpose(ImageSegmentation):
9597
9698 module_name = "RunCellpose"
9799
98- variable_revision_number = 4
100+ variable_revision_number = 5
99101
100102 doi = {
101103 "Please cite the following when using RunCellPose:" : "https://doi.org/10.1038/s41592-020-01018-x" ,
@@ -105,6 +107,16 @@ class RunCellpose(ImageSegmentation):
105107 def create_settings (self ):
106108 super (RunCellpose , self ).create_settings ()
107109
110+ self .rescale = Binary (
111+ text = "Rescale images before running Cellpose" ,
112+ value = True ,
113+ doc = """\
114+ Reminds the user that the normalization step will be performed to ensure suimilar segmentation behaviour inthe RunCellpose
115+ modul and the Cellpose app.
116+ """
117+ )
118+
119+
108120 self .docker_or_python = Choice (
109121 text = "Run CellPose in docker or local python environment" ,
110122 choices = ["Docker" , "Python" ],
@@ -340,6 +352,7 @@ def set_directory_fn(path):
340352 def settings (self ):
341353 return [
342354 self .x_name ,
355+ self .rescale ,
343356 self .docker_or_python ,
344357 self .docker_image ,
345358 self .expected_diameter ,
@@ -365,7 +378,8 @@ def settings(self):
365378 ]
366379
367380 def visible_settings (self ):
368- vis_settings = [self .docker_or_python ]
381+ vis_settings = [self .rescale , self .docker_or_python ]
382+
369383
370384 if self .docker_or_python .value == "Docker" :
371385 vis_settings += [self .docker_image ]
@@ -440,6 +454,13 @@ def run(self, workspace):
440454 x = images .get_image (x_name )
441455 dimensions = x .dimensions
442456 x_data = x .pixel_data
457+
458+ if self .rescale .value :
459+ rescale_x = x_data .copy ()
460+ x01 = numpy .percentile (rescale_x , 1 )
461+ x99 = numpy .percentile (rescale_x , 99 )
462+ x_data = numpy .clip ((rescale_x - x01 ) / (x99 - x01 ), a_min = 0 , a_max = 1 )
463+
443464 anisotropy = 0.0
444465 if self .do_3D .value :
445466 anisotropy = x .spacing [0 ] / x .spacing [1 ]
@@ -699,4 +720,9 @@ def upgrade_settings(self, setting_values, variable_revision_number, module_name
699720 if variable_revision_number == 3 :
700721 setting_values = [setting_values [0 ]] + ["Python" ,CELLPOSE_DOCKER_IMAGE_WITH_PRETRAINED ] + setting_values [1 :]
701722 variable_revision_number = 4
723+ if variable_revision_number == 4 :
724+ setting_values = [setting_values [0 ]] + ['No' ] + [setting_values [1 :]]
725+ variable_revision_number = 5
702726 return setting_values , variable_revision_number
727+
728+
0 commit comments