Skip to content
Snippets Groups Projects
ex2_2_1.py 2.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • pheithar's avatar
    pheithar committed
    # exercise 2.2.1
    
    Stas Syrota's avatar
    Stas Syrota committed
    import importlib_resources
    
    import matplotlib.pyplot as plt
    
    bjje's avatar
    bjje committed
    import numpy as np
    
    Stas Syrota's avatar
    Stas Syrota committed
    from scipy.io import loadmat
    
    bjje's avatar
    bjje committed
    
    
    from dtuimldmtools import similarity
    
    filename = importlib_resources.files("dtuimldmtools").joinpath("data/digits.mat")
    # Image to use as query
    i = 1
    
    bjje's avatar
    bjje committed
    
    
    # Similarity: 'SMC', 'Jaccard', 'ExtendedJaccard', 'Cosine', 'Correlation'
    similarity_measure = "SMC"
    
    # Load the digits
    
    bjje's avatar
    bjje committed
    # Load Matlab data file to python dict structure
    
    X = loadmat(filename)["X"]
    # You can also try the CBCL faces dataset (remember to change 'transpose')
    
    pheithar's avatar
    pheithar committed
    # X = loadmat('../Data/wildfaces_grayscale.mat')['X']
    
    pheithar's avatar
    pheithar committed
    transpose = False  # should the plotted images be transposed?
    
    pheithar's avatar
    pheithar committed
    # Search the face database for similar faces
    
    # Index of all other images than i
    
    pheithar's avatar
    pheithar committed
    noti = list(range(0, i)) + list(range(i + 1, N))
    
    # Compute similarity between image i and all others
    
    pheithar's avatar
    pheithar committed
    sim = similarity(X[i, :], X[noti, :], similarity_measure)
    
    sim = sim.tolist()[0]
    # Tuples of sorted similarities and their indices
    
    pheithar's avatar
    pheithar committed
    sim_to_index = sorted(zip(sim, noti))
    
    
    
    # Visualize query image and 5 most/least similar images
    
    pheithar's avatar
    pheithar committed
    plt.figure(figsize=(12, 8))
    plt.subplot(3, 1, 1)
    
    bjje's avatar
    bjje committed
    
    
    img_hw = int(np.sqrt(len(X[0])))
    
    pheithar's avatar
    pheithar committed
    img = np.reshape(X[i], (img_hw, img_hw))
    if transpose:
        img = img.T
    
    plt.imshow(img, cmap=plt.cm.gray)
    
    pheithar's avatar
    pheithar committed
    plt.xticks([])
    plt.yticks([])
    plt.title("Query image")
    plt.ylabel("image #{0}".format(i))
    
    bjje's avatar
    bjje committed
    
    
    
    bjje's avatar
    bjje committed
    
    
    pheithar's avatar
    pheithar committed
        plt.subplot(3, 5, 6 + ms)
        im_id = sim_to_index[-ms - 1][1]
        im_sim = sim_to_index[-ms - 1][0]
        img = np.reshape(X[im_id], (img_hw, img_hw))
        if transpose:
            img = img.T
    
        plt.imshow(img, cmap=plt.cm.gray)
    
    pheithar's avatar
    pheithar committed
        plt.xlabel("sim={0:.3f}".format(im_sim))
        plt.ylabel("image #{0}".format(im_id))
        plt.xticks([])
        plt.yticks([])
        if ms == 2:
            plt.title("Most similar images")
    
    bjje's avatar
    bjje committed
    
    
    pheithar's avatar
    pheithar committed
        plt.subplot(3, 5, 11 + ms)
    
        im_id = sim_to_index[ms][1]
        im_sim = sim_to_index[ms][0]
    
    pheithar's avatar
    pheithar committed
        img = np.reshape(X[im_id], (img_hw, img_hw))
        if transpose:
            img = img.T
    
        plt.imshow(img, cmap=plt.cm.gray)
    
    pheithar's avatar
    pheithar committed
        plt.xlabel("sim={0:.3f}".format(im_sim))
        plt.ylabel("image #{0}".format(im_id))
        plt.xticks([])
        plt.yticks([])
        if ms == 2:
            plt.title("Least similar images")
    
    
    bjje's avatar
    bjje committed
    
    
    pheithar's avatar
    pheithar committed
    print("Ran Exercise 2.2.1")