Commit c9a94c90 by André Anjos 💬

Speeds-up the evaluation of vein probabilities

parent a63d2044
 ... ... @@ -217,7 +217,7 @@ class MaximumCurvature (Extractor): ''' V = numpy.zeros_like(k) V = numpy.zeros(k.shape[:2], dtype='float64') def _prob_1d(a): '''Finds "vein probabilities" in a 1-D signal ... ... @@ -289,17 +289,17 @@ class MaximumCurvature (Extractor): # Horizontal direction for index in range(k.shape[0]): V[index,:,0] += _prob_1d(k[index,:,0]) V[index,:] += _prob_1d(k[index,:,0]) # Vertical direction for index in range(k.shape[1]): V[:,index,1] += _prob_1d(k[:,index,1]) V[:,index] += _prob_1d(k[:,index,1]) # Direction: 45 degrees (\) curv = k[:,:,2] i,j = numpy.indices(curv.shape) for index in range(-curv.shape[0]+1, curv.shape[1]): V[i==(j-index),2] += _prob_1d(curv.diagonal(index)) V[i==(j-index)] += _prob_1d(curv.diagonal(index)) # Direction: -45 degrees (/) # NOTE: due to the way the access to the diagonals are implemented, in this ... ... @@ -308,7 +308,7 @@ class MaximumCurvature (Extractor): curv = numpy.flipud(k[:,:,3]) #required so we get "/" diagonals correctly Vud = numpy.flipud(V) #match above inversion for index in reversed(range(curv.shape[1]-1, -curv.shape[0], -1)): Vud[i==(j-index),3] += _prob_1d(curv.diagonal(index)) Vud[i==(j-index)] += _prob_1d(curv.diagonal(index)) return V ... ... @@ -472,36 +472,36 @@ class MaximumCurvature (Extractor): finger_image = image[0] finger_mask = image[1] import time start = time.time() #import time #start = time.time() kappa = self.detect_valleys(finger_image, finger_mask) #self._view_four(kappa, "Valley Detectors - $\kappa$") print('filtering took %.2f seconds' % (time.time() - start)) start = time.time() #print('filtering took %.2f seconds' % (time.time() - start)) #start = time.time() V = self.eval_vein_probabilities(kappa) #self._view_four(V, "Center Probabilities - $V_i$") #self._view_single(V.sum(axis=2), "Accumulated Probabilities - V") print('probabilities took %.2f seconds' % (time.time() - start)) start = time.time() #print('probabilities took %.2f seconds' % (time.time() - start)) #start = time.time() Cd = self.connect_centres(V.sum(axis=2)) Cd = self.connect_centres(V) #self._view_four(Cd, "Connected Centers - $C_{di}$") #self._view_single(numpy.amax(Cd, axis=2), "Connected Centers - G") print('connections took %.2f seconds' % (time.time() - start)) start = time.time() #print('connections took %.2f seconds' % (time.time() - start)) #start = time.time() retval = self.binarise(numpy.amax(Cd, axis=2)) #self._view_single(retval, "Final Binarised Image") print('binarization took %.2f seconds' % (time.time() - start)) #print('binarization took %.2f seconds' % (time.time() - start)) return retval
 ... ... @@ -86,8 +86,7 @@ def test_max_curvature(): MC = MaximumCurvature(3) #value used to create references kappa = MC.detect_valleys(image, mask) V = MC.eval_vein_probabilities(kappa) Vt = V.sum(axis=2) Vt = MC.eval_vein_probabilities(kappa) Cd = MC.connect_centres(Vt) G = numpy.amax(Cd, axis=2) bina = MC.binarise(G) ... ...
 ... ... @@ -32,8 +32,7 @@ from bob.bio.vein.extractor.MaximumCurvature import MaximumCurvature MC = MaximumCurvature(3) kappa = MC.detect_valleys(image, region) #OK V = MC.eval_vein_probabilities(kappa) #OK Vt = V.sum(axis=2) #OK Vt = MC.eval_vein_probabilities(kappa) #OK Cd = MC.connect_centres(Vt) #OK G = numpy.amax(Cd, axis=2) #OK ... ... @@ -42,9 +41,6 @@ for k in range(4): print('Comparing kappa[%d]: %s' % (k, numpy.abs(kappa[...,k]-kappa_matlab[...,k]).sum())) for k in range(4): print('Comparing V[%d]: %s' % (k, numpy.abs(V[...,k]-V_matlab[...,k]).sum())) print('Comparing Vt: %s' % numpy.abs(Vt-Vt_matlab).sum()) for k in range(4): ... ...
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!