Commit ff3d096e authored by Richard Torenvliet's avatar Richard Torenvliet

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

Conflicts:
	src/LocalBinaryPatternizer.py
parents 5903a6fc 9719a9ad
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]
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()
\ No newline at end of file
print histograms
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment