예제 #1
0
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)
예제 #3
0
 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
예제 #4
0
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)
예제 #5
0
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
예제 #6
0
    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)
예제 #7
0
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])
예제 #8
0
#     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])
예제 #9
0
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'])