def FFIC(domain_chunks, range_chunks, inpface):
    ############################################################################
    # encode the range image using svd encoding 
    ############################################################################
    
    # encode image
    start = time.time()
    codebook = encode_svd(domain_chunks, range_chunks, verbose=False)
    svd_encoding_time = time.time() - start

    # for svd only we implement compression by 
    # dropping coefficients in the codebook
    codebook[:, COMPRESSION_FACTOR:] = 0

    # Use an input face to use as input for the reconstruction
    domain_chunks = utils.Partition(inpface, mode=MODE)

    # initialize psnr
    psnr = np.zeros(10);

    # decode image 100 times
    start = time.time()
    reconstructed_chunks = decode_svd(codebook, domain_chunks)
    reconstructed_chunks_1 = copy.deepcopy(reconstructed_chunks)
    psnr[0] = PSNR(range_image, reconstructed_chunks.image)
    
    for i in range(9):
        rec_dim = rescale(reconstructed_chunks.image, 0.5) 
        domain_chunks = utils.Partition(rec_dim, mode=MODE)
        reconstructed_chunks = decode_svd(codebook, domain_chunks)
        psnr[i+1] = PSNR(range_image, reconstructed_chunks.image)
    
    svd_decoding_time = time.time()-start

    # plot_image(reconstructed_chunks.image, 
    #     title=f"Reconstructed Image (SVD Encoding) \n {reconstructed_chunks.image.shape[0]}x{reconstructed_chunks.image.shape[0]}, {COMPRESSION_FACTOR}/{BLOCK_SIZE} Compression", 
    #     cmap='gray', y=0.97)

    ############################################################################
    # encoding and decoding time results
    ############################################################################

    print(f"svd mode encoding: {svd_encoding_time}")
    print(f"svd mode decoding: {svd_decoding_time}")

    ############################################################################
    # psnr results
    ############################################################################
    # psnr = PSNR(range_image, reconstructed_chunks.image)
    print(f"PSNR: {psnr} \t Coefficients Retained: {COMPRESSION_FACTOR}/{BLOCK_SIZE}")
    return psnr
Ejemplo n.º 2
0
        aaronface = np.asarray(aaronface.getdata()).reshape(512, 512)
        aaronface = rescale(aaronface, 0.25)
    else:
        facedir = Path(__file__).resolve().parent.parent / "data"
        aaronface = Image.open(list(facedir.glob("mandrill.jpg"))[0])
        aaronface = np.asarray(aaronface.getdata()).reshape(512, 512)
        aaronface = rescale(aaronface, 0.25)
    # aaronface = np.asarray(aaronface.getdata()).reshape(64,64)

    # aaronface = images.get_image(0, scale_factor=0.125/2)
    plot_image(aaronface,
               title=f"Domain Image {aaronface.shape[0]}x{aaronface.shape[1]}",
               cmap='gray')

    domain_chunks = utils.Partition(aaronface, mode=MODE)
    reconstructed_chunks = decode_svd(codebook, domain_chunks)

    # save_contractiveness_factors(domain_chunks, 1)

    for i in range(26):
        rec_dim = rescale(reconstructed_chunks.image, 0.5)
        domain_chunks = utils.Partition(rec_dim, mode=MODE)
        # save_contractiveness_factors(domain_chunks, i)
        reconstructed_chunks = decode_svd(codebook, domain_chunks)
        if i in [1, 5, 10, 20, 25]:
            plot_image(
                reconstructed_chunks.image,
                title=
                f"Reconstructed Image {i} iterations \n{reconstructed_chunks.\
                image.shape[0]}x{reconstructed_chunks.image.shape[0]} ({MODE})",
                cmap='gray',