6/11/2011

자동 차종 분류

. 구현 플랫폼

  • C# - 코드 작성에 사용
  • Windows 7 - OS
  • VisualStuio2010 – 코드 개발에 사용
  • EmguCV – openCV 라이브러리의 C#버전, 이미지 프로세싱에 사용
  • .NET Framework v3.5 – 개발 프레임워크

     

    나. 구현 목표

    본 프로젝트는 아래 표와 같이 차종을 분류하는 것을 목표로 한다.

    image
    그림 1. 차량 분류표

     

    자동차 제원 설명

    image
    그림 2. 자동차 제원 관련 용어

  • 전장: 자동차의 앞쪽 끝에서 뒤쪽 끝부분까지의 수평길이
  • 전폭: 자동차의 가로폭이 가장 넓은 부분 수평폭
  • 전고: 자동차의 접지면으로부터 가장 높은 부분까지의 높이
  • 축거: 앞 차축의 중심점과 뒤차축의 중심점 사이의 거리
  • 윤거: 왼쪽 타이와 오른쪽 타이어의 중심점 사이의 거리
  • 차축: 바퀴 축의 개수

    위 자동차 제원중 본 프로그램에선 전폭, 전고, 차축을 이용해 차종을 구분한다.

     

    차량 분류 순서

    아래와 같은 방식으로 차량을 분리한다.

    image
    그림 3. 차량 분류 순서도

     

    다. 프로그램 소개

    1) UI부분

    프로그램 UI는 다음과 같이 구성되어 있다.

    좌측: 자동차 썸네일 이미지(상), 자동차 이미지 프로세싱 결과(중), 분석결과(하)
    우측: 옵션(도움말, 이미지 폴더지정, 이미지 프로세싱 옵션, 차종분류 옵션)

    본 프로그램은 선택된 폴더 안의 [5자리 숫자]_[side | front].jpg 과 같은 형식을 가지는 파일명만을 불러온다. (ex- 00111_side.jpg, 00001_front.jpg)

    image
    그림 4. 프로그램 UI

     

    2) 전면사진을 통한 차량의 상대적인 높이, 너비 측정

    image
    그림 5. 전면사진 이미지 프로세스 과정

     

    2-1) 전면사진 분석 과정

    전면사진을 통해 차량의 상, 하, 좌, 우를 검출하고 이를 토대로 높이와 너비를 계산하는 순서는 ‘그림 5. 전면사진 이미지 프로세스 과정’과 같다. 이 과정을 다시 글로 설명하면 아래와 같다.

    · 차량의 전면 원본사진을 얻는다.

    · 원본사진을 흑백사진으로 변환한다.

    · 변환된 흑백사진을 가지고 Canny Edge 검출을 수행한다.

    · 검출된 가장자리 사진을 가지고 Hough Line 검출을 수행한다.

    · 검출된 라인들 중에서 가로(파랑), 세로(빨강) 라인 성분만을 추출한다.

    · 추출된 라인들 중에서 가장 왼, 오른, 위, 아래쪽 가장자리를 추출한다.

          o 왼쪽: Point(x, y)중에서 x값이 가장 작은 세로 라인을 찾는다.

          o 오른쪽: Point(x, y)중에서 x값이 가장 큰 세로 라인을 찾는다.

          o 위쪽: Point(x, y)중에서 y값이 가장 작은 가로 라인을 찾는다.

          o 아래쪽: Point(x, y)중에서 y값이 가장 큰 가로 라인을 찾는다.

    · 추출된 상, 하, 좌, 우 라인을 원본이미지에 그린다.

     

    2-2) 전면사진 분석 관련 매개변수

    Canny Edge 검출을 위해 사용하는 매개변수는 아래와 같다. 이 매개변수는 Hysteresis의 Khigh 와 Klow 에 해당한다.

    · cannyThreshold: Khigh. Edge Chain의 시작점을 결정할 때 쓰이는 Threshold Value

    · cannyThresholdLinking: Klow. Edge Linking을 할 때 쓰이는 Threshold Value

     

    Hough Line 검출을 위해 사용하는 매개변수는 아래와 같다.

    · rhoResolution: 위 Hough Space 식에서 d의 간격

    · thetaResolution: 위 Hough Space 식에서 θ 의 간격

    · threshold: 추출하고자 하는 라인픽셀의 합

    · minLineWidth: 추출하고자 하는 라인의 최소 길이

    · gapBetweenLines: 추출하고자 하는 라인들 사이의 최소 길이

     

     

    3) 측면사진을 통한 차량의 차축 측정

    image
    그림 6. 측면사진 이미지 프로세스 과정

    3-1) 측면사진 분석 과정

    측면사진을 통해 차량의 바퀴 개수를 검출한다. 바퀴를 검출하는 순서는 ‘그림 6. 측면사진 이미지 프로세스 과정’과 같다. 이 과정을 다시 글로 설명하면 아래와 같다.

    v 차량의 바퀴 주변 사각영역을 추출하는 과정

    · 차량의 측면 원본사진을 얻는다.

    · 원본사진을 흑백사진으로 변환한다.

    · 흑백사진의 각 Row마다 Intensity 변화율을 검사해 바퀴부분이 있는 Row를 검출한다. 각 Row마다 다음 작업을 수행한다.

    o Row[x] 와 Row[x+1] 의 Intensity 차이가 사용자가 지정한 RowChangeRate를 넘으면 Count를 증가시킨다.

    · 각 Row에서 검출된 Count의 평균을 구한다.

    · 각 Row마다 ‘Count평균+10’보다 큰 Count를 가지는 Row들을 추출한다.

    · 위 과정을 통해 추출된 Row들에서 상한과 하한을 정한다.

          o 상한: 해당 Row아래로 사용자가 지정한DetectRange사이에 줄이 또 존재하면 상한으로 설정 (줄이 없다면 노이즈로 판단해 무시)

          o 하한: 해당 Row 위로 사용자가 지정한 DetectRange 사이에 줄이 또 존재하면 하한으로 설정 (줄이 없다면 노이즈로 판단해 무시)

    · 검출된 상한과 하한을 가지고 바퀴 주변영역을 표시한다. (그림 6. (c)참조)

    ·

    v 위에서 추출된 바퀴 주변 영역에서 바퀴를 추출하는 과정

    · 빼기 이미지 프로세스를 통해 ‘그림 6. (d)’와 같은 그림을 얻는다.

    · 얻어진 그림에 Hough Circle 검출을 수행한다.

     

    2-2) 측면사진 분석 관련 매개변수

    바퀴 주변영역 추출을 위해 사용하는 매개변수는 아래와 같다.

    · rowChangeRate: p(x, y)와 p(x+1, y)의 Intensity 차이가 rowChangeRate보다 크면 Count를 증가시키는 역할.

    · detectRange: 바퀴 주변영역의 상한과 하한을 정할 때 사용하는 변수

     

    2-3) 측면사진 바퀴 주변영역 추출원리

    바퀴 주변영역을 추출하는 과정에 대해 좀 더 알아보자.

    image
    그림 7. 바퀴 영역 밖의 Intensity 변화율

    image
    그림 8. 바퀴 영역의 Intensity 변화율

    image
    그림 9. Intensity 변화율에 따른 Row 분포

    ‘그림 7’ 과 ‘그림 8’을 비교해 보면 바퀴 영역에서 Intensity의 변화가 심한 것을 알 수 있다. ‘그림 9’에서는 Intensity 변화율이 큰 Row는 녹색으로 설정하고, Intensity 변화율이 평균인 Row는 분홍색으로 설정하였다.

    이렇게 추출된 녹색 Row들에서 상한과 하한을 정하고 ‘그림 6. (c)’ 처럼 바퀴 주변영역을 정하게 된다. 바퀴 주변영역이 정해지면 Hough Circle을 통해 바퀴부분을 추출한다.

     

     

    . 결과 분석

    1) 프로그램 테스트

    인천 연안부두, 인하대학교 주변에서 직접 찍은 차량의 전면, 측면 사진을 기반으로 프로그램 테스트를 실시했다.

    직접 찍은 사진의 경우 배경으로 인해 정확한 결과를 추출할 수 없었다. 따라서 차량 외의 배경 부분을 단순화 시켰고, 아래의 실험결과를 얻을 수 있었다.

    image
    그림 10. 경차(6종) 분류 결과 1

    image
    그림 11. 경차(6종) 분류 결과 2

    image
    그림 12. 2종 차량 분류 결과

    image
    그림 13. 1종 차량 분류 결과

    image
    그림 14. 5종 차량 분류 결과

    주어진 그림 모두 알맞은 차종을 분류한 것을 확인할 수 있다.

     

    2) 개선점

    ㄱ. 정확한 자동차 제원 측정

    테스트에 이용했던 사진은 사진기와 차량간의 거리가 일정하지 않아 자동차의 제원을 측정하기가 어렵다. 하지만 톨게이트와 같은 장소에서 사진기를 설치하고 일정 위치에 자동차가 위치했을 때 사진을 찍는다면, 차량의 정확한 제원을 파악할 수 있을 것이다.

    또 다른 대안으로는 Stereo Camera를 이용해 자동차 제원을 분석하는 방법도 있다.

    ㄴ. 복잡한 배경으로 인한 자동차 검출의 어려움

    프로그램 테스트에서 이용한 이미지는 각기 다른 배경을 가져 차량만을 인식하기 힘들기 때문에 배경을 단순화 시켜 테스트했다. 하지만 실제로는 톨게이트와 같은 고정된 장소에서 차량을 분류하므로 Image Subtraction을 통해 배경을 제거한 차량 이미지를 얻을 수 있다.

    또 다른 대안으로는 Face Recognition과 같은 방식으로 차량 인식을 통해 배경을 제거할 수 있다.

    ㄷ. 정교한 바퀴영역 추출의 어려움

    바퀴 사이에 원과 비슷한 도형이 있으면 그것 또한 바퀴로 인식되므로 이를 피하기 위해서 가로 Intensity 변화만을 감지했던 기존 프로그램에 세로 Intensity 변화 감지를 더해 바퀴 영역을 추출할 수 있다.

     

    소스코드 및 실행파일 보러가기

  • 댓글 없음:

    댓글 쓰기