도로주행 영상에서 신호등 검출하기
개요
주행용 신호등이 초록불일 때 차도를 건너고 있는 보행자가 있는지 여부를 파악하기 위해 도로주행 영상을 이용하여 신호등 검출과, 해당 신호등이 빨간불인지 초록불인지 파악하는 프로젝트를 진행한다.
설계
1. 수집 대상 데이터
1) 사람이 갑자기 등장하지 않는 영상
2) 속도가 시속 50km/h 이하인 영상 (너무 빠르지 않는 영상)
3) 신호등 형태 판별이 가능한 영상
2. 신호등 인식을 위한 자료 참조
1) HSV/YCbCr 생상 모델과 형태적 특징 기반 신호등 인식
https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE072048162
2) 주변 환경에 강인한 신호등 검출 및 인식
https://library.yonsei.ac.kr/search/detail/CATTSS000001752063
3. 동작
1) 주행 영상에서 신호등 점등영역 추출
-> BGR 색상 모델을 HSV 색상 모델로 바꾸고, 색상 마스크를 이용하여 신호등 점등 영역 검출
2) 주행 영상에서 신호등 배면판 후보군 검출
-> 주행 영상에 스레시홀딩을 적용하여 바이너리 이미지로 변환하고, Blob 필터를 이용하여 신호등 배면판 후보 (직사각형) 추출
3) 신호등 후보군 검출
-> 신호 점등영역 추출 과정을 통해 얻은 영역이 신호등 배면판 후보군 내에 존재할 경우를 최종 교통 신호등이라 판단
구현
0. 사용 영상
https://www.youtube.com/watch?v=YEH2Ie8b6gQ
1. 주행 영상에서 신호등 점등영역 추출
1) BGR 색상 모델 -> HSV 색상 모델 변환
2) ROI 영역 설정 (처리 속도 향상을 위함)
3) 녹색 영역 추출
2. 주행 영상에서 신호등 배면판 후보군 검출
1) BGR 색상 모델로부터 흑색 영역 추출
* 오츠 알고리즘이 아닌 다른 스레시홀드를 적용할 경우 다음과 같은 이미지가 생성된다.
2) 모폴로지 연산을 이용한 배면판 내부 채움 (적용 x)
참고 자료의 경우 배면판 내부 채움을 적용할 부분이 있었지만, 실제 사용한 영상에서는 채울 부분이 보이지 않아 적용하지 않았다.
3) 배면판 후보 검출
Laplacian 필터를 적용하여 경계를 검출하고,이후 Blob 필터를 이용하여 배면판 후보를 검출하였다.
3. 신호등 후보군 검출
-> 1번과 2번에서 검출한 영역들 중 겹치는 영역을 신호등 후보군이라고 판단한다.
· 판단 결과
4. 데모
프로젝트를 통해 배운 점
1. SimpleBlobDetector 파라미터 조절 방법
2. OpenCV 여러 필터들에 대한 개념, 이해
소감
노이즈가 별로 없고, 원하는 대상 검출이 잘 되는 이미지들로만 OpenCV 실습을 하다, 실제 주행영상을 사용하여 검출을 해보니 심한 노이즈, 원치 않는 배경 등으로 인해 신호등 검출에 어려움을 겪었고, 당혹감을 느꼈었다. 이에 신호등 검출을 잘하기 위해 여러 필터를 바꾸고, 블롭 필터 파라미터 값을 변경하면서 정확도 높이는데 초점을 맞추게 되었고, 생각했던 것만큼 더 많은 기능을 구현하지 못한 것이 아쉬운 점으로 남았다.
추가로 작업할 내용
1. Blob 필터 적용시 특징점에 해당하는 대상의 가로, 높이 구하는 방법 연구
2. x1, x2, y1, y2 좌표를 이용한 교차점을 구할 때, 두 직사각형의 겹치는 교차점 개수 구하는 방식으로 구현해보기
3. 신호등 검출 시, 해당 신호등이 빨간불인지 초록불인지 자동으로 인식하도록 구현