Commit 9719a9ad authored by unknown's avatar unknown

LocalBinaryPatternizer now creates histograms for all the cells in a 2d

array, but returns it as a 1d array of histograms
parent 60a05ec2
from Histogram import Histogram
from numpy import zeros, byte from numpy import zeros, byte
from math import ceil
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
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): def create_features_vector(self):
''' Walk around the pixels in clokwise order, shifting 1 bit less ''' 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 at each neighbour starting at 7 in the top-left corner. This gives a
8-bit feature number of a pixel''' 8-bit feature number of a pixel'''
for y, x, value in self.image: for y, x, value in self.image:
self.features[y, x] = \
(self.is_pixel_darker(y - 1, x - 1, value) << 7) \ 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 , value) << 6) \
| (self.is_pixel_darker(y - 1, x + 1, value) << 5) \ | (self.is_pixel_darker(y - 1, x + 1, value) << 5) \
| (self.is_pixel_darker(y , x + 1, value) << 4) \ | (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 + 1, value) << 3) \
| (self.is_pixel_darker(y + 1, x , value) << 2) \ | (self.is_pixel_darker(y + 1, x , value) << 2) \
| (self.is_pixel_darker(y + 1, x - 1, value) << 1) \ | (self.is_pixel_darker(y + 1, x - 1, value) << 1) \
| (self.is_pixel_darker(y , x - 1, value) << 0) | (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): 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
\ No newline at end of file
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]
\ No newline at end of file
from GrayscaleImage import GrayscaleImage 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, bar
from numpy import arange
image = GrayscaleImage("../images/test.png") image = GrayscaleImage("../images/test.png")
lbp = LocalBinaryPatternizer(image) lbp = LocalBinaryPatternizer(image)
feature_vector = lbp.create_features_vector() histograms = lbp.create_features_vector()
feature_vector /= 255 # Prepare for displaying -> 0 - 255 -> 0 - 1
subplot(121)
imshow(image.data, cmap='gray')
subplot(122) print histograms
imshow(feature_vector, cmap='gray') \ No newline at end of file
axis('off')
show()
\ 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