示例#1
0
 def test_01_01_default(self):
     for minval, maxval, expected_min, expected_min_text, \
         expected_max, expected_max_text, expected_unbounded_max, \
         expected_abs in (
             (0, cps.END, 0, "0", cps.END, cps.END, True, True),
             (cps.BEGIN, 15, 0, cps.BEGIN, 15, "15", False, True),
             (0, -15, 0, "0", -15, "15", False, False),
             (0, "-" + cps.END, 0, "0", cps.END, cps.END, True, False)):
         s = cps.IntegerOrUnboundedRange("foo", (minval, maxval))
         self.assertEquals(s.min, expected_min)
         self.assertEquals(s.max, expected_max)
         self.assertEquals(s.display_min, expected_min_text)
         self.assertEquals(s.display_max, expected_max_text)
         self.assertEquals(s.is_abs(), expected_abs)
         s.test_valid(None)
示例#2
0
 def create_settings(self):
     self.image_name = cps.ImageNameSubscriber(
         "Select the input image",cps.NONE,doc = """
         Choose the image to be cropped.""")
     
     self.cropped_image_name = cps.CroppingNameProvider(
         "Name the output image","CropBlue",doc = """
         Enter the name to be given to cropped image.""")
     
     self.shape = cps.Choice(
         "Select the cropping shape",
         [SH_RECTANGLE, SH_ELLIPSE, SH_IMAGE,
          SH_OBJECTS, SH_CROPPING],
         SH_RECTANGLE,doc = """
         Select the shape into which you would like to crop: 
         <ul>
         <li><i>%(SH_RECTANGLE)s:</i> Self-explanatory.</li>
         <li><i>%(SH_ELLIPSE)s:</i> Self-explanatory.</li>
         <li><i>%(SH_IMAGE)s:</i> Cropping will occur based on a binary image you specify. A choice box 
         with available images will appear from which 
         you can select an image. To crop into an arbitrary shape that you define, choose 
         <i>%(SH_IMAGE)s</i> and use the <b>LoadSingleImage</b> module to load a black and white image 
         that you have already prepared from a file. If you have created this image in a 
         program such as Photoshop, this binary image should contain only the values 0 and 255,
         with zeros (black) for the parts you want to remove and 255 (white) for
         the parts you want to retain. Alternately, you may have previously generated a
         binary image using this module (e.g., using the <i>%(SH_ELLIPSE)s</i> option) and saved
         it using the <b>SaveImages</b> module.<br>
         In any case, the image must be exactly the same starting size as your image
         and should contain a contiguous block of white pixels, because 
         the cropping module may remove rows and columns that are
         completely blank.</li>
         <li><i>%(SH_OBJECTS)s:</i> Crop based on labeled objects identified by a previous
         <b>Identify</b> module.</li>
         <li><i>%(SH_CROPPING)s:</i> The cropping generated by a previous cropping module.
         You will be able to select images that were generated by previous <b>Crop</b> modules.
         This <b>Crop</b> module will use the same cropping that was used to generate whichever image
         you choose.</li>
         </ul>"""%globals())
     
     self.crop_method = cps.Choice(
         "Select the cropping method",
         [CM_COORDINATES, CM_MOUSE], CM_COORDINATES, doc = """                                      
         Choose whether you would like to crop by typing in pixel coordinates or clicking with the mouse.
         <ul>
         <li><i>%(CM_COORDINATES)s:</i> For <i>%(SH_ELLIPSE)s</i>, you will be asked to enter the geometric
         parameters of the ellipse. For <i>%(SH_RECTANGLE)s</i>, you will be asked to specify
         the coordinates of the corners.</li> 
         <li><i>%(CM_MOUSE)s:</i> For <i>%(SH_ELLIPSE)s</i>, you will be asked to click five or more
         points to define an ellipse around the part of the image you want to
         analyze.  Keep in mind that the more points you click, the longer it will
         take to calculate the ellipse shape. For <i>%(SH_RECTANGLE)s</i>, you can click as many
         points as you like that are in the interior of the region you wish to
         retain.</li>
         </ul>"""%globals())
     
     self.individual_or_once = cps.Choice(
         "Apply which cycle's cropping pattern?",
         [IO_INDIVIDUALLY, IO_FIRST], IO_INDIVIDUALLY, doc = """
         Specify how a given cropping pattern should be 
         applied to other image cycles:
         <ul>
         <li><i>%(IO_FIRST)s:</i> The cropping pattern from the first image cycle is applied to all
         subsequent cyles. This is useful if the first image is intended to function as a template
         in some fashion.</li>
         <li><i>%(IO_INDIVIDUALLY)s:</i> Every image cycle is cropped individually.</li>
         </ul>"""%globals())
     
     self.horizontal_limits = cps.IntegerOrUnboundedRange(
         "Left and right rectangle positions",
         minval=0, doc = """
         <i>(Used only if %(SH_RECTANGLE)s selected as cropping shape, or if using Plate Fix)</i><br>
         Specify the left and right positions for the bounding rectangle by selecting one of the following:<br>
         <ul>
         <li><i>%(ABSOLUTE)s:</i> Specify these values as absolute pixel
         coordinates in the original image. For instance, you might enter
         "25", "225", and "Absolute" to create a 200&times;200 pixel image that is
         25 pixels from the top-left corner.</li>
         <li><i>%(FROM_EDGE)s:</i> Specify the position relative to the image 
         edge. For instance, you might enter "25", "25", and "Edge" to
         crop 25 pixels from both the left and right edges of the image, irrespective
         of the image's original size.</li>
         </ul>"""%globals())
     
     self.vertical_limits = cps.IntegerOrUnboundedRange(
         "Top and bottom rectangle positions",
         minval=0, doc = """
         <i>(Used only if %(SH_RECTANGLE)s selected as cropping shape, or if using Plate Fix)</i><br>
         Specify the top and bottom positions for the bounding rectangle by selecting one of the following:<br>
         <ul>
         <li><i>%(ABSOLUTE)s:</i> Specify these values as absolute pixel coordinates.
         For instance, you might enter "25", "225", and "Absolute" 
         to create a 200&times;200 pixel image that's 25 pixels 
         from the top-left corner.</li>
         <li><i>%(FROM_EDGE)s:</i> Specify position relative to the image edge.
         For instance, you might enter "25", "25", and "Edge" to
         crop 25 pixels from the edges of your images irrespective
         of their size.</li>
         </ul>"""%globals())
     
     self.ellipse_center = cps.Coordinates(
         "Coordinates of ellipse center",
         (500,500),doc = """
         <i>(Used only if %(SH_ELLIPSE)s selected as cropping shape)</i><br>
         Specify the center pixel position of the ellipse."""%globals())
         
     self.ellipse_x_radius = cps.Integer(
         "Ellipse radius, X direction",400, doc = """
         <i>(Used only if %(SH_ELLIPSE)s selected as cropping shape)</i><br>
         Specify the radius of the ellipse in the X direction."""%globals())
     
     self.ellipse_y_radius = cps.Integer(
         "Ellipse radius, Y direction",200, doc = """
         <i>(Used only if %(SH_ELLIPSE)s selected as cropping shape)</i><br>
         Specify the radius of the ellipse in the Y direction."""%globals())
     
     self.image_mask_source = cps.ImageNameSubscriber(
         "Select the masking image",cps.NONE,doc = """
         <i>(Used only if %(SH_IMAGE)s selected as cropping shape)</i><br>
         Select the image to be use as a cropping mask."""%globals())
     
     self.cropping_mask_source = cps.CroppingNameSubscriber(
         "Select the image with a cropping mask",cps.NONE, doc = """
         <i>(Used only if %(SH_CROPPING)s selected as cropping shape)</i><br>
         Select the image associated with the cropping mask that you want to use."""%globals())
     
     self.objects_source = cps.ObjectNameSubscriber(
         "Select the objects",cps.NONE, doc="""
         <i>(Used only if %(SH_OBJECTS)s selected as cropping shape)</i><br>
         Select the objects that are to be used as a cropping mask."""%globals())
     
     self.use_plate_fix = cps.Binary(
         "Use Plate Fix?",False,doc = """
         <i>(Used only if %(SH_IMAGE)s selected as cropping shape)</i><br>
         Select <i>%(YES)s</i> to attempt to regularize the edges around a previously-identified
         plate object.
         <p>When attempting to crop based on a previously identified object
         such as a rectangular plate, the plate may not have
         precisely straight edges: there might be a tiny, almost unnoticeable
         "appendage" sticking out. Without Plate Fix, the <b>Crop</b>
         module would not crop the image tightly enough: it would retain the tiny appendage, leaving a lot
         of blank space around the plate and potentially causing problems with later
         modules (especially ones involving illumination correction). </p>
         <p>Plate Fix takes the
         identified object and crops to exclude any minor appendages (technically,
         any horizontal or vertical line where the object covers less than 50%% of
         the image). It also sets pixels around the edge of the object (for
         regions greater than 50%% but less than 100%%) that otherwise would be 0 to the
         background pixel value of your image, thus avoiding problems with
         other modules. </p>
         <p><i>Important note:</i> Plate Fix uses the coordinates
         entered in the boxes normally used for rectangle cropping (Top, Left and
         Bottom, Right) to tighten the edges around your identified plate. This
         is done because in the majority of plate identifications you do not want
         to include the sides of the plate. If you would like the entire plate to
         be shown, you should enter "1:end" for both coordinates. If, for example, you would like
         to crop 80 pixels from each edge of the plate, you could enter Top, Left and Bottom, 
         Right values of 80 and select <i>%(FROM_EDGE)s</i>.</p>"""%globals()) 
     
     self.remove_rows_and_columns = cps.Choice(
         "Remove empty rows and columns?",
         [RM_NO, RM_EDGES, RM_ALL],
         RM_ALL, doc = """
         Use this option to choose whether to remove rows and columns that lack objects:
         <ul>
         <li><i>%(RM_NO)s:</i> Leave the image the same size. The cropped areas will be set  
         to zeroes, and will appear as black.</li>
         <li><i>%(RM_EDGES)s:</i> Crop the image so that its top, bottom, left and right are at
         the first non-blank pixel for that edge.</li>
         <li><i>%(RM_ALL)s:</i> Remove any row or column of all-blank pixels, even from the
         internal portion of the image.</li>
         </ul>"""%globals())
示例#3
0
 def test_01_06_set_rel_end(self):
     s = cps.IntegerOrUnboundedRange("foo", (0, cps.END))
     s.value_text = s.compose_rel()
     self.assertFalse(s.is_abs())
     self.assertEqual(s.max, cps.END)
示例#4
0
 def test_01_05_set_abs(self):
     s = cps.IntegerOrUnboundedRange("foo", (0, -15))
     self.assertFalse(s.is_abs())
     s.value_text = s.compose_abs()
     self.assertTrue(s.is_abs())
     self.assertEqual(s.max, 15)
示例#5
0
 def test_01_04_set_end(self):
     s = cps.IntegerOrUnboundedRange("foo", (0, 15))
     s.value_text = s.compose_max_text(cps.END)
     self.assertEquals(s.max, cps.END)
示例#6
0
 def test_01_03_set_max(self):
     s = cps.IntegerOrUnboundedRange("foo")
     s.value_text = s.compose_max_text("015")
     self.assertEquals(s.max, 15)
     self.assertEquals(s.display_max, "015")
示例#7
0
 def test_01_02_set_min(self):
     s = cps.IntegerOrUnboundedRange("foo")
     s.value_text = s.compose_min_text("01")
     self.assertEquals(s.min, 1)
     self.assertEquals(s.display_min, "01")