[데브코스 자율주행 TIL] DAY29 (10/30)

happy_quokka·2023년 10월 31일
0
post-thumbnail

2023.10.30 DAY29☺️

하루가 매우 길게 느껴진 하루였다!!
10시에 실시간 강의로 c++ 가이드 라인에 대해 배웠다. 한번쯤은 정리하고 알고 싶었던 내용들이었는데 알게 되서 좋았다. 특히 네이밍이나 전반적인 구조들에 대해 항상 고민했었는데 고밍이 해결되는 느낌이 들었다.

차선 인식 프로젝트는 오늘 많이 하지는 못했다ㅠㅠ 어제 수행한 이진화에 캐니에지와 허프변환을 적용하여 직선을 검출하는 부분을 수행하였는데... 차선 외의 것들이 직선으로 너무 많이 검출된다. 이제 이걸 없애는 프로세스를 진행해야겠다.

멘토님과 커피챗도 진행하였는데 기존에 궁금했던 것들을 물어보고 앞으로 어떻게 진행하는 게 좋을지, 협업은 어떻게 하는게 좋을지에 대한 궁금증을 풀 수 있는 시간이었다!!


🛣 차선 인식 프로젝트

  • 이진화를 수행한 영상에 캐니 에지, 허프변환, 라이다 영역 마스킹 수행

  • 옆의 벽이나 박스들의 직선도 검출된다.

  • 곡선 부분은 잘 검출하지 못한다.


📝 배운 내용

C++ 가이드라인

  • naming 할 때 축약은 하지 말자!
  • 변수, 클래스, 함수 등 각각의 기술방법을 정하고 통일하여 사용해야한다!
  • using namespace는 사용하지 말자!
  • 함수는 동사 + 명사의 형태로!
  • namespace를 사용하여 모듈의 기능을 명확하게 분류하고 계층을 만들자!
  • 가이드라인을 잘 따라하자!

영상의 기하하적 변환

이동 변환 (shift)

  • 직접 구현해야한다
    [xy]=[10a01b][xy1]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & 0 & a \\ 0 & 1 & b \end{bmatrix} * \begin{bmatrix} x \\ y \\1 \end{bmatrix}

전단 변환 (shear)

  • 직접 구현해야한다
  • 가로 방향
    [xy]=[1m01][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & m \\ 0 & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \end{bmatrix}
  • 세로 방향
    [xy]=[1m01][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & m \\ 0 & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \end{bmatrix}

크기 변환 (scale)

  • resize()
    [xy]=[sx000sy0][xy1]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \end{bmatrix} * \begin{bmatrix} x \\ y \\1 \end{bmatrix}
  • 보간법
    • INTER_NEAREST : 최근방 이웃 보간법 (계단 현상 나타남)
    • INTER_LINEAR : default, 양성형 보간법 (4개 픽셀 활용)
    • INTER_CUBIC : 3차 보간법 (16개 활용)
    • INTER_AREA : 축소시 사용

회전 변환 (rotation)

  1. getRotationMatrix2D() : 회전 변환 행렬 계산
  2. warpAffine() : 어파인 변환, 회전 변환 행렬 활용
  • 반시계 방향이 기본
    [xy]=[cosθsinθ0sinθconθ0][xy1]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} cosθ & sinθ & 0 \\ -sinθ & conθ & 0 \end{bmatrix} * \begin{bmatrix} x \\ y \\1 \end{bmatrix}
  • 역방향 매핑
    [xy]=[cosθsinθ0sinθconθ0][xy1]\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} cosθ & -sinθ & 0 \\ sinθ & conθ & 0 \end{bmatrix} * \begin{bmatrix} x' \\ y' \\1 \end{bmatrix}

대칭 변환 (flip)

  • flip()
    • 양수 : 좌우 대치ㅇ
    • 0 : 상하 대칭
    • 음수 : 좌우 & 상하 대칭

어파인 변환 (affine)

  1. getAffineTransform()
  2. warpAffine()
  • 2x3 matrix (6 DoF)
    [xy1]=[a11a12a13a21a22a23001][xy1]\begin{bmatrix} x' \\ y' \\1\end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23} \\ 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \\1 \end{bmatrix}

투시 변환 (perspective)

  1. getPerspectiveTransform()
  2. warpPerspective()
  • 3x3 matrix (8 DoF)
    [xy1]=[a11a12a13a21a22a23a31a321][xy1]\begin{bmatrix} x' \\ y' \\1\end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & 1 \end{bmatrix} * \begin{bmatrix} x \\ y \\1 \end{bmatrix}
  • 이를 활용하여 bird's-eye view 만들수 있다.

remapping

  • 어파인, 투시 변환 등을 다 리매핑으로 나타낼 수 있다.
  • remap()

☕️ 커피챗

  • Jira 협업 툴로 협업해보기!
  • c++ 이 익숙하지 않으니 클래스로 만들고 하는 부분들은 일단 패스하고 구현에 집중하기! (그 뒤에 코드 정리하자!)

0개의 댓글