Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
licenseplates
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
Taddeüs Kroes
licenseplates
Commits
093ff345
Commit
093ff345
authored
13 years ago
by
Taddeüs Kroes
Browse files
Options
Downloads
Patches
Plain Diff
Spell- and sentence-checked plan.tex.
parent
fb42b7ee
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
.gitignore
+1
-0
1 addition, 0 deletions
.gitignore
docs/plan.tex
+59
-52
59 additions, 52 deletions
docs/plan.tex
with
60 additions
and
52 deletions
.gitignore
+
1
−
0
View file @
093ff345
...
...
@@ -6,3 +6,4 @@
*.log
*.synctex.gz
*.toc
*.out
This diff is collapsed.
Click to expand it.
docs/plan.tex
+
59
−
52
View file @
093ff345
\documentclass
[a4paper]
{
article
}
\usepackage
{
hyperref
}
\title
{
Using local binary patterns to read license plates in photographs
}
\date
{
November 17th, 2011
}
...
...
@@ -22,30 +24,31 @@ Fabi\'en Tesselaar
\section
{
Problem description
}
l
icense plates are used for uniquely identifying motorized vehicles and are
made to be read by humans from great distances and in all kinds of weather
L
icense plates are used for uniquely identifying motorized vehicles and are
made to be read by humans from great distances and in all kinds of weather
conditions.
Reading license plates with a computer is much more difficult. Our dataset
contains photographs f
rom
license plates from
all sorts of
angles and distance.
M
ean
ing
that not only do we have to implement a method to read the actual
characters, but also have to determine the location of the license plate and
its
transformation due to different angles.
We will focus our research
i
n reading the transformed characters o
f
the
li
s
en
c
e plate, o
n
which we know where the letters are located. This is because
Microsoft recently published a new and effective method to find the location of
contains photographs
o
f license plates from
various
angles and distance
s
.
This
m
ean
s
that not only do we have to implement a method to read the actual
characters, but also have to determine the location of the license plate and
its
transformation due to different angles.
We will focus our research
o
n reading the transformed characters o
n
the
li
c
en
s
e plate, o
f
which we know where the letters are located. This is because
Microsoft recently published a new and effective method to find the location of
text in an image.
In short our program must be able to do the following:
\begin{enumerate}
\item
Use perspective transformation to obtain an upfront view of license plate.
\item
Reduce noise where possible.
\item
Extract each character using the location points in the info file.
\item
Transform character to a normal form.
\item
Create a local binary pattern histogram vector.
\item
Match the found vector with the learning set.
\item
Use perspective transformation to obtain an upfront view of license
plate.
\item
Reduce noise where possible.
\item
Extract each character using the location points in the info file.
\item
Transform character to a normal form.
\item
Create a local binary pattern histogram vector.
\item
Match the found vector with a learning set.
\end{enumerate}
\section
{
Solution
}
...
...
@@ -55,66 +58,70 @@ come in a few steps as well.
\subsection
{
Transformation
}
A simple perspective transformation will be sufficient to transform and resize
the plate to a normalized format.
Corner
s of license plates
can be found
in the
data
files
.
A simple perspective transformation will be sufficient to transform and resize
the plate to a normalized format.
The corner position
s of license plates in the
data
set are supplied together with the dataset
.
\subsection
{
Reducing noise
}
Small amounts of noise will probably be suppressed by usage of a Gaussian
filter. A real problem occurs in very dirty license plates, where branches and
dirt over a letter could radically change the local binary pattern. A question
we can ask ourselves here, is whether we want to concentrate ourselves on
these exceptional cases. By law, license plates have to be readable. Therefore,
we will first direct our attention at getting a higher score in the 'regular'
test set before addressing these cases. Looking at how LBP work, there is a good
change that our features are, to a certain degree, indifferent to noise on the
plates.
we can ask ourselves here, is whether we want to concentrate ourselves on these
exceptional cases. By law, license plates have to be readable. Therefore, we
will first direct our attention at getting a higher score in the 'regular' test
set before addressing these cases. Considered the fact that the LBP algorithm
divides a letter into a lot of cells, there is a good change that a great
number of cells will still match the learning set, and thus still return the
correct character as a best match. Therefore, we expect the algorithm to be
very robust when dealing with noisy images.
\subsection
{
Extracting a letter
}
Because we are already given the locations of the characters, we only need to
transform those locations using the same perspective transform used to
to
Because we are already given the locations of the characters, we only need to
transform those locations using the same perspective transform
ation
used to
create a front facing license plate.
\begin{enumerate}
\item
Crop the image in such a way that the character precisely fits the image.
\item
Scale the image to a standard height.
\item
Extend the image on either the left or right side to a certain width.
\item
Crop the image in such a way that the character precisely fits the
image.
\item
Scale the image to a standard height.
\item
Extend the image on either the left or right side to a certain width.
\end{enumerate}
The resulting image will always have the same size, the character contained
will
always be of the same height, and the character will alway be positioned
at
either the left of right side of the image.
The resulting image will always have the same size, the character contained
will
always be of the same height, and the character will alway be positioned
at
either the left of right side of the image.
\subsection
{
Local binary patterns
}
Once we have separate digits and characters, we intend to use Local Binary
Patterns to determine what character or digit we are dealing with. Local Binary
Patters are a way to classify a texture, because it can create a histogram
which
describes the distribution of line directions in the image. Since letters
on a
license plate are mainly build up of straight lines and simple curves, it
should
theoretically be possible to identify these using Local Binary Patterns.
Once we have separate digits and characters, we intend to use Local Binary
Patterns to determine what character or digit we are dealing with. Local Binary
Patters are a way to classify a texture, because it can create a histogram
which
describes the distribution of line directions in the image. Since letters
on a
license plate are mainly build up of straight lines and simple curves, it
should
theoretically be possible to identify these using Local Binary Patterns.
This will actually be the first thing we implement, since it is not known if it
will give the desired results. Our first goal is therefore a proof of concept
that using LBP's is a good way to determine which character we are dealing with.
This will actually be the first thing we implement, since it is not known if it
will give the desired results. Our first goal is therefore a proof of concept
that using LBP's is a good way to determine which character we are dealing
with.
Important to note is that by now, we have transformed this letter to a standard
size, which eliminates the need to normalize the histograms generated by the
Important to note is that by now, we have transformed this letter to a standard
size, which eliminates the need to normalize the histograms generated by the
algorithm.
Once we have a Local Binary Pattern of the character, we use a Support Vector
Machine to determine what letter we are dealing with. For this, the feature
vector of the image will be a concatenation of the histograms of the cells in
Once we have a Local Binary Pattern of the character, we use a Support Vector
Machine to determine what letter we are dealing with. For this, the feature
vector of the image will be a concatenation of the histograms of the cells in
the image.
\subsection
{
Matching the database
}
In order to
determin
e what character we are dealing with, we use a S
VM, as said
before. To prevent us from having to teach this SVM each time we start the
program, we are going to save the SVM to a pickle object, which packs an object
in Python to a certain data format, so it can be unpacked somewhere else, or, in
o
ur
case, when executing the program to identify a character
.
In order to
recogniz
e what character we are dealing with, we use a S
upport
Vector Machine. The SVM can be trained with a subsection of the given dataset
called the ''Learning set''. Once trained, the entire classifier can be saved
as a Pickle object
\footnote
{
See
\
ur
l
{
http://docs.python.org/library/pickle.html
}}
for later usage
.
\end{document}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment