示例#1
0
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
示例#2
0
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")
示例#3
0
    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()
示例#4
0
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 ""
示例#5
0
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()