Skip to content
Snippets Groups Projects
Select Git revision
  • 822fecb6ba9f9b8eea611d00fd5a5712a3269098
  • main default protected
  • s2025dev
  • plot-fixes
  • Fall2024
5 results

ex3_3_1.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ex3_3_1.py 2.20 KiB
    # exercise 3.3.1
    
    import importlib_resources
    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.io import loadmat
    
    from dtuimldmtools import similarity
    
    filename = importlib_resources.files("dtuimldmtools").joinpath("data/digits.mat")
    # Image to use as query
    i = 1
    
    # Similarity: 'SMC', 'Jaccard', 'ExtendedJaccard', 'Cosine', 'Correlation'
    similarity_measure = "SMC"
    
    # Load the digits
    # Load Matlab data file to python dict structure
    X = loadmat(filename)["X"]
    # You can also try the CBCL faces dataset (remember to change 'transpose')
    #X = loadmat('../Data/wildfaces_grayscale.mat')['X']
    N, M = X.shape
    transpose = False # should the plotted images be transposed? 
    
    
    # Search the face database for similar faces 
    # Index of all other images than i
    noti = list(range(0,i)) + list(range(i+1,N)) 
    # Compute similarity between image i and all others
    sim = similarity(X[i,:], X[noti,:], similarity_measure)
    sim = sim.tolist()[0]
    # Tuples of sorted similarities and their indices
    sim_to_index = sorted(zip(sim,noti))
    
    
    # Visualize query image and 5 most/least similar images
    plt.figure(figsize=(12,8))
    plt.subplot(3,1,1)
    
    img_hw = int(np.sqrt(len(X[0])))
    img = np.reshape(X[i], (img_hw,img_hw))
    if transpose: img = img.T
    plt.imshow(img, cmap=plt.cm.gray)
    plt.xticks([]); plt.yticks([])
    plt.title('Query image')
    plt.ylabel('image #{0}'.format(i))
    
    
    for ms in range(5):
    
        # 5 most similar images found
        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)
        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')
    
        # 5 least similar images found
        plt.subplot(3,5,11+ms)
        im_id = sim_to_index[ms][1]
        im_sim = sim_to_index[ms][0]
        img = np.reshape(X[im_id],(img_hw,img_hw))
        if transpose: img = img.T
        plt.imshow(img, cmap=plt.cm.gray)
        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')
        
    plt.show()
    
    print('Ran Exercise 3.3.1')