우리의 목표는 안드로이드폰과 아두이노를 통해 길을 찾아가는 자동차(실제크기는 아니에요 ㅠㅠ)를 만드는 것이다.
1.Lane Detection 알고리즘
-사진으로 설명을 하자
이게 안드로이드 핸드폰으로 들어온 사진이라고 하자.
우리는 이 사진을 Gray로 변환시키고 Gaussian Blur를 사용하여 경계를 최대한 없앤 후,
Canny Edge를 통해 경계를 찾아 이를 HoughLines로 경계를 찾아 이를 통해 길을 찾고, 얻은 데이터를 이용하여 Arduino를 Control 하는 것 이다.
Gray Conversion
Gaussian Blur

Gaussian Blur 5*5
Gaussian Blur 11*11
Gray이미지와 Gaussian Blur 두 이미지의 차이가 육안으로 보기엔 거의 차이가 없어보인다.
하지만 각각의 이미지들에 Canny edges를 적용하면
Canny Edges
Gray에 바로 Canny입힌것Gaussian Blur 5*5에 Canny 입힌것
Gaussian Blur 11*11에 Canny입힌것
이처럼 눈에 보이지 않는 차이가 나는 것을 알 수 있다.
그리고 절반 아래의 부분에서의 데이터만 이용해도 길을 찾을 수 있다는 것을 알 수 있다.
이를 기반으로 11*11Blur를 이용하여 HoughLines를 사용하면
HoughLines
이처럼 길을 찾을 수 있다.
2.Android Studio에 적용하기
우선 개발환경은:
Ubuntu 15.10
Android studio 1.5.1
OpenCV 3.1.0
Android studio에서 주로 사용하는 언어가 Java임은 자명하지만 OpenCV는 C++기반의 오픈소스이므로 NDK를 이용하여 개발하는 것이 효율적 이다.
물론 Java의 Class를 사용하는것도 나쁘지 않지만, 알려진 Sample들이 모두 C++기반인 점과 Java의 Class들도 기본적으로 NDK가 적용됨을 고려하면 코드를 NDK로 작성하는게 효율적으로 보인다.
이정도를 참고해서 활용하자
3.시연 동영상
4.개선점
동영상을 보면 알겠지만 카메라가 왼쪽으로 치우쳐 있어서 오른쪽으로 쏠린채로 움직인다
이 점을 개선해야 하고 급한 커브를 돌 수 없는 점을 개선해야한다.
소스코드 GitHub