code: def crop(self, xa, xb, ya, yb):
          
          
          if self.pilimage != None:
              raise RuntimeError, "Cannot crop anymore, PIL image already exists !"
          
          if self.verbose:
              print "Cropping : [%i:%i, %i:%i]" % (xa, xb, ya, yb)
          self.numpyarray = self.numpyarray[xa:xb, ya:yb]
          
          self.xa += xa
          self.ya += ya
          self.xb = self.xa + (xb - xa)
          self.yb = self.ya + (yb - ya)
docs: Crops the image. Two points :
          
              - We use numpy conventions
              xa = 200 and xb = 400 will give you a width of 200 pixels !
          
              - We crop relative to the current array (i.e. not necessarily to the original array !)
              This means you can crop several times in a row with xa = 10, it will each time remove 10 pixels in x !
          
          But we update the crop region specifications, so that the object remembers how it was cut.
          
          Please give positive integers in compatible ranges, no checks are made.