---
# System prepended metadata

title: 找出車道線座標
tags: [自駕車]

---

# 如何找出車道線座標並畫出車道範圍

![](https://hackmd.io/_uploads/rJzctJCfa.png)

如果要畫出車道範圍，就需要找出車道線的每個點座標，並藉由這些座標畫出車道線，
而左右兩邊的車道線方程式係數在之前已經求得了，現在只需要把已知的 y軸 座標給
取出。

## 分割圖片的 y 軸
圖片的高度由 120 像素所組成，所以切分時是使用 0 ~ 119 的範圍去切成 120 等分，那為了簡化問題，以下將使用三等份來模擬真實情況。

也就是 0,1,2 被切分成三等份:

>匯入套件，並且設定 numpy 的顯示方式(方便觀察)

```python=
import numpy as np
np.set_printoptions(threshold=np.inf, linewidth=np.inf, precision=1, formatter={'float': '{:0.1f}'.format})
```

>模擬分割圖片的高

```python=
var_pts = np.linspace(0,2,3)
print(f'分割圖的高(y軸): {var_pts}')
```
輸出結果是每一個點的 y 座標，也就是 ( ? , 0.0 )、( ? , 1.0 )、( ? , 2.0 )，我們知道y座標後就可以根據方程式去推出 x 座標。

![](https://hackmd.io/_uploads/HkRW3k0GT.png)

## 計算出每個點的 x 值

這裡使用的方程式也是簡易版的例子，具體方程式請看原始程式碼(由上一章算出來的)

```python=
# 左邊所有的 x 值 代入到左邊方程式
left_fitx = (1 * var_pts ** 2 +2 * var_pts + 3)
# 右邊所有的 x 值 代入到右邊方程式
right_fitx = (1.5 * var_pts ** 2 +2.5 * var_pts + 3.5)
print(f'左邊 x 座標: {left_fitx}')
print(f'右邊 x 座標: {right_fitx}')
```
輸出結果

![](https://hackmd.io/_uploads/HJEG61AGp.png)

有了 x 座標後就可以跟剛才的 y 座標做對應了，如此一來即可獲得所有點的座標。

## 取得所有座標

```python=
pts_left = np.transpose(np.vstack([left_fitx, var_pts]))  # 將對應的 x,y依序排列
pts_right = np.transpose(np.vstack([right_fitx, var_pts]))  # 將對應的 x,y依序排列 並翻轉
print(f'左邊所有座標:\n {pts_left}')
print(f'右邊所有座標:\n {pts_right}')
```
輸出結果

![](https://hackmd.io/_uploads/rklE3eAGa.png)

取得每一個座標後就可以沿著座標去畫線，最後框出軌道範圍，由左邊第一個座標開始畫到左邊最後一個座標，但是在畫到這裡時發現下一個點是右邊線的第一個點，這樣就會呈現倒N字形，我們應該畫的下一個點是右邊線的最後一個點，也就是[14.5,2.0]，然後再由此點上去到第一個點，最後就可以把整個軌道給框起來了!

## 重直堆疊兩邊的座標

```python=
pts_right = np.flipud(pts_right)  # 將對應的 x,y依序排列並翻轉
pts = np.vstack((pts_left, pts_right))  # 垂直堆疊
print(f'所有座標:\n{pts}')
```
輸出結果

![](https://hackmd.io/_uploads/SJ-oagCz6.png)


