Parcourir la source

Made letterCropper non destructive on source image, created a new test
which combines all the tests

unknown il y a 14 ans
Parent
commit
2c1bcb754e
3 fichiers modifiés avec 39 ajouts et 23 suppressions
  1. 15 22
      src/LetterCropper.py
  2. 2 1
      src/LocalBinaryPatternizerTest.py
  3. 22 0
      src/combined_test.py

+ 15 - 22
src/LetterCropper.py

@@ -1,41 +1,34 @@
+from copy import deepcopy
 from Rectangle import Rectangle
 
 class LetterCropper:
 
     def __init__(self, image, threshold = 0.9):
-        self.set_image(image)
-        self.set_threshold(threshold)
-        
-    def set_image(self, image):
-        self.image = image
-        
-    def set_threshold(self, threshold):
+        self.source_image = image
         self.threshold = threshold
-                
+        
     def get_cropped_letter(self):
         self.determine_letter_bounds()
-        self.image.crop(self.letter_bounds)
-        return self.image
+        self.result_image = deepcopy(self.source_image)
+        self.result_image.crop(self.letter_bounds)
+        return self.result_image
 
     def determine_letter_bounds(self):
-    
-        min_x = self.image.width
+        min_x = self.source_image.width
         max_x = 0
-        min_y = self.image.height
+        min_y = self.source_image.height
         max_y = 0
 
-        for y in xrange(self.image.height):
-            for x in xrange(self.image.width):
-                if self.image[y, x] < self.threshold:
-                    if x < min_x: min_x = x
-                    if y < min_y: min_y = y
-                    if x > max_x: max_x = x
-                    if y > max_y: max_y = y
+        for y, x, value in self.source_image:
+            if value < self.threshold:
+                if x < min_x: min_x = x
+                if y < min_y: min_y = y
+                if x > max_x: max_x = x
+                if y > max_y: max_y = y
         
         self.letter_bounds = Rectangle(
             min_x, 
             min_y, 
             max_x - min_x ,
             max_y - min_y
-        )
-
+        )

+ 2 - 1
src/LocalBinaryPatternizerTest.py

@@ -1,10 +1,11 @@
 from GrayscaleImage import GrayscaleImage
 from LocalBinaryPatternizer import LocalBinaryPatternizer
+from LetterCropper import LetterCropper
 from matplotlib.pyplot import imshow, subplot, show, axis
 
 image = GrayscaleImage("../images/test.png")
-lbp = LocalBinaryPatternizer(image)
 
+lbp = LocalBinaryPatternizer(image)
 feature_vector = lbp.create_features_vector()
 feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
         

+ 22 - 0
src/combined_test.py

@@ -0,0 +1,22 @@
+from GrayscaleImage import GrayscaleImage
+from LocalBinaryPatternizer import LocalBinaryPatternizer
+from LetterCropper import LetterCropper
+from matplotlib.pyplot import imshow, subplot, show, axis
+
+image = GrayscaleImage("../images/test.png")
+
+cropper = LetterCropper(image)
+cropped_letter = cropper.get_cropped_letter()
+
+lbp = LocalBinaryPatternizer(cropped_letter)
+feature_vector = lbp.create_features_vector()
+feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
+        
+subplot(121)
+imshow(image.data, cmap='gray')
+
+subplot(122)
+imshow(feature_vector, cmap='gray')
+
+axis('off')
+show()