Hello, I am trying to make OCR algorithm for incomplete numbers. First step should be to reduce image to skeleton. This is done fine with Matlab function.
I have troubles at prunning stage i have tried this approach: http://www.mathworks.com/matlabcentral/answers/88284-remove-the-spurious-edge-of-skeleton
But it isn't reliable enough. and i can't run it twice because it would reduce image too much.
Which is way too complicated for me since i am under time pressure and this algorithm can't handle loops.
Are there any other ways already implemented?
I have to reduce skeleton to features which would consist of Branch points, end points and a few points i will describe.

댓글 수: 4

Image Analyst
Image Analyst 2015년 5월 13일
Radek, please attach your binary image, and your skeletonization of it so we can see what you're talking about.
Radek
Radek 2015년 5월 13일
I am sorry for not attaching it the first time.
This is one of the usual scenarios:
On the skeleton are few branchpoints. Algorithm i am refering to removes "hair".
in the second image you can notice that there are only three branches. The shortest one is the matter of the subject - it is redundant. This is almost perfect image, so with blurry edges there might be much more of these branches. Even bigger letters mean more troubles with this.
Radek
Radek 2015년 5월 13일
Thank you very much, I appreciate you time and effort.
Radek
Radek 2015년 5월 13일
And to make myself sure, I rather add original image

댓글을 달려면 로그인하십시오.

 채택된 답변

Brett Shoelson
Brett Shoelson 2015년 5월 15일
편집: Brett Shoelson 2015년 5월 18일

3 개 추천

Hi Radek, I have some thoughts to share that might be useful. First, recognize that you get different output from infinite thinning than from infinite skeletonization. (bwmorph(bw, 'skeleton', Inf) vs bwmorph(bw, 'thin', Inf) ), and that the latter might give you a better starting point for your training. (You might not even have spurs to worry about.)
Second, regardless of which thinning approach you start with, if you calculate a bwdistgeodesic transform on your thinned bw image--using a mask that is true at all of the endpoints and false elsewhere--the longest constrained path will be the one that contains the maximum value in transformed image. You can reconstruct that spur-less path by tracing along that path, keeping only largest neighbors. (Spurs will necessarily have smaller distance values.)
I have attached a bit of code that will recreate that path from the original binary image. It runs (including the thinning) on the screen capture of your image of a "one" in about 2 msec.
Cheers, Brett

댓글 수: 1

Radek
Radek 2015년 6월 1일
Hi Brett, thank you very much for your cooperation. I tried to use your method, which is very good for simple characters as the one above, but when i used it for looped numbers (0,6,4,8,9), there is selected only part of the loop like this:
Often it is also confused by short distance between two brachpoints like this:
I am also posting original pictures for your consideration.
Are there any ways i can change this method to solve these issues?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Brett Shoelson
Brett Shoelson 2015년 6월 5일

0 개 추천

Radek: yes, the longest-constrained-path approach I gave you is indeed confounded by loops. On the other hand, did you try infinite thinning instead of infinite skeletonization? I think it might just give you what you're looking for without any subsequent morphological manipulations. Brett

댓글 수: 1

Radek
Radek 2015년 7월 22일
Thank you Brett! Your solution was in the end what i was looking for.

댓글을 달려면 로그인하십시오.

질문:

2015년 5월 13일

댓글:

2015년 7월 22일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by