[2023-06-28] 영상처리 기반 자이카 정지선 인식
영상처리 기반 정지선 인식
정지선을 감지하기 위해?
- 정지선 색 찾기
- 흰색
- 노란색
- 도로 위에 있는 너비가 큰 직사각형을 찾기
- 횡단보도가 있다면, 횡단보도와 정지선 구분
HSL
- 색조 밝기 채도 모델
- L 채널 : 밝기를 표시하여 흰색을 찾는데 유용하게 사용 -> 차선, 정지선을 찾는데 유용함
LAB
- 인간이 인지하는 밝기, 적록색, 황청색의 조합으로 표현
- 일반적으로 피부색을 찾는데 많이 사용 -> 노란색 차선을 찾는데 유용함
흰색 감지
- white.py
#!usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
original = cv2.imread("white.png", cv2.IMREAD_UNCHANGED)
H, L, S = cv2.split(cv2.cvtColor(original, cv2.COLOR_BGR2HLS))
_, H = cv2.threshold(H, 125, 255, cv2.THRESH_BINARY)
_, L = cv2.threshold(L, 125, 255, cv2.THRESH_BINARY)
_, S = cv2.threshold(S, 125, 255, cv2.THRESH_BINARY)
cv2.imshow("original", original)
cv2.imshow("H", H)
cv2.imshow("L", L)
cv2.imshow("S", S)
cv2.waitKey(0)
cv2.destroyAllWindows()
- L 채널이 흰색의 선명도가 가장 좋음
노랑색 감지
- yellow.py
#!usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
original = cv2.imread("yellow.png", cv2.IMREAD_UNCHANGED)
L, A, B = cv2.split(cv2.cvtColor(original, cv2.COLOR_BGR2LAB))
_, L = cv2.threshold(L, 156, 255, cv2.THRESH_BINARY)
_, A = cv2.threshold(A, 156, 255, cv2.THRESH_BINARY)
_, B = cv2.threshold(B, 156, 255, cv2.THRESH_BINARY)
cv2.imshow("original", original)
cv2.imshow("L", L)
cv2.imshow("A", A)
cv2.imshow("B", B)
cv2.waitKey(0)
cv2.destroyAllWindows()
- B 채널 황색의 선명도가 가장 좋음
카메라 캘리브레이션
- 이미지 처리 기능의 구현에는 일반화 작업이 중요
- 카메라 캘리브레이션은 일반화 작업에서 매우 중요한 요소
자이카 ROS Camera Calibration
- 체크보드 A4 용지 준비 (https://cafe.naver.com/xytron/311)
$ roslaunch usb_cam usb_cam-test.launch
자이카 리눅스 콘솔창에 usb_cam 노드를 실행$ rosrun camera_calibration cameracalibrator.py -size 8x6 -square ① image:=/usb_cam/image_raw camera:=/usb_cam
을 입력해 ROS Camera Calibration Program 실행- Camera Calibration Program에 우측 상단의 4가지 Bar가 녹색이 될 때 까지 체크보드 A4 용지를 움직임
- ROS Camera Calibration 프로그램 캘리브레이션에 필요한 데이터를 최소한으로 충족하게 되면, 동그라미 버튼이 활성화됨
- Calibrate 버튼을 누르면 지금까지 모은 데이터를 토대로 캘리브레이션 수치를 만듬
- Save 버튼을 누르면 /tmp/calibrationdata.tar.gz 경로에 저장됨
- 경로에 들어가 calibrationdata.tar.gz 파일의 압축을 풀고 저장되어있는 ost.yaml 파일 열기
- camera_matrix와 distortion_coefficients를 확인
countNonZero 활용
- 횡단보도와 정지선의 차이