<aside> 💡
2019115562 서보건
</aside>
<aside> ⚔️
[과제 개요]
Stereo Matching 구현 시, opencv 등의 컴퓨터비전 라이브러리에서 제공하는 Stereo Matching 함수를 사용하지 말고, SSD 등의 매칭 함수, epipolar line 상의 탐색 등 주요 알고리즘을 직접 구현할 것
</aside>
<aside> ☝
[특징]
현재 과제에서 제공된 사진들의 특징이라고 한다면, 좌우의 카메라에서 촬영된 사진은 좌우카메라가 translation만이 차이가 있다.
이러한 환경에서의 특징은 좌우 픽셀의 epipolar line이 정확하게 일치한다는 점이다.
따라서, disparity를 계산할 때, y의 좌표는 고정하여 좌우만을 탐색하여 구할 수 있다.
</aside>
전체코드
1 import cv2
2 import numpy as np
3 import matplotlib.pyplot as plt
4 from tqdm import tqdm
모든 라인별 설명
1 import cv2 -> 이미지를 읽어오기 위해 추가
2 import numpy as np -> 이미지를 배열로 변환하고, numpy의 연산들을 사용하기 위해 추가
3 import matplotlib.pyplot as plt -> 결과를 시각화하고, color map으로 사용할 수 있도록 하기 위해 추가
4 from tqdm import tqdm -> disparity map을 계산하는데 진행상황을 시각적으로 알 수 있도록 하기 위해 추가
전체코드
1 left_path = './data/left.png'
2 right_path = './data/right.png'
3 numDisparities = 48
4 blockSize = 25
5
6 imgL = cv2.imread(left_path)
7 imgR = cv2.imread(right_path)
8
9 imgL_gray = cv2.cvtColor(imgL, cv2.COLOR_BGR2GRAY)
10 imgR_gray = cv2.cvtColor(imgR, cv2.COLOR_BGR2GRAY)
11
12 plt.figure(figsize=(15, 5))
13
14 plt.subplot(1, 2, 1)
15 plt.imshow(imgL_gray, cmap='gray')
16 plt.colorbar()
17 plt.title('Left Image')
18
19 plt.subplot(1, 2, 2)
20 plt.imshow(imgR_gray, cmap='gray')
21 plt.colorbar()
22 plt.title('Right Image')
23
24 plt.show()
모든 라인별 설명
1 left_path = './data/left.png' -> 왼쪽 이미지의 경로를 저장
2 right_path = './data/right.png' -> 오른쪽 이미지의 경로를 저장
3 numDisparities = 48 -> disparity 범위 설정
4 blockSize = 25 -> window 사이즈 설정
🔼 조정할 수 있는 변수들을 저장
6 imgL = cv2.imread(left_path) -> 왼쪽 이미지를 경로를 통해 읽어오기
7 imgR = cv2.imread(right_path) -> 오른쪽 이미지를 경로를 통해 읽어오기
8
9 imgL_gray = cv2.cvtColor(imgL, cv2.COLOR_BGR2GRAY) -> 왼쪽 이미지를 BGR format에서 GRAY format으로 변환
10 imgR_gray = cv2.cvtColor(imgR, cv2.COLOR_BGR2GRAY) -> 오른쪽 이미지를 BGR format에서 GRAY format으로 변환
🔼 cv2.imread를 통해서 이미지를 읽어오면 내부적으로 BGR format으로 저장하기 때문에 이를 다시 cv2.COLOR_BGR2GRAY를 통해서 GRAY format으로 저장해줄 필요가 있다.
12 plt.figure(figsize=(15, 5)) -> (15, 5) 크기의 figure를 생성
13
14 plt.subplot(1, 2, 1) -> 1열 2행중 1행에 subplot을 생성
15 plt.imshow(imgL_gray, cmap='gray') -> (imgL_gray)를 grayscale colormap 형태로 출력
16 plt.colorbar() -> 색상막대를 출력
17 plt.title('Left Image') -> 제목을 추가
18
19 plt.subplot(1, 2, 2) -> 1열 2행중 2행에 subplot을 생성
20 plt.imshow(imgR_gray, cmap='gray') ->(imgR_gray)를 grayscale colormap 형태로 출력
21 plt.colorbar() -> 색상막대를 출력
22 plt.title('Right Image') -> 제목을 추가
23
24 plt.show() -> 전체 figure를 화면에 출력
🔼 왼쪽 이미지와 오른쪽 이미지가 정상적으로 읽어졌는데 plt를 통해서 확인