[comp.graphics] Fingerprint enhancement

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