N1 = sift1.shape[0] N2 = sift2.shape[0] dist_thresh = 1.1 matches = -1 * np.ones((sift1.shape[0]), 'int') dist = np.dot(sift1, sift2.T) for i in range(0, N1): temp = dist[i,:] indx = np.argsort(temp) indx = indx[::-1] if temp[indx[0]] / temp[indx[1]] > dist_thresh: matches[i] = indx[0] # PUT YOUR CODE IN week2.match_sift, SO THAT IT CAN BE CALLED AS matches = week2.match_sift(sift1, sift2, dist_thresh) # NOW YOU ARE ABLE TO PLOT THE MATCHES AND GET SOMETHING LIKE IN FIG.1 OF THE HANDOUT week2.plot_matches(im1, im2, frames1, frames2, matches) # [ALREADY IMPLEMENTED] # !!! EXPERIMENT FOR DIFFERENT VALUES OF DIST_THRESH AND CONTINUE WITH THAT ONE. # !!! REPORT THIS VALUE IN YOUR REPORT ############################################################################## #### PART 3. SIFT FEATURES ARE INVARIANT TO ############################################################################## #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #### STEP D: ROTATION (REPEAT FOR 15, 30, 45, 60, 75, 90) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impath1 = '../../data/oxford_scaled/all_souls_000026.jpg'
# NOW YOU ARE ABLE TO PLOT THE MATCHES AND GET SOMETHING LIKE IN FIG.1 OF THE HANDOUT week2.plot_matches(im1, im2, frames1, frames2, matches) # [ALREADY IMPLEMENTED] # !!! EXPERIMENT FOR DIFFERENT VALUES OF DIST_THRESH AND CONTINUE WITH THAT ONE. # !!! REPORT THIS VALUE IN YOUR REPORT # Rog - Result for assignment in C2 impath1 = '../../data/oxford_scaled/all_souls_000075.jpg' frames1, sift1 = week2.compute_sift(impath1) impath2 = '../../data/oxford_scaled/all_souls_000076.jpg' frames2, sift2 = week2.compute_sift(impath2) im1 = Image.open(impath2) im2 = Image.open(impath2) matches = week2.match_sift(sift1, sift2, 1.15) week2.plot_matches(im1, im2, frames1, frames2, matches) ############################################################################## #### PART 3. SIFT FEATURES ARE INVARIANT TO ############################################################################## #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #### STEP D: ROTATION (REPEAT FOR 15, 30, 45, 60, 75, 90) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ impath1 = '../../data/oxford_scaled/all_souls_000026.jpg' frames1, sift1 = week2.compute_sift(impath1) im1 = Image.open(impath1) for deg in np.arange(0, 90+15, 15):
subplot(1, 2, 1) im1 = Image.open(impath1) week2.plot_features(im1, frames1, False, 'r') subplot(1, 2, 2) im2 = Image.open(impath2) week2.plot_features(im2, frames2, False, 'r') # STEP C.1 NORMALIZE SIFT VECTORS sift1 = tools.normalizeL2(sift1, 1) sift2 = tools.normalizeL2(sift2, 1) # STEP C.2 COMPUTE DISTANCES BETWEEN ALL VECTORS IN SIFT1 AND SIFT2. # PUT YOUR CODE IN week2.match_sift, SO THAT IT CAN BE CALLED AS dist_thresh = 1.1 matches, ranked_ratio = week2.match_sift(sift1, sift2, dist_thresh) # [YOU NEED TO IMPLEMENT THIS] week2.store_cache() while True: rawinput = raw_input('>> ') if rawinput == 'q': week2.store_cache() sys.exit() tmp_matches = -1 * np.ones(matches.shape) theta = float(rawinput) for i in range(len(matches)): if ranked_ratio[i] > theta: tmp_matches[i] = matches[i] print sum(tmp_matches != -1) # NOW YOU ARE ABLE TO PLOT THE MATCHES AND GET SOMETHING LIKE IN FIG.1 OF THE HANDOUT week2.plot_matches(im1, im2, frames1, frames2, tmp_matches) # [ALREADY IMPLEMENTED]