nigel@ese.essex.ac.uk (Nigel S.H. Brooks) (07/07/89)
I'm working on a project to analyse finger prints and I need an algorithm to thin the lines down to single pixel width to aid recognition of the features. The print has already been processed to give a monochrome image. Any ideas? +--------------------------------------------------------------------------+ | |\ | _ _ _ _ Nigel S.H. Brooks | | | \ | | / |_ | Essex Electronics Centre | | | \| _|_ \_| |_ |_ Essex University, UK Email: nigel@ese.essex.ac.uk|
gors@well.UUCP (Gordon Stewart) (07/08/89)
In article <1269@servax0.essex.ac.uk> nigel@ese.UUCP (Nigel S.H. Brooks) writes: >I'm working on a project to analyse finger prints and I need >an algorithm to thin the lines down to single pixel width to >aid recognition of the features. > >The print has already been processed to give a monochrome >image. > >Any ideas? That's too bad -- that the image is already reduced to monochrome -- are you getting it via FAX, or something?? The reason that I say that, is -- If you have the image in gray scale, you can do feature analysis on lines and whorls that are LESS THAN A PIXEL WIDTH -- but if it's already reduced to monochrome (1 bit per pixel??) That's no longer possible. Almost any good book on image processing will have algorithms of line/edge enhancement. At that point, because of the nature of prints, some sort of syntactic pattern recognition algorithm with topological rules would be helpful. I'm not at all sure I'd like to help you any further -- my criminal friends would stop talking to me! -- {apple, pacbell, hplabs, ucbvax}!well!gors gors@well.sf.ca.us (Doolan) | (Meyer) | (Sierchio) | (Stewart)
james@rover.bsd.uchicago.edu (07/09/89)
In article <1269@servax0.essex.ac.uk>, nigel@ese.essex.ac.uk (Nigel S.H. Brooks) writes... >I'm working on a project to analyse finger prints and I need >an algorithm to thin the lines down to single pixel width to >aid recognition of the features. One possibility is to take an unsharp mask of the image: For each pixel, add a factor times the difference between the pixel value and that of its neighbors to a distance of r pixels away in all directions. R will be determined by the current line width. The resulting image will not be monochrome, but a threshold can be taken at which the most central lines are generally above. If the image is currently noisy, an appropriate high frequency mask or lowpass filter may be used first. James Balter james@rover.uchicago.edu "If the hat fits, slice it!"
dwig@b11.ingr.com (David Wiggins) (07/10/89)
In article <1269@servax0.essex.ac.uk>, nigel@ese.essex.ac.uk (Nigel S.H. Brooks) writes: > I'm working on a project to analyse finger prints and I need > an algorithm to thin the lines down to single pixel width to > aid recognition of the features. > > The print has already been processed to give a monochrome > image. > > Any ideas? How about: Paul C. K. Kwok, "A Thinning Algorithm By Contour Generation", Communications of the ACM, vol. 31 no. 11 (Nov. 1988), 1314-1324 Of the 29 references he lists, the most relevant seems to be: Moayer, B., and Fu., K. S., "A tree system approach for fingerprint pattern recognition", IEEE Trans. Comput. C-25, 3 (Mar. 1976), 262-275. Hope this helps. David P. Wiggins * Intergraph Corporation uunet!ingr!dwig * One Madison Industrial Park (205) 772-6365 * Huntsville, Alabama 35807-4201
adrianb@queets.stat.washington.edu (Adrian Baddeley) (07/10/89)
In article <1269@servax0.essex.ac.uk>, nigel@ese.essex.ac.uk (Nigel S.H. Brooks) writes: > ... an algorithm to thin the lines down to single pixel width Methods from J. Serra, Image Analysis and Mathematical Morphology, Academic Press 1982: (a) skeletonizing: use if lines are more than a few pixels thick and vary in thickness. Compute distance transform of background. (see any text e.g. Rosenfeld and Kak) Best use the (5,5,7) distance, i.e. distance between horizontal or vertical neighbours is 5 and between diagonal neighbours 7. If say d(x) = distance from pixel x to nearest background pixel, the skeleton consists of all pixels x which do not have a **neighbour** pixel y with d(y) > d(x) and d(y) - d(x) = distance from y to x. This should be a 1-pixel-wide line down the middle of your thick lines. (a) thinning: Use if your lines are only a few pixels thick and uniform in thickness. simple case: set any pixel to 0 when its 3x3 neighbourhood looks like 0 0 0 1 1 1 1 * 0 * 1 * or * 1 * or 1 1 0 etc... 1 1 1 0 0 0 1 * 0 (* = either 0 or 1 allowed). Iterate until no more changes occur. Both usually require tweaking to work well. ---- adrianb@castor.ms.washington.edu (until 21 august 1989) Adrian Baddeley, visiting Department of Statistics GN-22, University of Washington, Seattle WA 98195, USA. tel (U of W): +1 206 545-2617 / 543-7237