Sfoglia il codice sorgente

Made get_normalized_letter in NormalizedImage.py

Richard Torenvliet 14 anni fa
parent
commit
5903a6fc89
4 ha cambiato i file con 54 aggiunte e 24 eliminazioni
  1. 6 1
      src/GrayscaleImage.py
  2. 2 2
      src/LocalBinaryPatternizer.py
  3. 12 16
      src/NormalizedImage.py
  4. 34 5
      src/combined_test.py

+ 6 - 1
src/GrayscaleImage.py

@@ -1,4 +1,5 @@
 from pylab import imshow, imread, show
+from scipy.misc import imresize
 
 class GrayscaleImage:
 
@@ -38,6 +39,10 @@ class GrayscaleImage:
         imshow(self.data, cmap="gray")
         show()
     
+    # size is of type float
+    def resize(self, size):
+        self.data = imresize(self.data, size)
+        
     def get_shape(self):
         return self.data.shape
     shape = property(get_shape)
@@ -51,4 +56,4 @@ class GrayscaleImage:
     height = property(get_height)
         
     def in_bounds(self, y, x):
-        return x >= 0 and x < self.width and y >= 0 and y < self.height
+        return x >= 0 and x < self.width and y >= 0 and y < self.height

+ 2 - 2
src/LocalBinaryPatternizer.py

@@ -1,7 +1,7 @@
 from numpy import zeros, byte
 
 class LocalBinaryPatternizer:
-        
+
     def __init__(self, image, cell_size = 16):
         self.cell_size = cell_size
         self.image = image
@@ -25,4 +25,4 @@ class LocalBinaryPatternizer:
         return self.features
     
     def is_pixel_darker(self, y, x, value):
-        return self.image.in_bounds(y, x) and self.image[y, x] > value
+        return self.image.in_bounds(y, x) and self.image[y, x] > value

+ 12 - 16
src/NormalizedImage.py

@@ -1,21 +1,17 @@
-from PIL import Image
-
+from copy import deepcopy
 class NormalizedImage:
-    DEFAULT_SIZE = (100, 200)
-
-    def __init__(self, image, size):
-        self.letter = image
-
-        if size:
-            self.size = size
-        else:
-            self.size = self.DEFAULT_SIZE
-
-        self.add_padding()
-        self.resize()
+    
+    DEFAULT_SIZE = 100.0
+    
+    def __init__(self, image, size=DEFAULT_SIZE):
+        self.source_image = image
+        self.size = size
 
     def add_padding(self):
         pass
 
-    def resize(self):
-        return self.letter.resize(self.size, Image.NEAREST)
+    # normalize img
+    def get_normalized_letter(self):
+        self.result_image = deepcopy(self.source_image)
+        self.result_image.resize(self.size / self.source_image.height)
+        return self.result_image

+ 34 - 5
src/combined_test.py

@@ -2,21 +2,50 @@ from GrayscaleImage import GrayscaleImage
 from LocalBinaryPatternizer import LocalBinaryPatternizer
 from LetterCropper import LetterCropper
 from matplotlib.pyplot import imshow, subplot, show, axis
+from NormalizedImage import NormalizedImage
 
+# Comment added by Richard Torenvliet
+# Steps in this test files are
+# 1. crop image 
+# 2. resize to default hight (in future also to width)
+# 3. preform LBP
+# 4. construct feature vector
+# 5. plot
+
+# Image is now an instance of class GrayscaleImage
+# GrayscaleImage has functions like resize, crop etc.
 image = GrayscaleImage("../images/test.png")
 
-cropper = LetterCropper(image)
+# Crops image; param threshold is optional: LetterCropper(image, threshold=0.9)
+# image: GrayscaleImage, threshold: float
+cropper = LetterCropper(image, 0.9)
 cropped_letter = cropper.get_cropped_letter()
 
-lbp = LocalBinaryPatternizer(cropped_letter)
+# Show difference in shape
+print cropped_letter.shape
+
+# Resizes image; param size is optional: NormalizedImage(image, size=DEFAULT)
+# image: GrayscaleImage, size: float
+norm = NormalizedImage(cropped_letter)
+resized = norm.get_normalized_letter()
+
+# Difference is noticable
+print resized.shape
+
+lbp = LocalBinaryPatternizer(resized)
 feature_vector = lbp.create_features_vector()
 feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
         
-subplot(121)
+subplot(141)
 imshow(image.data, cmap='gray')
 
-subplot(122)
+subplot(142)
+imshow(cropped_letter.data, cmap='gray')
+
+subplot(143)
+imshow(resized.data, cmap='gray')
+subplot(144)
 imshow(feature_vector, cmap='gray')
 
 axis('off')
-show()
+show()