From 8ef7a5892d15d94c9a5a7e34e8de5ffdfde58620 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.anjos@idiap.ch>
Date: Fri, 7 Jul 2017 10:23:25 +0200
Subject: [PATCH] Use 'crop' instead of 'cropper'

---
 bob/bio/vein/preprocessor/crop.py | 107 ++++++++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 bob/bio/vein/preprocessor/crop.py

diff --git a/bob/bio/vein/preprocessor/crop.py b/bob/bio/vein/preprocessor/crop.py
new file mode 100644
index 0000000..8b529e0
--- /dev/null
+++ b/bob/bio/vein/preprocessor/crop.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+
+
+'''Base utilities for pre-cropping images'''
+
+import numpy
+
+
+class Cropper(object):
+    """This is the base class for all croppers
+
+    It defines the minimum requirements for all derived cropper classes.
+
+
+    """
+
+    def __init__(self):
+      pass
+
+
+    def __call__(self, image):
+      """Overwrite this method to implement your masking method
+
+
+      Parameters:
+
+        image (numpy.ndarray): A 2D numpy array of type ``uint8`` with the
+          input image
+
+
+      Returns:
+
+        numpy.ndarray: A 2D numpy array of the same type as the input, with
+        cropped rows and columns as per request
+
+      """
+
+      raise NotImplemented('You must implement the __call__ slot')
+
+
+class FixedCrop(Cropper):
+  """Implements cropping using a fixed suppression of border pixels
+
+  The defaults supress no lines from the image and returns an image like the
+  original.
+
+
+  .. note::
+
+     Before choosing values, note you're responsible for knowing what is the
+     orientation of images fed into this cropper.
+
+
+  Parameters:
+
+    top (:py:class:`int`, optional): Number of lines to suppress from the top
+      of the image. The top of the image corresponds to ``y = 0``.
+
+    bottom (:py:class:`int`, optional): Number of lines to suppress from the
+      bottom of the image. The bottom of the image corresponds to ``y =
+      height``.
+
+    left (:py:class:`int`, optional): Number of lines to suppress from the left
+      of the image. The left of the image corresponds to ``x = 0``.
+
+    right (:py:class:`int`, optional): Number of lines to suppress from the
+      right of the image. The right of the image corresponds to ``x = width``.
+
+  """
+
+  def __init__(self, top=0, bottom=0, left=0, right=0):
+    self.top = top
+    self.bottom = bottom
+    self.left = left
+    self.right = right
+
+
+  def __call__(self, image):
+    """Returns a big mask
+
+
+    Parameters:
+
+      image (numpy.ndarray): A 2D numpy array of type ``uint8`` with the
+        input image
+
+
+    Returns:
+
+      numpy.ndarray: A 2D numpy array of type boolean with the caculated
+      mask. ``True`` values correspond to regions where the finger is
+      situated
+
+
+    """
+
+    # this should work even if limits are zeros
+    h, w = image.shape
+    return image[self.top:h-self.bottom, self.left:w-self.right]
+
+
+class NoCrop(FixedCrop):
+  """Convenience: same as FixedCrop()"""
+
+  def __init__(self):
+    super(NoCrop, self).__init__(0, 0, 0, 0)
-- 
GitLab