Ver código fonte

worked on letter cropper

Richard Torenvliet 14 anos atrás
pai
commit
c3c3503279

BIN
images/test10.png


+ 6 - 1
src/GaussianFilter.py

@@ -30,10 +30,15 @@ class GaussianFilter:
         image = convolve1d(image.data, kernel, axis=0, mode='nearest')
         return GrayscaleImage(None, convolve1d(image, kernel, axis=1, mode='nearest'))
         
+    def filter(self, image):
+        kernel = self.get_1d_gaussian_kernel()
+        image.data = convolve1d(image.data, kernel, axis=0, mode='nearest')
+        image.data = convolve1d(image.data, kernel, axis=1, mode='nearest')
+        
     def get_scale(self):
       return self.scale
       
     def set_scale(self, scale):
         self.scale = float(scale)
 
-    scale = property(get_scale, set_scale)
+    scale = property(get_scale, set_scale)

+ 7 - 2
src/GrayscaleImage.py

@@ -1,5 +1,6 @@
 from pylab import imshow, imread, show
 from scipy.misc import imresize
+from matplotlib.pyplot import hist
 
 class GrayscaleImage:
 
@@ -37,10 +38,14 @@ class GrayscaleImage:
                               
     def show(self):
         imshow(self.data, cmap="gray")
-        show()
+        #show()
     
-    # size is of type float
+    def make_histogram(self):
+        return hist(self.data)
+        
+    # size is of type tuple of integers (DEFAULT = (50, 50))
     def resize(self, size):
+        print size
         self.data = imresize(self.data, size)
         
     def get_shape(self):

+ 2 - 2
src/LetterCropper.py

@@ -3,7 +3,7 @@ from Rectangle import Rectangle
 
 class LetterCropper:
 
-    def __init__(self, image, threshold = 0.9):
+    def __init__(self, threshold = 0.9):
         self.source_image = image
         self.threshold = threshold
         
@@ -31,4 +31,4 @@ class LetterCropper:
             min_y, 
             max_x - min_x ,
             max_y - min_y
-        )
+        )

+ 31 - 0
src/NormalizedCharacterImage.py

@@ -0,0 +1,31 @@
+from copy import deepcopy
+from GrayscaleImage import GrayscaleImage
+from LetterCropper import LetterCropper
+from GaussianFilter import GaussianFilter
+
+class NormalizedCharacterImage(GrayscaleImage):
+    
+    def __init__(self, image, size=(60, 40), blur=1.1, crop_threshold=0.9):
+        GrayscaleImage.__init__(self, data=deepcopy(image.data))
+        self.blur = blur
+        self.crop_threshold = crop_threshold
+        self.size = size
+        self.gausse_filter()
+        self.increase_contrast()
+        self.crop()
+        self.resize()
+
+    def increase_contrast(self):
+        self.data -= self.data.min()
+        self.data /= self.data.max()
+
+    def gausse_filter(self):    
+        filter = GaussianFilter(1.1)
+        filter.filter(self)
+        
+    def crop(self):
+        cropper = LetterCropper(self, 0.9)
+        self.data = cropper.get_cropped_letter().data
+
+    def resize(self):
+        self.resize(self.size)

+ 0 - 17
src/NormalizedImage.py

@@ -1,17 +0,0 @@
-from copy import deepcopy
-class NormalizedImage:
-    
-    DEFAULT_SIZE = 100.0
-    
-    def __init__(self, image, size=DEFAULT_SIZE):
-        self.source_image = image
-        self.size = size
-
-    def add_padding(self):
-        pass
-
-    # 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

+ 5 - 54
src/combined_test.py

@@ -1,61 +1,12 @@
 from GrayscaleImage import GrayscaleImage
-from LocalBinaryPatternizer import LocalBinaryPatternizer
-from LetterCropper import LetterCropper
-from matplotlib.pyplot import imshow, subplot, show, axis
-from NormalizedImage import NormalizedImage
-from GaussianFilter import GaussianFilter
+from NormalizedCharacterImage import NormalizedCharacterImage 
 
 # 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
+# 3. plot
 
-# Image is now an instance of class GrayscaleImage
-# GrayscaleImage has functions like resize, crop etc.
-image = GrayscaleImage("../images/test9.png")
-filter = GaussianFilter(1.4)
-
-image = filter.get_filtered_copy(image)
-
-# Crops image; param threshold is optional: LetterCropper(image, threshold=0.9)
-# image: GrayscaleImage, threshold: float
-
-cropper = LetterCropper(image, 0.7)
-cropped_letter = cropper.get_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()
-
-print resized.show()
-
-show()
-# Difference is noticable
-print resized.shape
-
-lbp = LocalBinaryPatternizer(resized)
-
-feature_vector = lbp.create_features_vector()
-print feature_vector
-feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
-        
-subplot(141)
-imshow(image.data, cmap='gray')
-
-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()
+image = GrayscaleImage("../images/test10.png")
+normalized_character_image = NormalizedCharacterImage(image)
+normalized_character_image.show()