본문 바로가기
자율주행

[코딩] Python을 이용한 고전적 방식의 차선인식1_색상추출

by icebear3000 2023. 1. 1.
반응형

고전적 방식의 차선인식

1. 모듈 불러오기

 차선 인식을 위해 Python & OpenCV 환경을 이용하였고 필요한 함수나 전역변수 등이 포함된 파일을 불러온다. OpenCV모듈과 Python의 내장 함수 중 수학 함수인 math 모듈 그리고 행렬 처리를 위한 numpy를 불러온다. 모듈 이름이 너무 길거나 보기 불편할 때 as Name과 같이 사용하시면 긴 이름 대신 Name에 정의한 이름을 모듈 이름 대신 사용할 수 있다.

 

2. 색상 추출 및 노이즈 제거

<HSL>&nbsp; (hue 색도, saturation 채도, lightness 밝기)
<HSV>&nbsp; (hue 색도, saturation 채도, value값)

 

최종적으로 흰색과 노란색을 추출한 영상

 실제 도로 주행 환경에서는 빛의 세기, 장애물, 그림자 등 차선의 검출을 방해하는 요소들이 많다. 이러한 요소들은 정확한 차선 검출을 방해하고, 정확한 주행을 할 수 없게 한다. 노이즈의 영향을 줄이기 위해 GaussianBlur를 적용하고 특정 색상을 추출하는 전처리 과정을 거쳤다. 초기에는 영상의 색 공간을 cvtColor 함수를 이용해 색상 채널을 RGB에서 HSV로 변환하여 특정 색상 검출을 해보았다. 하지만 이 방법은 그늘진 부분이나, 흐린 날씨의 영상에서는 색상을 추출하는데 어려움이 있었다. 이러한 문제점을 해결하기 위해 색상 채널을 HSL로 변경해 카메라에 입력된 영상을 색상(Hue), 채도(Saturation), 밝기(Lightness) 성분을 이용하여 색상을 추출하였을 때 차선 인식률이 개선되었다. 색상 추출의 과정은 HSL 값의 최대, 최소를 정해주고 차선의 흰색 부분과 노란색 부분을 각각 따로 추출하여 따로 인식한 영상을 mask 변수를 이용하여 하나의 영상에 합쳐주었다.

참고사항.

 

색공간

 OpenCV에서 이미지를 불러오면 기본적으로 BGR 순서의 색공간을 사용하고 있다. 하지만, 이미지 전처리를 하기 위해서는 다양한 색공간을 사용할 필요가 있다. 그중 많이 사용하는 것이 GrayScale, HSV, HSL등 이 있다. 

 HSV는 Hue, Saturation, Value의 앞글자를 가지온 색공간이며, 기하학적으로 원통으로 표현할 수 있다. Hue는 색상의 종류(빨강, 녹색, 파랑 등), Saturation은 채도로 색상의 선명도, Value는 빛의 밝기를 나타낸다. RGB 색 공간보다는 좀 더 우리들이 색을 판단하는 과정과 유사한 것이 HSV 색 공간이다. 만약 색깔을 통해 이미지에서 어떤 물체를 검출하고 싶다면, RGB 공간보다는 HSV 공간이 적합하다.

 HSL은 색상 (Hue), 채도 (Saturation), 명도/휘도 (Lightness/Luminance)이다. 얼핏 보면 HSV와 비슷해보이지만 명도만 변형된 색공간이다. 밝기 (L)와 상관없이 채도 조절이 가능하고 HSV보다 밝기의 폭이 넓어 더 많은 밝기 표현 가능하다. 또한 밝기(L)는 HSV의 채도/명도에 영향을 주기도 하며, 포함한 빛의 양에 대한 측정값으로 휘도 등으로 표현할 수도 있다.


*휘도는 반사되는 빛의 양을 말하며, 쉽게 눈부심의 정도라고 할 수 있다.

 

블러링 기법

 블러링이란 영상을 초점이 맞지 않은 사진처럼 부드럽게 만드는 필터링 기법이다. 이는 영상에 존재하는 잡음의 영향을 제거하는 전처리 과정으로 많이 사용한다. 그 중 위 영상처리에서 사용된 블러링 기법은 가우시안 필터를 사용하는 블러링 기법이다. 

반응형

댓글