소실점(vanishing point)은 평행한 두 직선의 연장선을 그었을 때, 선과 선이 만나는 점을 뜻한다. 이미지에서 소실점을 OpenCV에서 제공하는 허프변환(hough_transform) 알고리즘을 통해 구해볼 것이다. (cv2.HoughLines() , cv2.HoughLinesP())
허프변환(hough_transform) 알고리즘은 이미지상에서 수학적으로 표현 가능한 도형을 검색하는 기술이다. 여기서 수학적으로 표현 가능한 도형이란 직선, 원, 타원, 쌍곡선 등을 말한다. 저는 최종적으로 복도의 vanising point를 찾는것이 목적이므로, 직선을 검색할 것이다.선에 대한 방정식은 기울기 m과 y 절편(c)로 표현되는 y = mx + c도 있지만, 삼각함수에 의해 r = 𝑥cos𝜃 + 𝑦sin𝜃 로도 표현된다. 여기서 r은 원점으로부터 직선까지의 수직거리를 의미하고, 𝜃(세타)는 수직선으로부터 x축까지의 반시계방향 각도이다.
위 그림을 보면 해당 선에 대한 모델을 (r, 𝜃)로 표현되는 것을 볼 수 있다. 이를 2차원 배열에 맵핑하는 것을 생각했을 때, 2차원 배열의 row가 r, col을 𝜃로 정한다. 거리 r과 각도 𝜃 에 대한 정밀도를 고려하지 않으면 배열의 크기는 무한대가 된다. 그래서 r은 이미지 대각 크기(픽셀단위)로 지정하고, 𝜃를 0~180으로 지정하면 어떠한 선이라도 표현이 가능하다. 각각 r와 𝜃 는 단위를 지정할 수 있어서 resolution을 결정할 수 있다.
cv::HoughLines & cv::HoughLinesP
Vanishing Point Detector in Indoor Corridor Env
'Sensor > Camera' 카테고리의 다른 글
[ROS] Visual-Inertial Calibration Using Kalibr (1) | 2021.01.20 |
---|---|
[ROS] ORB SLAM3_Mono Camera (1) | 2021.01.12 |
[Python OpenCV] Perspective Transform example (2) | 2020.11.01 |
Homography or Projective Transformation (0) | 2020.08.17 |