A vision system for an ADAS

Hyungseop Lee·2023년 6월 2일
0

[INU, 3-1] 센서공학

목록 보기
12/12

Introduction

  • ADAS : Advanced Driving Assistance System

    • LDWS : Lane Departure Warning System ➡️ 소리 경고
    • LKAS : Lane Keeping Assistant System
  • Road, lane, lane line

  • There are many ways to detect lane lines using vision systems.

    • Canny Edge Detection
    • Hough Transform Algorithm

Lane Detection

  • FSC(Forward Sensing Camera)

    • A typical lane detection uses a forward sensing camera.
    • Lane lines and the ground can be distinguished by color difference.
    • Lane can be detected by segment detection from the edge image.
  • Vanishing Poing : There is a horizontal line...

    • horizontal line 위의 부분은 lane line와 상관없는 image 영역.
    • horizontal line 아래 부분은 lane line이 있는 image 영역
      ➡️ 따라서 ROI(Region On Interest)만 보기 위해 image를 horizontal line을 기준으로 Cropping

Canny Edge Detection

  • Edge Detector requires the following three criteria
    1. Low error rate of detection
    2. Localization of the edge points
    3. Single response

Edge Detection by derivative operations

  • Lane Line Detection by derivative operations
    • 두 번 차분하여 Zero Crossing Point를 찾을 수 있기 때문에
      Lane Line의 흰 색이 언제 시작되었고, 언제 끝났는지에 대한 정보를 얻을 수 있다.
      ➡️ Edge line을 detection 가능

Process

  • The Canny Edge Detection Algorithm consists of the following stages

gray scale image

  • 우리의 목적은 Lane Line Detection이기 때문에
    Edge의 Color image를 사용할 필요가 없다.

Gaussian Filter

  • 정규분포 : Gaussian Distribution. (mu=?, sigma=?)

  • 표준정규분포 : Normalized Gaussian Distribution. (mu=0, sigma=1)

    • sigma가 크면, spread 정도 큼.
    • sigma가 작으면, spread 정도 작음.
  • Image에 Gaussian Filter를 왜 씌우는가?
    ➡️ filter를 통해 주변에 있는 8개의 information을 축소, 가운데 있는 대표값을 최대화하기 위해서

    • sigma=5, size=[5 x 5]인 filter g1 ➡️ symmetric matrix가 만들어짐을 확인할 수 있다.
    • g1을 input image와 convolution 연산하여
      가운데에 있는 data를 크게, 주변 8개의 data를 작게 하여 가운데 data를 대표값으로 끄집어낸다.
  • Gaussian Filter Test

    • Case 1 : fspecial('gaussian', (size of filter=[5, 5]), (sigma=[5]))
    • Case 2 : fspecial('gaussian', (size of filter=[5, 5]), (sigma=[10]))
    • Case 3 : fspecial('gaussian', (size of filter=[11, 11]), (sigma=[5]))

      ➡️ sigma값이 클수록, blurring(흐릿한) 현상이 커지는 것을 확인

Sobel Operator

  • Calculating the gradients GxG_x and GyG_y

    • 모든 방향의 edge 추출
    • noise에 강함
    • 수직, 수평 edge보다 대각선 방향 edge에 더 민감.
    • mask size는 다양하게 가능 (3x3, 5x5, 7x7)
  • Sobel Mask X == 수직 방향 Edge 검출
    Sobel Mask Y == 수평 방향 Edge 검출

  • Example

%% 2_1. Calculating gradient with sobel mask
sobelMaskX = [-1, 0, 1; -2, 0, 2; -1, 0, 1];    % 수평 방향(x) 미분 filter -> 수직 방향 edge 검출
sobelMaskY = [1, 2, 1; 0, 0, 0; -1, -2, -1];    % 수직 방향(y) 미분 filter -> 수평 방향 edge 검출 
% Convolution with horizontal and vertical filter
G_X = conv2(img1, sobelMaskX, 'same');
G_Y = conv2(img1, sobelMaskY, 'same');

Magnitude of the gradients

  • 수평 및 수직 성분 기울기의 크기 == edge의 세기
    Euclidean distance == 대각선의 크기, 대각선 edge에 민감
    ➡️ Road에 대한 사진은 원근법으로 인해 Lane Line이 대각선으로 보이기 때문에
    위에서 Sobel Mask를 써서 구한 Gx,GyG_x, G_y의 Euclidean distance를 구하여 Magnitude를 구할 것이다.
    • 위 그림에서 알 수 있듯이, edge의 세기가 클수록 명확한 edge를 의미.

Angle of the gradients

  • 아래 그래프에서 처럼 오른쪽 lane line, 왼쪽 lane line은 대각선의 형태일 확률이 매우 높고,
    x축과 평행한 직선으로 보일 확률은 매우 작기 때문에
    쓸데 없는 line들을 제거하기 위해 theta 계산이 필요하다.

Quantization θ\theta

  1. arctan : range[-π2\frac{\pi}{2} ~ +π2\frac{\pi}{2}],
    range[π2\frac{\pi}{2} ~ 3π2\frac{3\pi}{2}],
    range[-3π2\frac{3\pi}{2} ~ -π2\frac{\pi}{2}],
    ...

  2. arctan2 : range[-π\pi ~ +π\pi]
    ➡️ arctan2는 arctan이 π\pi의 범위에 따라 있는 그래프를
    -π\pi ~ π\pi의 범위로 그려준다.
    따라서 값을 정확하게 준다.
    따라서 공간 상의 움직임을 구현하기 위해서는 arctan2를 사용해야 한다.

  • arctan2를 이용하여 θ\theta를 얻었을 것이고, 그 θ\theta를 range[0, 360]°\degree로 만든다
  • 그리고 나서 θ\theta를 4가지 구간 (0, 1, 2, 3)으로 quantization한다.
    ➡️ edge의 기울어진 정도를 4가지로 quantization하기 위해
    • 왜 8개 방향인가? 한 pixel을 중심으로 주변에 있는 pixel이 8개이므로

Non-Maximum Suppression

  • Non-Maximum Suppression :
    지역적으로 최대값이 아닌 Edge를 제거하는 과정.
    Edge에 기여하지 않는 pixel을 제거 (0으로 만듦)
    ➡️ 진짜 edge가 아닌데도 검출되는 pixel들이 있기 때문.
    ➡️ Blurring 현상을 없애고 Sharp한 Edge로 변경 필요하기 때문

  • 24row 3column을 봤을 때, quantization = 2이다.
    따라서 max(23row 3column, 24row 3column, 25row 3column) 연산을 했을 때,
    결과가 24row 3column이기 때문에 지역적으로 최대값을 가지므로 제거되지 않음.

  • 2row 2column을 봤을 때, quantization = 3이다.
    따라서 max(1row 1column, 2row 2column, 3row 3column) 연산을 했을 때,
    결과가 1row 1column이기 때문에 지역적으로 최대값이 아니기 때문에 제거

Hysteresis Thresholding

  • 두 개의 Thresholds로 Edge인지 아닌지 추론하는 단계.

    1. Maximum Threshold = 0.2 * (pixel 중 최대값)
    2. Minimum Threshold = 0.1 * (pixel 중 최대값)
  • Strong Edge : Maximum Threshold < 현재 pixel값
    Weak Edge : Minimum Threshold < 현재 pixel값 < Maximum Threshold
    No Edge : 현재 pixel값 < Maximum Threshold

  • 하지만 Strong Edge pixel들만 Edge로 판단할 경우,
    영상의 noise로 인해 Edge Pixel인데도 제대로 인식되지 않을 수 있다.
    그래서 Strong Edge와 인접한 Weak Edge Pixel을 Strong Edge로 판단해주어 Edge Pixel들끼리 서로 연결해줘야 한다.

drawing edge map

drawing edge map (Matlab제공 edge('Canny'))

  • 다음은 Matlab에서 제공해주는 edge()함수를 통해 Canny Edge Detection Algorithm을 구현한 결과.
profile
Efficient Deep Learning Model

0개의 댓글