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 pylab import imshow, imread, show
+from scipy.misc import imresize
 
 
 class GrayscaleImage:
 class GrayscaleImage:
 
 
@@ -38,6 +39,10 @@ class GrayscaleImage:
         imshow(self.data, cmap="gray")
         imshow(self.data, cmap="gray")
         show()
         show()
     
     
+    # size is of type float
+    def resize(self, size):
+        self.data = imresize(self.data, size)
+        
     def get_shape(self):
     def get_shape(self):
         return self.data.shape
         return self.data.shape
     shape = property(get_shape)
     shape = property(get_shape)
@@ -51,4 +56,4 @@ class GrayscaleImage:
     height = property(get_height)
     height = property(get_height)
         
         
     def in_bounds(self, y, x):
     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
 from numpy import zeros, byte
 
 
 class LocalBinaryPatternizer:
 class LocalBinaryPatternizer:
-        
+
     def __init__(self, image, cell_size = 16):
     def __init__(self, image, cell_size = 16):
         self.cell_size = cell_size
         self.cell_size = cell_size
         self.image = image
         self.image = image
@@ -25,4 +25,4 @@ class LocalBinaryPatternizer:
         return self.features
         return self.features
     
     
     def is_pixel_darker(self, y, x, value):
     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:
 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):
     def add_padding(self):
         pass
         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 LocalBinaryPatternizer import LocalBinaryPatternizer
 from LetterCropper import LetterCropper
 from LetterCropper import LetterCropper
 from matplotlib.pyplot import imshow, subplot, show, axis
 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")
 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()
 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 = lbp.create_features_vector()
 feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
 feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
         
         
-subplot(121)
+subplot(141)
 imshow(image.data, cmap='gray')
 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')
 imshow(feature_vector, cmap='gray')
 
 
 axis('off')
 axis('off')
-show()
+show()