neozhaoliang / surround-view-system-introduction

A full Python implementation for real car surround view system
MIT License
858 stars 303 forks source link

关于project_keypoints的一个问题 #85

Closed FunnyWii closed 4 months ago

FunnyWii commented 5 months ago

作者您好,

看到文档“手动标定获取投影矩阵”部分中提到的:

这四个点是可以自由设置的,但是你需要在程序中手动修改它们在鸟瞰图中的像素坐标。

这部分的时候比较困惑。

  1. 假如project_keypoints的4个点被设为画布的4个顶点(左上/左下/右上/右下),是不是就会把点击获取的4个点投影到整个画布?

  2. 这个点的选择是否会影响到Shift Height/Width?我看到文档中对其的描述是:BEV中向外侧看多远。

neozhaoliang commented 5 months ago

这部分的时候比较困惑。

这四个点是你在地面上选择的四个点,它们的地面坐标是知道的,比如就是标定板的角。这样的话,它们在鸟瞰图中的像素坐标你也就知道了。因为文档里面假定了 1 像素对应地面上 1 厘米。

假如project_keypoints的4个点被设为画布的4个顶点(左上/左下/右上/右下),是不是就会把点击获取的4个点投影到整个画布?

你有没有理解什么是投影矩阵的标定?我们要算的是一个射影矩阵,它把 undistort 后的图像投影到地面上一块固定的区域。这样一个射影矩阵需要至少 4 个地面上的点和图像中像素的对应关系。

这个点的选择是否会影响到Shift Height/Width?我看到文档中对其的描述是:BEV中向外侧看多远。

不影响。

FunnyWii commented 4 months ago

你有没有理解什么是投影矩阵的标定?我们要算的是一个射影矩阵,它把 undistort 后的图像投影到地面上一块固定的区域。这样一个射影矩阵需要至少 4 个地面上的点和图像中像素的对应关系。

您说的4个地面上的点,也就是手动选取的那4个点。 那么您提到的这个影射矩阵是不是指:[鼠标选取的正常视角4个点的像素系坐标 <-> 代码中指定的BEV视角中的像素系坐标 ] 之间的变换矩阵?

FunnyWii commented 4 months ago

我对视角变换中的投影矩阵的理解就是,我指定4个普通视角中的像素点,再指定4个BEV视角中的像素,然后通过getPerspectiveTransform这个操作得到的矩阵...

通过这个投影矩阵,就能把普通视角中的4个点,投影到BEV视角中指定的那4个点。因此,也能通过这个投影矩阵,把普通视角的图像投影到BEV视角

neozhaoliang commented 4 months ago

那么您提到的这个影射矩阵是不是指:[鼠标选取的正常视角4个点的像素系坐标 <-> 代码中指定的BEV视角中的像素系坐标 ] 之间的变换矩阵?

对。

FunnyWii commented 4 months ago

那么您提到的这个影射矩阵是不是指:[鼠标选取的正常视角4个点的像素系坐标 <-> 代码中指定的BEV视角中的像素系坐标 ] 之间的变换矩阵?

对。

好的感谢

EveningLin commented 1 month ago

@neozhaoliang “文档里面假定了 1 像素对应地面上 1 厘米”这个假定在现实使用中是不能严格保证的,有什么办法确保嘛

neozhaoliang commented 1 month ago

不能。因为投影的关系,远处的一个像素是不能对应 1 厘米的。