def extract_core_point_position(img, block_size, tolerance): im = Image.fromarray(np.array(img_as_ubyte(img))) im = im.convert("L") f = lambda x, y: 2 * x * y g = lambda x, y: x**2 - y**2 angles = utils.calculate_angles(im, block_size, f, g) angles = utils.smooth_angles(angles) singularities_positions = poincare.calculate_singularities( im, angles, tolerance, block_size) core_point_position = compute_core_point_position(singularities_positions) return core_point_position
if __name__ == "__main__": parser = argparse.ArgumentParser(description="Gabor filter applied") parser.add_argument("image", nargs=1, help="Path to image") parser.add_argument("block_size", nargs=1, help="Block size") parser.add_argument("--save", action='store_true', help="Save result image as src_image_enhanced.gif") args = parser.parse_args() im = Image.open(args.image[0]) im = im.convert("L") # covert to grayscale im.show() W = int(args.block_size[0]) f = lambda x, y: 2 * x * y g = lambda x, y: x**2 - y**2 angles = utils.calculate_angles(im, W, f, g) print "calculating orientation done" angles = utils.smooth_angles(angles) print "smoothing angles done" result = gabor(im, W, angles) result.show() if args.save: base_image_name = os.path.splitext(os.path.basename(args.image[0]))[0] im.save(base_image_name + "_enhanced.gif", "GIF")
for i in range(1, x / W - 1): for j in range(1, y / W - 1): box = (i * W, j * W, min(i * W + W, x), min(j * W + W, y)) freq_img.paste(freqs[i][j] * 255.0 * 1.2, box) return freq_img if __name__ == "__main__": parser = argparse.ArgumentParser(description="Image frequency") parser.add_argument("image", nargs=1, help = "Path to image") parser.add_argument("block_size", nargs=1, help = "Block size") parser.add_argument('--smooth', "-s", action='store_true', help = "Use Gauss for smoothing") args = parser.parse_args() im = Image.open(args.image[0]) im = im.convert("L") # covert to grayscale im.show() W = int(args.block_size[0]) f = lambda x, y: 2 * x * y g = lambda x, y: x ** 2 - y ** 2 angles = utils.calculate_angles(im, W, f, g) if args.smooth: angles = utils.smooth_angles(angles) freq_img = freq_img(im, W, angles) freq_img.show()
def main2(): # alignMinutias((2,8, 'loop'), [[40, 120, 'bip']]) parser = argparse.ArgumentParser( description= "Gabor, thinning, extract minutias, calculate poincare and align minutias." ) parser.add_argument("image", nargs=1, help="Path to image") # parser.add_argument("block_size", nargs=1, help = "Block size") parser.add_argument("tolerance", nargs=1, help="Tolerance for Poincare index") parser.add_argument("block_size", nargs=1, help="Blocksize") parser.add_argument( '--preprocess', "-p", action='store_true', help="Preprocess the image with: Gabor filtering and thinning") parser.add_argument('--smooth', "-s", action='store_true', help="Use Gauss for smoothing") parser.add_argument("--save", action='store_true', help="Save result image as src_image_enhanced.gif") args = parser.parse_args() imagepath = args.image[0] im = None #im = Image.open(args.image[0]) # im = Image.open("ppf-test_enhanced_thinned.gif") #im = im.convert("L") # covert to grayscale # im.show() W = int(args.block_size[0]) #W = 16 print "Block-size: ", W singularity_type = None f = lambda x, y: 2 * x * y g = lambda x, y: x**2 - y**2 #print "Gabor filter and thinning, pointcare, extract minutias, alignment, exporting minutias to file ..." print "image: ", os.path.splitext(imagepath) base_image_name = os.path.splitext(os.path.basename(imagepath))[0] image_enhanced_loc = os.path.splitext( imagepath)[0] + "_enhanced_thinned.gif" image_enhanced_minutiae_loc = os.path.splitext( imagepath)[0] + "_enhanced_thinned_minutiaes.png" image_enhanced_minutiae_aligned_loc = os.path.splitext( imagepath)[0] + "_enhanced_thinned_minutiaes_aligned.png" dumpfilename = os.path.splitext(imagepath)[0] + ".yaml" print "image enhanced: ", image_enhanced_loc # f['image'] if args.preprocess or os.path.isfile(image_enhanced_loc) == False: print "Enhanced image does not exists. Enhancing." print "Gabor filtering and thinning ..." im = Image.open(imagepath) im = im.convert("L") # covert to grayscale # gabor filter angles = utils.calculate_angles(im, W, f, g) print "calculating orientation done" angles = utils.smooth_angles(angles) print "smoothing angles done" im = gabor(im, W, angles) # im.show() # thinning im = make_thin(im) # im.show() if args.save: im.save(image_enhanced_loc, "GIF") if args.preprocess: im.close() return else: print "Processing enhanced image." if im is not None: im.close() im = Image.open(image_enhanced_loc) im = im.convert("L") # covert to grayscale # continue # get image bounds (maxx, maxy) = im.size bounds = (0, maxx, 0, maxy) print "bounds: ", bounds angles = utils.calculate_angles(im, W, f, g) if args.smooth: angles = utils.smooth_angles(angles) singularity_type = None result, cores = calculate_singularities(im, angles, int(args.tolerance[0]), W, singularity_type=singularity_type) print "cores: ", cores core = chooseCore(cores, W) print "Selected core: ", core # result.show() # align bounds with respect to the core # bounds2 = alignBounds(core, bounds) # calculate minutias im, minutiaes = calculate_minutiaes(im) im.show() print "minutias: ", minutiaes # plotAndSaveMinutiae(minutiaes, image_enhanced_minutiae_loc) plotAndSaveMinutiasPIL(minutiaes, image_enhanced_minutiae_loc, im.size) minutiaes = alignMinutias(core, minutiaes) # aligning print "aminutia: ", minutiaes # plotAndSaveMinutiae(minutiaes, image_enhanced_minutiae_aligned_loc) plotAndSaveMinutiasPIL(minutiaes, image_enhanced_minutiae_aligned_loc, im.size) des = {'minutiaes': minutiaes, 'core': core, 'bounds': bounds} with open(dumpfilename, 'wb') as handle: json.dump(des, handle) print ""
def main1(): # alignMinutias((2,8, 'loop'), [[40, 120, 'bip']]) parser = argparse.ArgumentParser( description= "Gabor, thinning, extract minutias, calculate poincare and align minutias." ) parser.add_argument("image", nargs=1, help="Path to image") # parser.add_argument("block_size", nargs=1, help = "Block size") parser.add_argument("tolerance", nargs=1, help="Tolerance for Poincare index") parser.add_argument("block_size", nargs=1, help="Blocksize") parser.add_argument( '--preprocess', "-p", action='store_true', help="Preprocess the image with: Gabor filtering and thinning") parser.add_argument('--smooth', "-s", action='store_true', help="Use Gauss for smoothing") parser.add_argument("--save", action='store_true', help="Save result image as src_image_enhanced.gif") args = parser.parse_args() #im = Image.open(args.image[0]) # im = Image.open("ppf-test_enhanced_thinned.gif") #im = im.convert("L") # covert to grayscale # im.show() W = int(args.block_size[0]) #W = 16 print "Block-size: ", W singularity_type = None f = lambda x, y: 2 * x * y g = lambda x, y: x**2 - y**2 files = [] for i in range(1, 4): for j in range(1, 4): if i < 10: finputminutia = '/Users/Admin/fvs/samples/DB3_B/10' + str( i) + '_' + str(j) + '.tif' else: finputminutia = '/Users/Admin/fvs/samples/DB3_B/1' + str( i) + '_' + str(j) + '.tif' files.append({'i': i, 'j': j, 'image': finputminutia}) ffirst_singularity = {} print "Gabor filter, thinning, pointcare, extract minutias, alignment, exporting minutias to file ..." for file in files: i = file['i'] j = file['j'] print "image: ", os.path.splitext(file['image']) base_image_name = os.path.splitext(os.path.basename(file['image']))[0] image_enhanced_loc = "/Users/Admin/fvs/samples/dumps2/" + base_image_name + "_enhanced.gif" image_enhanced_minutiae_loc = "/Users/Admin/fvs/samples/dumps2/" + base_image_name + "_enhanced_minutiaes.png" image_enhanced_minutiae_aligned_loc = "/Users/Admin/fvs/samples/dumps2/" + base_image_name + "_enhanced_minutiaes_aligned.png" print "image enhanced: ", image_enhanced_loc # f['image'] if args.preprocess or os.path.isfile(image_enhanced_loc) == False: print "Enhanced image does not exists. Enhancing." im = Image.open(file['image']) im = im.convert("L") # covert to grayscale # gabor filter angles = utils.calculate_angles(im, W, f, g) print "calculating orientation done" angles = utils.smooth_angles(angles) print "smoothing angles done" im = gabor(im, W, angles) # im.show() # thinning im = make_thin(im) # im.show() if args.save: im.save(image_enhanced_loc, "GIF") if args.preprocess: continue else: print "Processing enhanced image." im = Image.open(image_enhanced_loc) im = im.convert("L") # covert to grayscale # continue # get image bounds (maxx, maxy) = im.size bounds = (0, maxx, 0, maxy) print "bounds: ", bounds angles = utils.calculate_angles(im, W, f, g) if args.smooth: angles = utils.smooth_angles(angles) if i in ffirst_singularity: singularity_type = ffirst_singularity[i] else: singularity_type = None result, cores = calculate_singularities( im, angles, int(args.tolerance[0]), W, singularity_type=singularity_type) print "cores: ", cores core = chooseCore(cores, W) print "Selected core: ", core if j == 1: ffirst_singularity[i] = core[3] # result.show() # align bounds with respect to the core # bounds2 = alignBounds(core, bounds) # calculate minutias im, minutiaes = calculate_minutiaes(im) im.show() print "minutias: ", minutiaes # plotAndSaveMinutiae(minutiaes, image_enhanced_minutiae_loc) plotAndSaveMinutiasPIL(minutiaes, image_enhanced_minutiae_loc, im.size) minutiaes = alignMinutias(core, minutiaes) # aligning print "aminutia: ", minutiaes # plotAndSaveMinutiae(minutiaes, image_enhanced_minutiae_aligned_loc) plotAndSaveMinutiasPIL(minutiaes, image_enhanced_minutiae_aligned_loc, im.size) des = {'minutiaes': minutiaes, 'core': core, 'bounds': bounds} print os.path.splitext(file['image'])[0] dumpfilename = "/Users/Admin/fvs/samples/dumps2/" + os.path.basename( file['image']) + ".yaml" with open(dumpfilename, 'wb') as handle: json.dump(des, handle) print "" if im is not None: im.close()