Commit c3c35032 authored by Richard Torenvliet's avatar Richard Torenvliet

worked on letter cropper

parent accab14c
...@@ -30,10 +30,15 @@ class GaussianFilter: ...@@ -30,10 +30,15 @@ class GaussianFilter:
image = convolve1d(image.data, kernel, axis=0, mode='nearest') image = convolve1d(image.data, kernel, axis=0, mode='nearest')
return GrayscaleImage(None, convolve1d(image, kernel, axis=1, 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): def get_scale(self):
return self.scale return self.scale
def set_scale(self, scale): def set_scale(self, scale):
self.scale = float(scale) self.scale = float(scale)
scale = property(get_scale, set_scale) scale = property(get_scale, set_scale)
\ No newline at end of file
from pylab import imshow, imread, show from pylab import imshow, imread, show
from scipy.misc import imresize from scipy.misc import imresize
from matplotlib.pyplot import hist
class GrayscaleImage: class GrayscaleImage:
...@@ -37,10 +38,14 @@ class GrayscaleImage: ...@@ -37,10 +38,14 @@ class GrayscaleImage:
def show(self): def show(self):
imshow(self.data, cmap="gray") 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): def resize(self, size):
print size
self.data = imresize(self.data, size) self.data = imresize(self.data, size)
def get_shape(self): def get_shape(self):
......
...@@ -3,7 +3,7 @@ from Rectangle import Rectangle ...@@ -3,7 +3,7 @@ from Rectangle import Rectangle
class LetterCropper: class LetterCropper:
def __init__(self, image, threshold = 0.9): def __init__(self, threshold = 0.9):
self.source_image = image self.source_image = image
self.threshold = threshold self.threshold = threshold
...@@ -31,4 +31,4 @@ class LetterCropper: ...@@ -31,4 +31,4 @@ class LetterCropper:
min_y, min_y,
max_x - min_x , max_x - min_x ,
max_y - min_y max_y - min_y
) )
\ No newline at end of file
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)
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
from GrayscaleImage import GrayscaleImage from GrayscaleImage import GrayscaleImage
from LocalBinaryPatternizer import LocalBinaryPatternizer from NormalizedCharacterImage import NormalizedCharacterImage
from LetterCropper import LetterCropper
from matplotlib.pyplot import imshow, subplot, show, axis
from NormalizedImage import NormalizedImage
from GaussianFilter import GaussianFilter
# Comment added by Richard Torenvliet # Comment added by Richard Torenvliet
# Steps in this test files are # Steps in this test files are
# 1. crop image # 1. crop image
# 2. resize to default hight (in future also to width) # 2. resize to default hight (in future also to width)
# 3. preform LBP # 3. plot
# 4. construct feature vector
# 5. plot
# Image is now an instance of class GrayscaleImage image = GrayscaleImage("../images/test10.png")
# GrayscaleImage has functions like resize, crop etc. normalized_character_image = NormalizedCharacterImage(image)
image = GrayscaleImage("../images/test9.png") normalized_character_image.show()
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()
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