【BEV】OpenCV에서 bird eye view 변환을 실험해 본다

배경



「전부터 보고 있는 것을 Bird Eye View(위로부터의 시점)로 변환한다고 하는 것은?」
"위에 또 하나의 카메라가 붙어 있지 않아?"

최근까지 수학적으로 전혀 이미지 할 수 없었다.

BEV의 사고방식을 반짝반짝 쓴다.

알고리즘



어떻게하면 위에서 볼 수 있습니까?





위에서 본 도로의 사진은 흰색 선이 직선으로되어 있다고 생각합니다.
* 선이 곡선이 아니면
* 평행한 직선이면 무엇이든 okay


그러나, 전부터 보면 8의 시형이 되고 있네요. 이것은 먼 것이 작아 보이는 것에서 일어납니다.

실제로는 직선인 4점을 선택해, 직선이라고 하는 사실로부터, 직선이 되도록 늘리는 이미지로 변환하면, BEV가 됩니다.

opencv에서 실제로 시도했기 때문에보십시오.

설정



필요한 것은 직선인 4점을 선택하는 것만
lane_shape = [(584, 458), (701, 458), (295, 665), (1022, 665)]
top_left, top_right, bottom_left, bottom_right = lane_shape
source = np.float32([top_left, top_right, bottom_right, bottom_left])
destination = np.float32([(bottom_left[0], 0), (bottom_right[0], 0),
                                  (bottom_right[0], self.img_height - 1), (bottom_left[0], self.img_height - 1)])
self.overhead_transform = cv2.getPerspectiveTransform(source, 
   destination)

bird eye view 변환


    def warp_to_overhead(self, undistorted_img):
        """
        Transforms this camera's images from the dashboard perspective to an overhead perspective.

        Note: Make sure to undistort first.
        """
        return cv2.warpPerspective(undistorted_img, self.overhead_transform, dsize=(self.img_width, self.img_height))

결과



before


after


결론



・평행한 직선이라는 사실에서 4점을 선택하면 변환하기 위한 Parameter를 얻을 수 있다.
・이 방법이라면 지면에 대한 카메라의 기울기나 지면이 평평하지 않은 경우 등은 사용할 수 없다.

거리의 정보를 가지고 있을까~라든지 기대했기 때문에가 없었습니다.

좋은 웹페이지 즐겨찾기