im1 = cv2.imread('../data/im1.png')[:, :, ::-1] im2 = cv2.imread('../data/im2.png')[:, :, ::-1] corresp = np.load('../data/some_corresp.npz') pts1 = corresp['pts1'] pts2 = corresp['pts2'] # select 7 points N = pts1.shape[0] select_ids = [53, 17, 43, 46, 27, 56, 77] pts1 = pts1[select_ids, :].copy() pts2 = pts2[select_ids, :].copy() M = np.max(im1.shape) Farray = sevenpoint(pts1, pts2, M) for idx, F in enumerate(Farray): print('visualizing F%d' % idx) print(F) displayEpipolarF(im1, im2, F) print('Enter the id of F which is correct:') correct_id = int(input()) assert 0 <= correct_id < len(Farray) F_correct = Farray[correct_id] np.savez('q2_2.npz', F=F_correct, M=M, pts1=pts1, pts2=pts2) ''' visualizing F0 [[ 1.37155686e-08 -8.61003099e-08 -8.27427609e-04] [ 2.16183531e-07 1.90452142e-09 -2.92701083e-05]
K1 = intr['K1'] K2 = intr['K2'] N = data['pts1'].shape[0] M = 640 # 2.1 F8 = sub.eightpoint(data['pts1'], data['pts2'], M) assert F8.shape == (3, 3), 'eightpoint returns 3x3 matrix' print('F8') print(F8) #helper.displayEpipolarF(im1, im2, F8) # 2.2 #F7 = sub.sevenpoint(data['pts1'][:7, :], data['pts2'][:7, :], M) F7 = sub.sevenpoint(data['pts1'][70:77, :], data['pts2'][70:77, :], M) assert (len(F7) == 1) | (len(F7) == 3), 'sevenpoint returns length-1/3 list' for f7 in F7: assert f7.shape == (3, 3), 'seven returns list of 3x3 matrix' #print(F7.shape) print('F7') print(F7) #helper.displayEpipolarF(im1, im2, F7[0]) # 3.1 print('E') print(sub.essentialMatrix(F8, K1, K2)) C1 = np.concatenate([np.random.rand(3, 3), np.ones([3, 1])], axis=1)
image1 = cv2.imread( '/home/geekerlink/Desktop/Computer Vision/Homeworks/hw4/hw4/data/im1.png' ) image2 = cv2.imread( '/home/geekerlink/Desktop/Computer Vision/Homeworks/hw4/hw4/data/im2.png' ) im_width = image1.shape[1] im_height = image1.shape[0] #calculating the scaling factor M = max(im_height, im_width) M = float(M) #calculating the fundamental matrix F = submission.eightpoint(pts1, pts2, M) helper.displayEpipolarF(image1, image2, F) #seven point algorithm F_seven_temp = submission.sevenpoint(pts1, pts2, M) errorvalue = [] for i in range(0, 3): least_error = np.sum(np.square(np.subtract(F, F_seven_temp[i]))) errorvalue.append(least_error) error_index = np.argmin(errorvalue) F_seven = F_seven_temp[error_index] helper.displayEpipolarF(image1, image2, F_seven) #intrinsic parameters intrinsic = np.load( '/home/geekerlink/Desktop/Computer Vision/Homeworks/hw4/hw4/data/intrinsics.npz' ) b = intrinsic.files k1 = intrinsic[b[0]] k2 = intrinsic[b[1]] #calculating essential matrix
import helper import numpy as np import submission import matplotlib.pyplot as plt img1 = plt.imread("../data/im1.png") img2 = plt.imread("../data/im2.png") h, w, c = img1.shape points = np.load("../data/some_corresp.npz") p1 = points['pts1'] p2 = points['pts2'] M = max(h, w) F = submission.sevenpoint(p1, p2, M) print(F.shape) helper.displayEpipolarF(img1, img2, F)
def ransacF(pts1, pts2, M): num_iter=5000 tol=10e-3 #create a set of random index to match points randIdx=np.random.randint(0,pts1.shape[0]-1,size=num_iter*8,dtype=int) randIdx=randIdx.reshape(num_iter,8) max_inliers=0 for i in range(num_iter): index=randIdx[i,:] P1=pts1[index,:] P2=pts2[index,:] F=sub.eightpoint(P1,P2,M) num_inliers=0 inliers_points=np.repeat(False,len(pts1)) for m in range(len(pts1)): p2=np.vstack([pts2[m,0],pts2[m,1],1]) epipolar_line = np.dot(F,p2) # a = epipolar_line[0] # b = epipolar_line[1] # c = epipolar_line[2] p1=np.hstack([pts1[m,0],pts1[m,1],1]) diff= abs(np.dot(p1,epipolar_line)) if diff<tol: num_inliers=num_inliers+1 inliers_points[m]=True if num_inliers>max_inliers: max_inliers=num_inliers inliers=inliers_points F_best=F print('times:',i) print('max num of inlier points',max_inliers) num_iter=5000 tol=3*10e-4 #create a set of random index to match points randIdx=np.random.randint(0,pts1.shape[0]-1,size=num_iter*7,dtype=int) randIdx=randIdx.reshape(num_iter,7) max_inliers=0 for i in range(num_iter): print('times:',i) index=randIdx[i,:] P1=pts1[index,:] P2=pts2[index,:] Farray=sub.sevenpoint(P1,P2,M) inliers_points=np.repeat(False,len(pts1)) for j in range(Farray.shape[2]): num_inliers=0 F=Farray[:,:,j] for m in range(len(pts1)): p2=np.hstack([pts2[m,0],pts2[m,1],1]) # a = epipolar_line[0] # b = epipolar_line[1] # c = epipolar_line[2] p1=np.vstack([pts1[m,0],pts1[m,1],1]) epipolar_line = np.dot(F,p1) diff= abs(np.dot(p2,epipolar_line)) if diff<tol: num_inliers=num_inliers+1 inliers_points[m]=True if num_inliers>max_inliers: max_inliers=num_inliers inliers=inliers_points F_best=F print('max num of inlier points',max_inliers) return F_best,inliers
F8 = sub.eightpoint(data['pts1'], data['pts2'], M) assert F8.shape == (3, 3), 'eightpoint returns 3x3 matrix' # hlpr.displayEpipolarF(im1, im2, F8) # np.savez('q2_1.npz', F=F8, M=M) print("q2-1:\n", F8) # 2.2 # select 7 best corresponding pair aug_pts1 = np.hstack((data['pts1'], np.ones((N, 1)))) aug_pts2 = np.hstack((data['pts2'], np.ones((N, 1)))) xFx = np.abs(np.diag(aug_pts2 @ F8 @ np.transpose(aug_pts1))) best_idx = xFx.argsort()[:7] pts1 = data['pts1'][best_idx] pts2 = data['pts2'][best_idx] F7 = sub.sevenpoint(pts1, pts2, M) assert (len(F7) == 1) | (len(F7) == 3), 'sevenpoint returns length-1/3 list' for f7 in F7: assert f7.shape == (3, 3), 'seven returns list of 3x3 matrix' # hlpr.displayEpipolarF(im1, im2, f7) # np.savez('q2_2.npz', F=F7, M=M, pts1=pts1, pts2=pts2) print("q2-2:\n", F7) # 3.1 intrinsics_data = np.load('../data/intrinsics.npz') # print(intrinsics_data.files) # [print(i) for i in intrinsics_data] E = sub.essentialMatrix(F8, intrinsics_data["K1"], intrinsics_data["K2"]) print("q3-1:\n", E)
import numpy as np import matplotlib.pyplot as plt import submission as sub data = np.load('../data/some_corresp.npz') im1 = plt.imread('../data/im1.png') im2 = plt.imread('../data/im2.png') N = data['pts1'].shape[0] M = 640 # 2.1 F8 = sub.eightpoint(data['pts1'], data['pts2'], M) assert F8.shape == (3, 3), 'eightpoint returns 3x3 matrix' # 2.2 F7 = sub.sevenpoint(data['pts1'][:7, :], data['pts2'][:7, :], M); assert len(F7) == 1 | len(F7) == 3, 'sevenpoint returns length-1/3 list' for f7 in F7: assert f7.shape == (3, 3), 'seven returns list of 3x3 matrix' # 3.1 C1 = np.concatenate([np.random.rand(3, 3), np.ones([3, 1])], axis=1) C2 = np.concatenate([np.random.rand(3, 3), np.ones([3, 1])], axis=1) P, err = sub.triangulate(C1, data['pts1'], C2, data['pts2']); assert P.shape == (N, 3), 'triangulate returns Nx3 matrix P' assert np.isscalar(err), 'triangulate returns scalar err' # 4.1 x2, y2 = sub.epipolarCorrespondence(im1, im2, F8, data['pts1'][0, 0], data['pts1'][0, 1])
# roots=np.roots([a0,a1,a2,a3]) # roots=np.real(roots) # print('roots=',roots) # # T = np.array([[1/M, 0, 0], # [0, 1/M, 0], # [0, 0, 1]]) # Farray=np.zeros([3,3,len(roots)]) # for i in range(len(roots)): # F=roots[i] * F1 + (1 - roots[i]) * F2 # # [U1, S1, V1] = np.linalg.svd(F) # # S1[2]=0 # # F = np.dot(U1,np.diag(S1)).dot(V1) # F=np.dot(np.transpose(T), F).dot(T) # Farray[:,:,i]=F # np.savez('../data/q2_2.npz', F=F, M=M, pts1=pts1,pts2=pts2) # return Farray if __name__ == '__main__': data = np.load('../data/some_corresp.npz') im1 = plt.imread('../data/im1.png') im2 = plt.imread('../data/im2.png') N = data['pts1'].shape[0] # N=110 M = 640 pts1 = data['pts1'] pts2 = data['pts2'] Farray = sub.sevenpoint(pts1[7:14, :], pts2[7:14, :], M) print('F=', Farray[:, :, 2]) helper.displayEpipolarF(im1, im2, Farray[:, :, 2])
import numpy as np import matplotlib.pyplot as plt import submission as sub import helper as hp data = np.load('../data/some_corresp.npz') im1 = plt.imread('../data/im1.png') im2 = plt.imread('../data/im2.png') K_matrices = np.load('../data/intrinsics.npz') N = data['pts1'].shape[0] M = 640 # 2.1 #F8 = sub.eightpoint(data['pts1'], data['pts2'], M) #hp.displayEpipolarF(im1,im2,F8) #F = F8 #2.2 F7 = sub.sevenpoint(data['pts1'][21:28, :], data['pts2'][21:28, :], M) hp.displayEpipolarF(im1, im2, F7) E = sub.essentialMatrix(F, K_matrices['K1'], K_matrices['K2'])