def process_FVC_markup_from_minutiae(
        pathname,
        data_path='/home/kaicao/Research/AutomatedLatentRecognition/Data/minutiae_cylinder/',
        num_channels=12):
    mat_files = glob.glob(pathname + '*.mat')
    mat_files.sort()
    for i, mat_file in enumerate(mat_files):
        fname = os.path.basename(mat_file)
        print i, fname
        x = loadmat(mat_file)
        img = x['img']
        h, w = img.shape
        ROI = np.ones((h, w))
        img, ROI, minutiae_cylinder = extract_minutiae_cylinder(
            img, x['minutiae'], ROI)

        img = LP.local_constrast_enhancement(img)
        img = (img + 1) * 128
        img[img > 255] = 255
        img = np.uint8(img)
        if num_channels < 3:
            minutiae_cylinder = (minutiae_cylinder + 1.0) / 2.0
            minutiae_cylinder[minutiae_cylinder > 1] = 1.
            minutiae_cylinder[minutiae_cylinder < 0] = 0.
            minutiae_cylinder = np.uint8(minutiae_cylinder * 255)
        else:
            minutiae_cylinder[minutiae_cylinder > 1] = 1
            minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

        matrix = np.concatenate((np.expand_dims(
            img, axis=2), np.expand_dims(ROI, axis=2), minutiae_cylinder), 2)
        outfile = data_path + fname + '.npy'
        np.save(outfile, matrix)
Exemple #2
0
def compare_AEM_with_MMM(model_path, img_path='/Data/Latent/NISTSD27/image/',
                         output_path='/AutomatedLatentRecognition/Results/minutiae/NISTSD27_latents_Contrast/',
                         minu_path='/Data/Latent/NISTSD27/ManMinu', processing=None, thr=0.01):
    minu_model = ImportGraph(model_path)

    img_files = glob.glob(img_path + '*.bmp')
    img_files.sort()

    manu_files = glob.glob(minu_path + '*.txt')
    manu_files.sort()
    for i, img_file in enumerate(img_files):
        img = misc.imread(img_file, mode='L')
        if processing == 'contrast':
            img = LP.local_constrast_enhancement(img)
        elif processing == 'STFT':
            img = LP.STFT(img)
        elif processing == 'texture':
            img = LP.FastCartoonTexture(img)
        elif processing == 'texture_STFT':
            img = LP.FastCartoonTexture(img)
            img = LP.STFT(img)
        mnt = minu_model.run_whole_image(img, minu_thr=thr)
        img_name = os.path.basename(img_file)
        fname = output_path + os.path.splitext(img_name)[0] + '_minu.jpeg'

        minutiae_set = []
        minutiae_set.append(mnt)

        input_minu = np.loadtxt(manu_files[i])
        input_minu[:, 2] = input_minu[:, 2] / 180.0 * np.pi
        minutiae_set.append(input_minu)
        print i
        show.show_minutiae_sets(img, minutiae_set, mask=None, block=False, fname=fname)
        print fname
Exemple #3
0
def get_quality_map_intensity(img):
    img = img.astype(np.float32)
    nimg = preprocessing.local_constrast_enhancement(img)

    gy = np.gradient(nimg, axis=0)
    gx = np.gradient(nimg, axis=1)

    mag = np.abs(gx) + np.abs(gy)
    mag = cv2.GaussianBlur(mag, (21, 21), 7)

    mag = mag[::8, ::8]
    mask = mag > 0.3 * 127.5
    mask = mask.astype(np.uint8)
    kernel = np.ones((5, 5), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    mask = cv2.resize(mask, (0, 0), fx=8, fy=8)

    return mask
Exemple #4
0
def get_quality_map_intensity(img):
    img = img.astype(np.float32)
    nimg = preprocessing.local_constrast_enhancement(img)

    gy = np.gradient(nimg, axis=0)
    gx = np.gradient(nimg, axis=1)

    mag = np.abs(gx) + np.abs(gy)
    sigma = 5
    #mag[mag>1] = 1
    mag = cv2.GaussianBlur(mag, (21, 21), 7)

    mask = mag > 0.25 * 127.5
    mask = mask.astype(np.uint8)
    kernel = np.ones((20, 20), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

    # TODO:  remove small area

    #plt.imshow(mask, cmap='gray')
    #plt.show()
    return mask
Exemple #5
0
    def feature_extraction_single_rolled(self,
                                         img_file,
                                         output_path=None,
                                         ppi=500):
        block_size = 16

        if not os.path.exists(img_file):
            return None
        img = io.imread(img_file, s_grey=True)
        if ppi != 500:
            img = cv2.resize(img, (0, 0), fx=500.0 / ppi, fy=500.0 / ppi)

        img = preprocessing.adjust_image_size(img, block_size)
        if len(img.shape) > 2:
            img = rgb2gray(img)
        h, w = img.shape
        start = timeit.default_timer()
        mask = get_maps.get_quality_map_intensity(img)
        stop = timeit.default_timer()
        print('time for cropping : %f' % (stop - start))
        start = timeit.default_timer()
        contrast_img = preprocessing.local_constrast_enhancement(img)
        mnt = self.minu_model.run_whole_image(contrast_img, minu_thr=0.1)
        stop = timeit.default_timer()
        minu_time = stop - start
        print('time for minutiae : %f' % (stop - start))

        name = os.path.basename(img_file)
        show.show_minutiae(img, mnt, block=True)
        return None

        start = timeit.default_timer()
        des = descriptor.minutiae_descriptor_extraction(
            img,
            mnt,
            self.patch_types,
            self.des_models,
            self.patchIndexV,
            batch_size=256,
            patch_size=self.patch_size)
        stop = timeit.default_timer()
        print('time for descriptor : %f' % (stop - start))

        dir_map, _ = get_maps.get_maps_STFT(img,
                                            patch_size=64,
                                            block_size=block_size,
                                            preprocess=True)

        blkH = h // block_size
        blkW = w // block_size

        minu_template = template.MinuTemplate(h=h,
                                              w=w,
                                              blkH=blkH,
                                              blkW=blkW,
                                              minutiae=mnt,
                                              des=des,
                                              oimg=dir_map,
                                              mask=mask)

        rolled_template = template.Template()
        rolled_template.add_minu_template(minu_template)

        start = timeit.default_timer()
        # texture templates
        stride = 16

        x = np.arange(24, w - 24, stride)
        y = np.arange(24, h - 24, stride)

        virtual_minutiae = []
        distFromBg = scipy.ndimage.morphology.distance_transform_edt(mask)
        for y_i in y:
            for x_i in x:
                if (distFromBg[y_i][x_i] <= 24):
                    continue
                ofY = int(y_i / 16)
                ofX = int(x_i / 16)

                ori = -dir_map[ofY][ofX]
                virtual_minutiae.append([x_i, y_i, ori])
        virtual_minutiae = np.asarray(virtual_minutiae)

        if len(virtual_minutiae) > 1000:
            virtual_minutiae = virtual_minutiae[:1000]
        print len(virtual_minutiae)
        if len(virtual_minutiae) > 3:
            virtual_des = descriptor.minutiae_descriptor_extraction(
                contrast_img,
                virtual_minutiae,
                self.patch_types,
                self.des_models,
                self.patchIndexV,
                batch_size=128)
            texture_template = template.TextureTemplate(
                h=h,
                w=w,
                minutiae=virtual_minutiae,
                des=virtual_des,
                mask=mask)
            rolled_template.add_texture_template(texture_template)
        stop = timeit.default_timer()
        print('time for texture : %f' % (stop - start))
        return rolled_template
def process_kais_markup(
        pathname='/home/kaicao/Dropbox/Share/markup/data/selected_prints_templates_Kai/',
        data_path='/home/kaicao/Research/AutomatedLatentRecognition/Data/minutiae_cylinder/',
        num_channels=12):
    subjects = glob.glob(pathname + '*')

    for i, subject in enumerate(subjects):
        print i
        feature_file = subject + '/feature.mat'
        subjectID = subject.split('/')[-1]
        if os.path.isfile(feature_file):
            print feature_file
            x = loadmat(feature_file)
            if 'minutiae_rolled' in x.keys():
                img, ROI, minutiae_cylinder = extract_minutiae_cylinder(
                    x['img_rolled'], x['minutiae_rolled'],
                    x['ROI_rolled_final'])

                img = np.uint8(img)
                if num_channels < 3:
                    minutiae_cylinder = (minutiae_cylinder + 1.0) / 2.0
                    minutiae_cylinder[minutiae_cylinder > 1] = 1.
                    minutiae_cylinder[minutiae_cylinder < 0] = 0.
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                else:
                    minutiae_cylinder[minutiae_cylinder > 1] = 1
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                matrix = np.concatenate(
                    (np.expand_dims(img, axis=2), np.expand_dims(
                        ROI, axis=2), minutiae_cylinder), 2)

                outfile = data_path + subjectID + '_rolled.npy'
                np.save(outfile, matrix)

                img, ROI, minutiae_cylinder = extract_minutiae_cylinder(
                    x['img_latent'], x['minutiae_latent'],
                    x['ROI_latent_final'])

                if num_channels < 3:
                    minutiae_cylinder = (minutiae_cylinder + 1.0) / 2.0
                    minutiae_cylinder[minutiae_cylinder > 1] = 1.
                    minutiae_cylinder[minutiae_cylinder < 0] = 0.
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                else:
                    minutiae_cylinder[minutiae_cylinder > 1] = 1
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                matrix = np.concatenate(
                    (np.expand_dims(img, axis=2), np.expand_dims(
                        ROI, axis=2), minutiae_cylinder), 2)

                outfile = data_path + subjectID + '_latent.npy'
                np.save(outfile, matrix)
            else:
                img, ROI, minutiae_cylinder = extract_minutiae_cylinder(
                    x['img_rolled'], x['minutiae_rolled_final'],
                    x['ROI_rolled_final'])

                img = LP.local_constrast_enhancement(img)
                img = (img + 1) * 128
                img[img > 255] = 255
                img = np.uint8(img)

                if num_channels < 3:
                    minutiae_cylinder = (minutiae_cylinder + 1.0) / 2.0
                    minutiae_cylinder[minutiae_cylinder > 1] = 1.
                    minutiae_cylinder[minutiae_cylinder < 0] = 0.
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                else:
                    minutiae_cylinder[minutiae_cylinder > 1] = 1
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                matrix = np.concatenate(
                    (np.expand_dims(img, axis=2), np.expand_dims(
                        ROI, axis=2), minutiae_cylinder), 2)

                outfile = data_path + subjectID + '_rolled.npy'
                np.save(outfile, matrix)

                img, ROI, minutiae_cylinder = extract_minutiae_cylinder(
                    x['img_latent'], x['minutiae_latent_final'],
                    x['ROI_latent_final'])

                if num_channels < 3:
                    minutiae_cylinder = (minutiae_cylinder + 1.0) / 2.0
                    minutiae_cylinder[minutiae_cylinder > 1] = 1.
                    minutiae_cylinder[minutiae_cylinder < 0] = 0.
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                else:
                    minutiae_cylinder[minutiae_cylinder > 1] = 1
                    minutiae_cylinder = np.uint8(minutiae_cylinder * 255)

                matrix = np.concatenate(
                    (np.expand_dims(img, axis=2), np.expand_dims(
                        ROI, axis=2), minutiae_cylinder), 2)

                outfile = data_path + subjectID + '_latent.npy'
                np.save(outfile, matrix)
def extract_minutiae_cylinder(img_input,
                              minutiae_input,
                              ROI=None,
                              num_ori=12,
                              angle=None,
                              processing=None):
    # for the latent or the low quality rolled print
    minutiae = minutiae_input.copy()
    img = img_input.copy()
    if processing == 'STFT':
        img = LP.STFT(img)
    elif processing == 'contrast':
        img = LP.local_constrast_enhancement(img)
    elif processing == 'texture':
        img = LP.FastCartoonTexture(img)
    sigma = 5**2
    if ROI is not None:
        h, w = ROI.shape
        for i in range(h):
            for j in range(w):
                if ROI[i, j] == 0:
                    img[i, j] = 255

        h, w = ROI.shape
        col_sum = np.sum(ROI, axis=0)

        ind = [x for x in range(len(col_sum)) if col_sum[x] > 0]
        min_x = np.max([np.min(ind) - 32, 0])
        max_x = np.min([np.max(ind) + 32, w])

        row_sum = np.sum(ROI, axis=1)

        ind = [x for x in range(len(row_sum)) if row_sum[x] > 0]
        min_y = np.max([np.min(ind) - 32, 0])
        max_y = np.min([np.max(ind) + 32, h])

        ROI = ROI[min_y:max_y, min_x:max_x]
        img = img[min_y:max_y, min_x:max_x]
        minutiae[:, 0] = minutiae[:, 0] - min_x
        minutiae[:, 1] = minutiae[:, 1] - min_y
    else:
        h, w = img.shape[0:2]
        ROI = np.ones((h, w))

    # rotate the image and ROI, and also update minutiae points
    h0, w0 = ROI.shape
    if angle is not None:
        h02 = (h0 + 1) / 2
        w02 = (w0 + 1) / 2

        img = rotate(img, angle)
        ROI = rotate(ROI, angle)

        h, w = ROI.shape
        h2 = (h + 1) / 2
        w2 = (w + 1) / 2

        angle = -angle / 180.0 * math.pi
        cosTheta = math.cos(angle)
        sinTheta = math.sin(angle)
        xx = (minutiae[:, 0] - w02) * cosTheta - (minutiae[:, 1] -
                                                  h02) * sinTheta + w2

        yy = (minutiae[:, 0] - w02) * sinTheta + (minutiae[:, 1] -
                                                  h02) * cosTheta + h2
        ori = minutiae[:, 2] - angle
        #
        minutiae[:, 0] = xx
        minutiae[:, 1] = yy
        minutiae[:, 2] = ori
        show = 0
        if show:
            minu_num = minutiae.shape[0]
            fig, ax = plt.subplots(1)
            ax.set_aspect('equal')

            R = 10
            arrow_len = 15
            ax.imshow(img, cmap='gray')
            for i in range(0, minu_num):
                xx = minutiae[i, 0]
                yy = minutiae[i, 1]
                circ = Circle((xx, yy), R, color='r', fill=False)
                ax.add_patch(circ)

                ori = -minutiae[i, 2]
                dx = math.cos(ori) * arrow_len
                dy = math.sin(ori) * arrow_len
                ax.arrow(xx,
                         yy,
                         dx,
                         dy,
                         head_width=0.05,
                         head_length=0.1,
                         fc='r',
                         ec='r')
            plt.show()
    h, w = ROI.shape
    minutiae_cylinder = np.zeros((h, w, num_ori), dtype=float)
    cylinder_ori = np.asarray(range(num_ori)) * math.pi * 2 / num_ori

    Y, X = np.mgrid[0:h, 0:w]
    minu_num = minutiae.shape[0]
    for i in range(0, minu_num):
        xx = minutiae[i, 0]
        yy = minutiae[i, 1]
        if yy < 0 or xx < 0:
            continue
            print xx, yy
            minu_num = minutiae.shape[0]
            fig, ax = plt.subplots(1)
            ax.set_aspect('equal')

            R = 10
            arrow_len = 15
            ax.imshow(img, cmap='gray')
            for i in range(0, minu_num):
                xx = minutiae[i, 0]
                yy = minutiae[i, 1]
                circ = Circle((xx, yy), R, color='r', fill=False)
                ax.add_patch(circ)

                ori = -minutiae[i, 2]
                dx = math.cos(ori) * arrow_len
                dy = math.sin(ori) * arrow_len
                ax.arrow(xx,
                         yy,
                         dx,
                         dy,
                         head_width=0.05,
                         head_length=0.1,
                         fc='r',
                         ec='r')
            plt.show()
        weight = np.exp(-((X - xx) * (X - xx) + (Y - yy) * (Y - yy)) / sigma)

        ori = minutiae[i, 2]
        if ori < 0:
            ori += np.pi * 2
        if ori > np.pi * 2:
            ori -= np.pi * 2

        for j in range(num_ori):

            ori_diff = np.fabs(ori - cylinder_ori[j])

            if ori_diff > np.pi * 2:
                ori_diff = ori_diff - np.pi * 2

            ori_diff = np.min([ori_diff, np.pi * 2 - ori_diff])
            minutiae_cylinder[:, :,
                              j] += weight * np.exp(-ori_diff / np.pi * 6)
    show = 0
    if show:
        fig, ax = plt.subplots(1)
        ax.set_aspect('equal')

        R = 10
        arrow_len = 15
        ax.imshow(img, cmap='gray')
        for i in range(0, minu_num):
            xx = minutiae[i, 0]
            yy = minutiae[i, 1]
            circ = Circle((xx, yy), R, color='r', fill=False)
            ax.add_patch(circ)

            ori = -minutiae[i, 2]
            dx = math.cos(ori) * arrow_len
            dy = math.sin(ori) * arrow_len
            ax.arrow(xx,
                     yy,
                     dx,
                     dy,
                     head_width=0.05,
                     head_length=0.1,
                     fc='r',
                     ec='r')
        plt.show()

    return img, ROI, minutiae_cylinder
Exemple #8
0
    def feature_extraction_single_latent_evaluation(self,img_file, mask_file, AEC_img_file,output_path = None ):

        img = io.imread(img_file)
        name = os.path.basename(img_file)
        AEC_img = io.imread(AEC_img_file)
        mask = io.imread(mask_file)
        h,w = mask.shape
        #mask = mask_dilation(mask, block_size=16)
        latent_template = template.Template()
        block = False
        minu_thr = 0.3

        contrast_img = preprocessing.local_constrast_enhancement(img)
        # Two ways for orientation field estimation
        #  Use the AEC_img and STFT on texture image
        dir_map_sets = []
        texture_img = preprocessing.FastCartoonTexture(img, sigma=2.5, show=False)
        dir_map, fre_map = get_maps.get_maps_STFT(texture_img, patch_size=64, block_size=16, preprocess=True)
        dir_map_sets.append(dir_map)

        blkH, blkW = dir_map.shape

        dir_map, fre_map = get_maps.get_maps_STFT(AEC_img, patch_size=64, block_size=16, preprocess=True)
        dir_map_sets.append(dir_map)

        #dir_map, fre_map = get_maps.get_maps_STFT(contrast_img, patch_size=64, block_size=16, preprocess=True)
        #dir_map_sets.append(dir_map)

        # based on the OF, we can use texture image and AEC image for frequency field estimation

        fre_map_sets = []
        quality_map, fre_map = get_maps.get_quality_map_ori_dict(AEC_img, self.dict, self.spacing, dir_map=dir_map_sets[0],
                                                                 block_size=16)
        fre_map_sets.append(fre_map)

        quality_map, fre_map = get_maps.get_quality_map_ori_dict(contrast_img, self.dict, self.spacing,
                                                                 dir_map=dir_map_sets[1],
                                                                 block_size=16)
        fre_map_sets.append(fre_map)

        descriptor_imgs = [texture_img]
        descriptor_imgs.append(contrast_img)
        enh_texture_img = filtering.gabor_filtering_pixel(texture_img, dir_map + math.pi / 2, fre_map_sets[0], mask=mask,
                                                         block_size=16, angle_inc=3)
        descriptor_imgs.append(enh_texture_img)
        enh_contrast_img = filtering.gabor_filtering_pixel(contrast_img, dir_map + math.pi / 2, fre_map_sets[1], mask=mask,
                                                           block_size=16, angle_inc=3)
        descriptor_imgs.append(enh_contrast_img)

        minutiae_sets = []
        mnt = self.minu_model.run(texture_img, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_texture_img.jpeg'
        show.show_minutiae(texture_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(contrast_img, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_contrast_img.jpeg'
        show.show_minutiae(contrast_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(enh_texture_img, minu_thr=minu_thr)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_enh_texture_img.jpeg'
        show.show_minutiae(enh_texture_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(enh_contrast_img, minu_thr=minu_thr)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_enh_contrast_img.jpeg'
        show.show_minutiae(enh_contrast_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(AEC_img, minu_thr=minu_thr)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)

        fname = output_path + os.path.splitext(name)[0] + '_AEC_img.jpeg'
        show.show_minutiae(AEC_img, mnt, block=block, fname=fname)



        for mnt in minutiae_sets:
            for des_img in descriptor_imgs:
                des = descriptor.minutiae_descriptor_extraction(des_img, mnt, self.patch_types, self.des_models,
                                                        self.patchIndexV,batch_size=128)
                minu_template = template.MinuTemplate(h=h, w=w, blkH=blkH, blkW=blkW, minutiae=mnt,
                                                  des=des, oimg=dir_map_sets[1], mask=mask)
                latent_template.add_minu_template(minu_template)

        return latent_template
Exemple #9
0
    def feature_extraction_single_latent_demo(self,img_file, output_path = None ):
        block = True
        img = io.imread(img_file)

        plt.imshow(img, cmap='gray')
        plt.show(block=block)
        plt.close()



        name = os.path.basename(img_file)

        #AEC_img = io.imread(AEC_img_file)
        #mask_CNN = io.imread(mask_file)
        mask_CNN,_ = self.ROI_model.run(img)
        h,w = mask_CNN.shape
        #mask = mask_dilation(mask, block_size=16)
        latent_template = template.Template()

        minu_thr = 0.3

        # template set 1: no ROI and enhancement are required
        # texture image is used for coase segmentation

        descriptor_imgs = []
        texture_img = preprocessing.FastCartoonTexture(img, sigma=2.5, show=False)




        descriptor_imgs.append(texture_img)
        contrast_img_mean = preprocessing.local_constrast_enhancement(img)
        contrast_img_guassian = preprocessing.local_constrast_enhancement_gaussian(img)

        quality_map, _, _ = get_maps.get_quality_map_dict(texture_img, self.dict_all, self.dict_ori,
                                                                      self.dict_spacing, block_size=16, process=False)
        quality_map_pixel = cv2.resize(quality_map, (0, 0), fx=16, fy=16)
        plt.imshow(quality_map_pixel,cmap='gray')
        plt.show()
        mask_coarse = quality_map_pixel > 0.3
        mask_coarse = mask_coarse.astype(np.int)
        mask = mask_coarse * mask_CNN
        show.show_mask(mask_CNN, img, fname='mask_RCNN.jpeg',block=block)
        show.show_mask(mask_coarse,img,fname = 'mask_coarse.jpeg',block=block)
        show.show_mask(mask, img, fname='mask.jpeg',block=block)




        #show.show_mask(mask, AEC_img, fname='mask_AEC.jpeg',block=block)
        # plt.imshow(AEC_img,cmap = 'gray')
        # plt.show(block=block)
        # plt.close()



        show.show_mask(mask_CNN, img, fname='mask_RCNN.jpeg',block=block)

        # AEC_img[mask == 0] = 128
        # plt.imshow(AEC_img, cmap='gray')
        # plt.show(block=block)
        # plt.close()

        AEC_img = self.enhancement_model.run(texture_img)
        quality_map, dir_map, fre_map = get_maps.get_quality_map_dict(AEC_img, self.dict_all, self.dict_ori,self.dict_spacing, block_size=16, process=False)


        show.show_orientation_field(img, dir_map,mask = mask,fname='OF.jpeg')




        # mnt = self.minu_model.run(contrast_img_mean, minu_thr=0.1)
        # mnt = self.remove_spurious_minutiae(mnt, mask)
        # minutiae_sets.append(mnt)
        #
        # fname = output_path + os.path.splitext(name)[0] + '_contrast_img_mean.jpeg'
        # show.show_minutiae(contrast_img_mean, mnt, block=block, fname=fname)

        start = timer()
        enh_contrast_img = filtering.gabor_filtering_pixel(contrast_img_guassian, dir_map + math.pi / 2, fre_map,
                                                          mask=mask,
                                                          block_size=16, angle_inc=3)

        bin_img = binarization.binarization(enh_contrast_img,dir_map,mask=mask)
        thin_img = skeletonize(bin_img)
        plt.imshow(thin_img,cmap='gray')
        plt.show(block=True)
        dt = timer() - start
        print(dt)
        show.show_image(texture_img, mask=mask, block=True, fname='cropped_texture_image.jpeg')
        show.show_image(AEC_img, mask=mask, block=True, fname='cropped_AEC_image.jpeg')
        show.show_image(enh_contrast_img, mask=mask, block=True, fname='cropped_enh_image.jpeg')

        #np.ones((h, w), np.int)
        descriptor_imgs.append(enh_contrast_img)


        quality_map2, _ , _ = get_maps.get_quality_map_dict(enh_contrast_img, self.dict_all,self.dict_ori,self.dict_spacing, block_size=16,
                                                                      process=False)
        quality_map_pixel2 = cv2.resize(quality_map2, (0, 0), fx=16, fy=16)

        mask2 = quality_map_pixel2 > 0.55

        minutiae_sets = []
        mnt = self.minu_model.run(texture_img, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask2)
        minutiae_sets.append(mnt)
        fname = 'minutiae_texture_img.jpeg'
        show.show_minutiae(texture_img, mnt, mask=mask,block=block, fname=fname)

        mnt = self.minu_model.run(AEC_img, minu_thr=0.3)
        mnt = self.remove_spurious_minutiae(mnt, mask2)
        minutiae_sets.append(mnt)
        fname = 'minutiae_AEC_img.jpeg'
        show.show_minutiae(AEC_img, mnt, mask=mask, block=block, fname=fname)

        mnt = self.minu_model.run(enh_contrast_img, minu_thr=0.3)
        mnt = self.remove_spurious_minutiae(mnt, mask2)
        minutiae_sets.append(mnt)

        fname = 'minutiae_enh_contrast_img.jpeg'
        show.show_minutiae(img, mnt, mask=np.ones((h,w)), block=block, fname=fname)
        #show.show_minutiae(img, mnt, mask=mask,block=block, fname=fname)

        fname = 'minutiae_skeleton.jpeg'
        show.show_minutiae(img, mnt, mask=mask, block=block, fname=fname)
        #
        # mnt = self.minu_model.run(enh_constrast_img, minu_thr=0.3)
        # mnt = self.remove_spurious_minutiae(mnt, mask)
        # minutiae_sets.append(mnt)
        # fname = output_path + os.path.splitext(name)[0] + '_enh_constrast_img.jpeg'
        # show.show_minutiae(enh_constrast_img, mnt, block=block, fname=fname)


        # blkH, blkW = dir_map.shape
        # for mnt in minutiae_sets:
        #     for des_img in descriptor_imgs:
        #         des = descriptor.minutiae_descriptor_extraction(des_img, mnt, self.patch_types, self.des_models,
        #                                                 self.patchIndexV, batch_size=128)
        #         minu_template = template.MinuTemplate(h=h, w=w, blkH=blkH, blkW=blkW, minutiae=mnt,
        #                                           des=des, oimg=dir_map, mask=mask)
        #         latent_template.add_minu_template(minu_template)

        return None
Exemple #10
0
    def feature_extraction_single_latent_evaluation_AEM18T(self,img_file, mask_file, AEC_img_file,output_path = None ):

        img = io.imread(img_file)
        name = os.path.basename(img_file)
        AEC_img = io.imread(AEC_img_file)
        mask_CNN = io.imread(mask_file)
        h,w = mask_CNN.shape
        #mask = mask_dilation(mask, block_size=16)
        latent_template = template.Template()
        block = False
        minu_thr = 0.3

        # template set 1: no ROI and enhancement are required
        # texture image is used for coase segmentation

        descriptor_imgs = []
        texture_img = preprocessing.FastCartoonTexture(img, sigma=2.5, show=False)
        descriptor_imgs.append(texture_img)
        contrast_img_mean = preprocessing.local_constrast_enhancement(img)
        contrast_img_guassian = preprocessing.local_constrast_enhancement_gaussian(img)

        quality_map, dir_map, fre_map = get_maps.get_quality_map_dict(texture_img, self.dict_all, self.dict_ori,
                                                                      self.dict_spacing, block_size=16, process=False)
        quality_map_pixel = cv2.resize(quality_map, (0, 0), fx=16, fy=16)
        mask_coarse = quality_map_pixel > 0.3
        mask_coarse = mask_coarse.astype(np.int)
        quality_map, dir_map, fre_map = get_maps.get_quality_map_dict(AEC_img, self.dict_all, self.dict_ori,self.dict_spacing, block_size=16, process=False)


        minutiae_sets = []
        mnt = self.minu_model.run(texture_img, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask_coarse)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_texture_img.jpeg'
        show.show_minutiae(texture_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(contrast_img_mean, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask_coarse)
        minutiae_sets.append(mnt)

        fname = output_path + os.path.splitext(name)[0] + '_contrast_img_mean.jpeg'
        show.show_minutiae(contrast_img_mean, mnt, block=block, fname=fname)


        mnt = self.minu_model.run(contrast_img_guassian, minu_thr=0.1)
        mnt = self.remove_spurious_minutiae(mnt, mask_coarse)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_contrast_img_guassian.jpeg'
        show.show_minutiae(contrast_img_guassian, mnt, block=block, fname=fname)

        #show.show_orientation_field(AEC_img,dir_map)

        enh_texture_img = filtering.gabor_filtering_pixel(texture_img, dir_map + math.pi / 2, fre_map,
                                                          mask=np.ones((h, w), np.int),
                                                          block_size=16, angle_inc=3)

        descriptor_imgs.append(enh_texture_img)

        enh_constrast_img = filtering.gabor_filtering_pixel(contrast_img_guassian, dir_map + math.pi / 2, fre_map,
                                                          mask=np.ones((h,w),np.int),
                                                          block_size=16, angle_inc=3)

        descriptor_imgs.append(enh_constrast_img)

        quality_map2, _ , _ = get_maps.get_quality_map_dict(enh_texture_img, self.dict_all,self.dict_ori,self.dict_spacing, block_size=16,
                                                                      process=False)
        quality_map_pixel2 = cv2.resize(quality_map2, (0, 0), fx=16, fy=16)

        mask = quality_map_pixel2 > 0.55


        mask = mask.astype(np.int)
        mask = mask_coarse * mask
        mask = mask * mask_CNN

        mnt = self.minu_model.run(AEC_img, minu_thr=0.3)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_AEC_img.jpeg'
        show.show_minutiae(AEC_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(enh_texture_img, minu_thr=0.3)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)

        fname = output_path + os.path.splitext(name)[0] + '_enh_texture_img.jpeg'
        show.show_minutiae(enh_texture_img, mnt, block=block, fname=fname)

        mnt = self.minu_model.run(enh_constrast_img, minu_thr=0.3)
        mnt = self.remove_spurious_minutiae(mnt, mask)
        minutiae_sets.append(mnt)
        fname = output_path + os.path.splitext(name)[0] + '_enh_constrast_img.jpeg'
        show.show_minutiae(enh_constrast_img, mnt, block=block, fname=fname)


        blkH, blkW = dir_map.shape
        for mnt in minutiae_sets:
            for des_img in descriptor_imgs:
                des = descriptor.minutiae_descriptor_extraction(des_img, mnt, self.patch_types, self.des_models,
                                                        self.patchIndexV, batch_size=128)
                minu_template = template.MinuTemplate(h=h, w=w, blkH=blkH, blkW=blkW, minutiae=mnt,
                                                  des=des, oimg=dir_map, mask=mask)
                latent_template.add_minu_template(minu_template)

        return latent_template