# 2D -> 3D 身體骨架資訊
> 非平行照片,高度不同、仰角不同
## 流程
1. 給定 對應點 ,計算 Fundamental Matrix
2. 給定 對應點 ,計算 Essential Matrix
3. 給定 F / E ,計算 Rotation Matrix
## A. Fundamental Matrix
```python=
def Find_Fundamental_matrix(first_input, second_input, img1, img2):
# Use The function to gain the fundamental matrix,in order to the next step extracting {R|T} from fundamental matrix
Max_length_img1 = max(img1.shape[0],img1.shape[1]) # Extract max length from image sizes,in order to normalize our input getting results more stable
Max_length_img2 = max(img2.shape[0],img2.shape[1])
first_img_coordinate = [] # coordinates in first image
second_img_coordinate = [] # coordinates in second image
# Normalization
for i in range(len(first_input)):
first_img_coordinate.append([first_input[i][0]/Max_length_img1, first_input[i][1]/Max_length_img1,1/Max_length_img1])
for i in range(len(second_input)):
second_img_coordinate.append((second_input[i][0]/Max_length_img2, second_input[i][1]/Max_length_img2,1/Max_length_img2))
# calculate kronecker
A = []
for i in range(len(first_img_coordinate)):
A.append(np.transpose(np.kron(first_img_coordinate[i], second_img_coordinate[i])))
# singular value decomposition
U, D, V = svd(np.array(A))
# approximate F, possibly regular
Fa = np.reshape(V[:,8],(3,3))
return Fa
```