Skeleton prunning for OCR
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Radek
am 13 Mai 2015
Kommentiert: Radek
am 22 Jul. 2015
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.
I have also tried http://www.ehu.eus/ccwintco/index.php?title=Skeletonization,_skeleton_pruning_and_simple_skeleton_graph_construction_example_in_Matlab
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 Kommentare
Akzeptierte Antwort
Brett Shoelson
am 15 Mai 2015
Bearbeitet: Brett Shoelson
am 18 Mai 2015
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
Weitere Antworten (1)
Brett Shoelson
am 5 Jun. 2015
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
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!