In [ ]:
from utils_io import read_json, load_items

params = read_json('parameters.json')
#RESIZE_X = params['resize']['x']
#RESIZE_Y = params['resize']['y']
ITEM_FOLDER = params['item_folder']
items = load_items(ITEM_FOLDER)

hl = [] # histogram list

In [ ]:
from utils_sift import read_features_from_file, unpack_keypoint

views = ['top_01','top-side_01','top-side_02','bottom_01','bottom-side_01','bottom-side_02']
views = ['top_01']
for item in items:
    for view in views:
        try:
            filename = ITEM_FOLDER + '/' + item + '/' + item + '_' + view + '_sift.npy'
            kp, des = read_features_from_file(filename)
            kp, des = unpack_keypoint(kp, des)
            des = des.astype('float32')
            hl.append( (item, view, kp, des) )
        except IOError:
            pass
        except OSError:
            pass

In [ ]:
import numpy as np

ivdm = np.zeros( (len(hl),len(hl)) ) # Item/view distance matrix

In [ ]:
from utils_sift import calc_matches

for i, (it1, vi1, kp1, des1) in enumerate(hl):
    for j, (it2, vi2, kp2, des2) in enumerate(hl):
        if j>i:
            good = calc_matches(des1, des2)
            #ivdm[i][j] = float(len(good)) / float(len(des1))
            ivdm[i][j] = len(good)
            ivdm[j][i] = ivdm[i][j]

In [ ]:
from matplotlib import pyplot as plt
%matplotlib inline

In [ ]:
plt.imshow(ivdm,cmap='jet');

In [ ]:
n = len(items)
idm = np.zeros( (n, n) ) # item distance matrix

In [ ]:
n = len(hl)
for i in range(n):
    for j in range(i+1, n):
        iti = items.index(hl[i][0])
        itj = items.index(hl[j][0])
        if ivdm[i][j] > idm[iti][itj]:
            idm[iti][itj] = ivdm[i][j]
            idm[itj][iti] = idm[iti][itj]

In [ ]:
plt.imshow(idm,cmap='jet');

In [ ]:
def plot_distance(item, d):
    idx = items.index(item)
    plt.plot(idm[idx],'b-'); plt.plot(idm[idx],'bo'); plt.title(items[idx]); plt.plot([0,40],[d,d],'r-'); plt.show();
    for d, it in sorted([(dist, it) for it, dist in zip(items, idm[idx]) if dist > d], reverse=True):
        print('%d %s' % (d, it))

In [ ]:
from ipywidgets import interact
interact(plot_distance, item=items, d=(0,50,5));

In [ ]:
np.max(idm)

In [ ]:
plt.hist(idm.flatten()/2, bins=31);

In [ ]:
sum(idm.flatten()>10)

In [ ]: