오늘 차선 검출에 도전할 이미지는 아래와 같습니다.
지금까지 우리가 구현한 알고리즘을 적용하면 아래와 같은 차선이 검출됩니다.
위 이미지에서는 오른쪽으로 굽은 곡선이 검출되어야겠네요.
곡선을 길이가 충분히 짧은 직선의 집합이라고 본다면 저 차선을 수평으로 몇개의 구간으로 나눈다음 각 구간에서 차선을 구하고 부드럽게 이어주면 곡선이 되지 않을까요?
아래와 같은 과정으로 시도해 보겠습니다.
1. 지금까지와 같은 과정으로 차선과 소실점을 검출한다.
2. 왼쪽 하단점, 소실점, 오른쪽 하단점이 이루는 삼각형의 위쪽, 즉 소실점에서 삼각형의 높이 / 2 구간에서 다시 차선을 검출한다.
- 빨간색이 구해진 차선
- 노란색이 구해진 차선
- 녹색이 구해진 차선
마지막으로 그려질 녹색선은 베지어 곡선으로 처리해서 부드럽게 그릴 수 있겠지만 우선은 위의 예상도처럼 원하는대로 되는지 시도해봅시다.
먼저 2단계 빨간선 검출부터 시작합니다.
처음 차선을 구할 때에는 관심영역을 이미지의 아래쪽 절반으로 잡았지만 2단계 선을 구할 때에는 관심영역이 달라집니다.
소실점에서 이미지 하단까지의 절반(위 예상도에서 빨간색 사각형 영역)이 2단계의 ROI가 됩니다.
최초 파란색 차선을 검출할 때의 ROI:
imageROI = grayImg(cv::Rect(0, grayImg.rows / 2, grayImg.cols, grayImg.rows / 2));
두번째 빨간색 차선을 검출할 때의 ROI:
imageROI2 = grayImg(cv::Rect(0, banishP.y, grayImg.cols, (grayImg.rows - (banishP.y + (grayImg.rows - banishP.y) / 2))));
2개의 ROI를 원본 이미지와 비교하면서 어느 영역을 관심영역으로 잡았는지 유심히 확인해 주세요.
두번째 단계를 거쳐서 결과를 보면 아래와 같이 2개의 차선이 검출됩니다.
이런 방식으로 ROI를 조금씩 변경하면서 차선을 구하고, 이렇게 구해진 차선과 이전에 구한 차선을 결합하여 최종 차선의 형태를 만들어 나가는 겁니다.
오늘은 여기까지하고 다음 글에서 곡선 구하기를 완성해보겠습니다.




덧글
다름이 아니라 차선검출에 관련된 게시물들이 너무 자세하고 설명이 좋아 감사하다는 말씀을 드리고싶어서입니다!
또 혹시 아직도 오류부분을 수정중에 계신지요? 수정을 하셨다면 그 결과물이 너무너무 궁금합니다 ㅎㅎ