[2023-04-11] 3. 원근 변환과 슬라이딩 윈도우 기반 차선 인식
원근 변환과 슬라이딩 윈도우 기반 차선 인식
- Camera Calibration
- Bird’s Eye View
- 이미지 임계값 및 이진 이미지
- 슬라이딩 윈도우로 차선 위치 파악
- 파악된 차선 위치 원본 이미지에 표시
Camera Calibration
- 카메라 보정
- 카메라는 곡면 렌즈를 사용해서 이미지를 형성해서 가장자리가 왜곡되어 보이게 됨
- 렌즈, 렌즈-이미지 센서와의 거리, 렌즈와 이미지 센서가 이루는 각도 등 다양한 내부적 요인들로 인해 이미지의 왜곡 발생
- 물체의 크기, 모양이 변경되기도 하며, 시야의 위치에 따라 모양이 변경되기도 하고 실제보다 더 가깝거나 멀게 보이기도 함
- 이런 왜곡을 없에고 실제 우리 눈에서 보이는 것과 같게 보정하는 작업(왜곡된 지점을 왜곡되지 않은 지점으로 Mapping)
- 카메라는 곡면 렌즈를 사용해서 이미지를 형성해서 가장자리가 왜곡되어 보이게 됨
- Camera Calibration을 위해 체스판 이미지를 사용
- 체스판 이미지는 규칙적이고 대비와 패턴이 강해 에러 감지에 용이
-
자동으로 체스 판을 찾아서 패턴을 매핑
- findChessboardCorners() : 체스판의 코너들을 찾음
- drawChessboardCorners() : 찾은 체스판의 코너들을 그림
-
아래 사진을 보면 체스판의 코너들을 찾고 그린 것을 확인할 수 있음
-
교정 및 undistortion을 계산
- cv2.calibtrateCamera() : camera matrix, 왜곡 계수, 회전/변환 벡터들을 리턴
-
cv2.undistort() : 이미지를 펴서 왜곡이 없어지게 함(교정)
- 아래 사진을 보면 살짝 뚱뚱한 체스판이 반듯해짐
- 체스판으로 진행한 Camera Calibration
- 양쪽으로 볼록한 모양의 체스판이 반듯해짐
- 차선 이미지로 진행한 Camera Calibration
- 변화된 것이 확 다가오진 않지만 노란색 줄이 좀 반듯해졌고 양쪽으로 볼록한 부분을 펼치다보니, 오른쪽의 차가 잘려나간 것을 확인할 수 있음
Bird’s Eye View
- 새가 하늘에서 내려다보는 듯한 구도로 위에서 아래를 내려다 보는 방식
-
선의 곡률을 측정하기 위해서 도로 이미지를 하향식 보기로 변환
-
원근행렬 변환 M을 계산하기 위해 소스 및 대상 지점이 주어지면
-
cv2.getPerspectiveTransform(src,dst) : 원근변환 행렬을 구하고 이동 전 좌표(src)를 이동 후 좌표(dst)로 투시 변환함
-
cv2.getPerspectiveTransform(dsr,src) : 역 원근 변환 계산을 함(src와 dst의 값의 위치를 바꿈)
-
cv2.warpPerspective(img, M, img_size, flags=cv2.INTER_LINEAR) : 앞서 계산한 원근변환의 이미지를 뒤틀어 원하는 구도로 변환함
-
이미지 임계값, 이진 이미지
- 차선이 명확하게 보이는 이미지를 생성하기 위해서 색상 임계값을 조절
- 이미지를 흰색과 노란색으로 마스킹
-
Gray Scale로 변환하여 이진 이미지를 생성함
- HSV
- H : 색조 S : 채도 V : 명도
- 명도가 낮을 수록 검은색(0,0,0), 명도가 높고 채도가 낮을 수록 흰색(0,0,100)으로 표현
- LAB
- 사람 눈이 감지할 수 있는 색차와 색공간에서 수치로 표현한 색차를 거의 일치시킬 수 있는 색공간
- L : 명도 A : RED & GREEN 값 B : YELLOW & BLUE 값
- 노란색 차선을 인식할 때 B 값을 사용하면 좋은 성능을 냄
- HSL
- H : 색조 S : 채도 L : 밝기
- 밝기가 낮을 수록 검은색, 밝기가 높을수록 흰색으로 HSV 와 유사함
- 흰색 차선을 인식할 때 L 값을 사용하면 좋은 성능을 냄
슬라이딩 윈도우로 차선 위치 파악
- 히스토그램 방법으로 차선 식별
- 도로 이미지에 보정, 임계값 및 원근변환을 적용하여 차선이 두드러지는 이진 이미지를 얻음
- 얻은 이진 이미지에서 어떤 픽셀이 라인의 일부이고, 이게 왼쪽 라인인지 오른쪽 라인인지 결정해야함
- 각 열에 따라 픽셀 개수를 더하면 히스토그램에서 가장 눈에 띄는 두개의 peark 생성되고, 차선의 x 위치를 파악할 수 있음
- 슬라이딩 윈도우
- 선 중심 주변에 배치된 슬라이딩 윈도우를 사용하여 프레임 상단까지 선을 찾아 따라 감
- 한 위도우 안에서 감지되는 선의 중심을 기준으로 계속 윈도우가 쌓임
- 다음 위도우의 x 값은 현재 위도우 안의 모든 점들의 x 값들의 평균 값으로 그림
- 슬라이딩 윈도우가 여러개 쌓이면 그 중심을 연결해서 선을 그릴 수 있는데 polyfit을 사용하여 2차원 함수로(ay^2+by^2+c=x) 표현할 수 있음
변환 과정 총 정리
- 오리지널 이미지 Camera Calibration
- Yellow, White 마스킹
- Bird’s Eye View 및 이진화
- 히스토그램 및 Sliding Window, Polyfit으로 2차원 함수 구하기
- 2차원 함수로 Polygon을 그리고 녹색으로 칠하기
- Result 이미지