Преглед изворни кода

Merge branch 'master' of github.com:taddeus/licenseplates

Conflicts:
	src/LocalBinaryPatternizer.py
Richard Torenvliet пре 14 година
родитељ
комит
ff3d096e27
2 измењених фајлова са 42 додато и 24 уклоњено
  1. 38 13
      src/LocalBinaryPatternizer.py
  2. 4 11
      src/LocalBinaryPatternizerTest.py

+ 38 - 13
src/LocalBinaryPatternizer.py

@@ -1,28 +1,53 @@
+from Histogram import Histogram
 from numpy import zeros, byte
+from math import ceil
 
 class LocalBinaryPatternizer:
-
-    def __init__(self, image, cell_size = 16):
+        
+    def __init__(self, image, cell_size=16):
         self.cell_size = cell_size
         self.image = image
-        self.features = zeros(self.image.shape)
+        self.setup_histograms()
+
         
+    def setup_histograms(self):
+        cells_in_width = int(ceil(self.image.width / float(self.cell_size)))
+        cells_in_height = int(ceil(self.image.height / float(self.cell_size)))
+        self.features = []
+        for i in xrange(cells_in_height):
+            self.features.append([])
+            for j in xrange(cells_in_width):
+                self.features[i].append(Histogram(256,0,256))
+
+                
     def create_features_vector(self):
         ''' Walk around the pixels in clokwise order, shifting 1 bit less
             at each neighbour starting at 7 in the top-left corner. This gives a
             8-bit feature number of a pixel'''
         for y, x, value in self.image:
-            self.features[y, x] = \
-                  (self.is_pixel_darker(y - 1, x - 1, value) << 7) \
-                | (self.is_pixel_darker(y - 1, x    , value) << 6) \
-                | (self.is_pixel_darker(y - 1, x + 1, value) << 5) \
-                | (self.is_pixel_darker(y    , x + 1, value) << 4) \
-                | (self.is_pixel_darker(y + 1, x + 1, value) << 3) \
-                | (self.is_pixel_darker(y + 1, x    , value) << 2) \
-                | (self.is_pixel_darker(y + 1, x - 1, value) << 1) \
-                | (self.is_pixel_darker(y    , x - 1, value) << 0)
+            
+            pattern = (self.is_pixel_darker(y - 1, x - 1, value) << 7) \
+                    | (self.is_pixel_darker(y - 1, x    , value) << 6) \
+                    | (self.is_pixel_darker(y - 1, x + 1, value) << 5) \
+                    | (self.is_pixel_darker(y    , x + 1, value) << 4) \
+                    | (self.is_pixel_darker(y + 1, x + 1, value) << 3) \
+                    | (self.is_pixel_darker(y + 1, x    , value) << 2) \
+                    | (self.is_pixel_darker(y + 1, x - 1, value) << 1) \
+                    | (self.is_pixel_darker(y    , x - 1, value) << 0)
+                    
+            cy, cx = self.get_cell_index(y, x)
+            self.features[cy][cx].add(pattern)
 
-        return self.features
+        return self.get_features_as_array()
+    
     
     def is_pixel_darker(self, y, x, value):
         return self.image.in_bounds(y, x) and self.image[y, x] > value
+        
+        
+    def get_cell_index(self, y, x):
+        return (y / self.cell_size, x / self.cell_size)
+        
+        
+    def get_features_as_array(self):
+        return [item for sublist in self.features for item in sublist]

+ 4 - 11
src/LocalBinaryPatternizerTest.py

@@ -1,19 +1,12 @@
 from GrayscaleImage import GrayscaleImage
 from LocalBinaryPatternizer import LocalBinaryPatternizer
 from LetterCropper import LetterCropper
-from matplotlib.pyplot import imshow, subplot, show, axis
+from matplotlib.pyplot import imshow, subplot, show, axis, bar
+from numpy import arange
 
 image = GrayscaleImage("../images/test.png")
 
 lbp = LocalBinaryPatternizer(image)
-feature_vector = lbp.create_features_vector()
-feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
-        
-subplot(121)
-imshow(image.data, cmap='gray')
+histograms = lbp.create_features_vector()
 
-subplot(122)
-imshow(feature_vector, cmap='gray')
-
-axis('off')
-show()
+print histograms