What are good algorithms for vehicle license plate detection? [closed]
Background
For my final project at university, I'm developing a vehicle license plate detection application. I consider myself an intermediate programmer, however my mathematics knowledge lacks anything above secondary school, which makes producing the right formulas harder than it probably should be.
I've spend a good amount of time looking up academic papers such as:
- Detecting Vehicle License Plates in Images
- Robust License Plate Detection using Image Saliency
- Local Enhancement of Car Image for License Plate Detection
When it comes to the math, I'm lost. Due to this testing various graphic images proved productive, for example:
to
However this approach only worked to that particular image, and if the techniques were applied to different images, I'm sure a poorer conversion would occur. I've read about a formula called the "bottom hat morphology transform", which does the following:
Basically, the trans- formation keeps all the dark details of the picture, and eliminates everything else (including bigger dark regions and light regions).
I can't find much information on this, however the image within the documentation near the end of the report shows its effectiveness.
Other constraints
- Developing in C#
- Confining the project to UK registration plates only
- I can choose the images to convert as a demonstration
Question
I need advice on what transformation techniques I should focus on developing, and what algorithms can help me.
EDIT: New information present on Continued - Vehicle License Plate Detection
Solution 1:
There are a number of approaches you can take but the first strategy that pops into mind is to:
- Discovery/research: Identify the set of colors and fonts that you may need to identify. If your sample picture is representative of most British plates then your job is made easier. E.g. Simple, singular font and black lettering on a white background
- Code: Attempt to identify a rectangular region of an image where the colors are predominantly white and black. This is not a terribly math-heavy problem and it should give you the license plate region to concentrate on.
- Code: Do some clean up on your subregion such conversion to pure black and white (monochrome) and perhaps scaling/shifting into a nice, tight rectangle.
- Use API: Next employ an existing OCR (optical character recognition) algorithm on your sub-selected image region so see if you can read the text.
Like I said, this is one strategy of many but it comes to mind as one requiring the least amount of heavy math... that is if you can find an OCR implementation that will work for you.
Solution 2:
I did a similar project a few years ago in Java, first I applied the Sobel operator and then masked all the image with an image of a plate (with the Sobel operator applied too). The region of maximum coincidence is where the plate is. Then apply an OCR to the selected region to get the number.
Solution 3:
Here's how I suggest you should do this task. Read my detailed answer here.
- Convert to Grayscale.
- Gaussian Blur with 3x3 or 5x5 filter.
-
Apply Sobel Filter to find vertical edges.
Sobel(gray, dst, -1, 1, 0)
- Threshold the resultant image to get a binary image.
- Apply a morphological close operation using suitable structuring element.
- Find contours of the resulting image.
- Find
minAreaRect
of each contour. Select rectangles based on aspect ratio and minimum and maximum area. - For each selected contour, find edge density. Set a threshold for edge density and choose the rectangles breaching that threshold as possible plate regions.
- Few rectangles will remain after this. You can filter them based on orientation or any criteria you deem suitable.
- Clip these detected rectangular portions from an image after
adaptiveThreshold
of the original (grayscale) image and apply OCR.
Solution 4:
UK already has a system that does that. I recall seeing a TV show in which they demonstrated they can find a car within London within 10 minutes (assuming they know the number and the car is driving around) Just reading Wikipedia gives you the pointers you need to start thinking about the issue: http://en.wikipedia.org/wiki/Automatic_number_plate_recognition