Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract lined table from scanned document opencv python

Tags:

I want to extract the information from a scanned table and store it a csv. Right now my table extraction algorithm does the following steps.

  1. Apply skew correction
  2. Apply a gaussian filter for denoising.
  3. Do a binarization using Otsu thresholding
  4. Do a morphological opening.
  5. Canny egde detection
  6. Do a hough transform to obtain lines of table.
  7. Remove duplicate lines( same lines in the range of 10 pixels)
  8. filter the horizontal and vertical lines using slope of line(slope should be less than +/-5 degree for horizontal and normal of verticals).

This algorithm is working fine for digital born pdfs and most of the scanned documents. But, Some of the documents have a noisy table and thus its not identifying the lines correctly.

Here is a sample image in which my algorithm fails.

raw image

These are the operations I am doing on this table. 1.Gaussian blur

Gaussian blur

2.Otsu thresholding

Otsu thresholding

3.Morphological opening

Morphological opening

4.Canny edge detection

Canny edge detection

5.filtered lines,as you can see the lines are clearly not identified correctly.

filtered lines,as you can see the lines are clearly not identified correctly.

Can anyone please suggest better method for extracting horizontal and vertical lines from this kind of less quality scans.

Thanks in advance!!

like image 795
Sreekiran A R Avatar asked Mar 21 '19 08:03

Sreekiran A R


1 Answers

I found a perfect solution in this blog. https://medium.com/coinmonks/a-box-detection-algorithm-for-any-image-containing-boxes-756c15d7ed26

Here,We are doing morphological transformations using a vertical kernel to detect vetical lines and horizontal kernel to detect horizontal lines and then combining them to get all the required lines.

Vertical lines Vertical lines

Horizontal lines Horizontal lines

required output required output

like image 94
Sreekiran A R Avatar answered Oct 02 '22 06:10

Sreekiran A R