Commit 5903a6fc authored by Richard Torenvliet's avatar Richard Torenvliet

Made get_normalized_letter in NormalizedImage.py

parent 60a05ec2
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: ...@@ -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: ...@@ -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
\ No newline at end of file
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: ...@@ -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
\ No newline at end of file
from PIL import Image from copy import deepcopy
class NormalizedImage: class NormalizedImage:
DEFAULT_SIZE = (100, 200)
DEFAULT_SIZE = 100.0
def __init__(self, image, size):
self.letter = image def __init__(self, image, size=DEFAULT_SIZE):
self.source_image = image
if size: self.size = size
self.size = size
else:
self.size = self.DEFAULT_SIZE
self.add_padding()
self.resize()
def add_padding(self): def add_padding(self):
pass pass
def resize(self): # normalize img
return self.letter.resize(self.size, Image.NEAREST) 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
...@@ -2,21 +2,50 @@ from GrayscaleImage import GrayscaleImage ...@@ -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()
\ 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