Skip to content

Commit

Permalink
update result images and README
Browse files Browse the repository at this point in the history
  • Loading branch information
dyfcalid committed Jun 22, 2021
1 parent a90b10e commit 8c8fc47
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 15 deletions.
12 changes: 10 additions & 2 deletions ExtrinsicCalibration/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,17 @@ python extrinsicCalib.py -h
- 或者**按住鼠标左键****矩形框**框住车辆,自动返回中心点
- 显示中心点坐标以及(y/n)选项,按y键完成居中,按n键重新选择
- 确认后会显示居中的图像,ESC关闭
![center.jpg](https://i.loli.net/2021/06/22/5twSk8rfu2OZcCd.png)

图像缩放时:
- 程序会首先对目标图像img_dst中提取角点坐标,并计算棋盘的小格子平均尺寸
- 程序会首先对目标图像img_dst中提取角点坐标,并计算棋盘的小格子平均像素尺寸
- 根据设置的`-size`值(即为最终标定板棋盘小格在图中的像素长度,注意此参数与intrinsicCalib.py含义不同)
计算缩放系数对图像进行缩放,保证所有目标图像的标定板在图中的像素尺寸一致(即无人机的高度一致),并可以以此计算**比例尺**
- 对缩放后的图像进行裁剪或边沿填充
- 显示缩放后的图像,ESC关闭
例如默认设置`-size`为10,若真实标定板每格尺寸100mm,即最终标定板每格在图中占10个像素,比例尺为1像素:10mm

每读入一组图像,程序就会进行一次单应性矩阵计算(总数据量不断累加),并显示变换的效果图
每读入一组图像,程序就会进行一次单应性矩阵计算(总数据量不断累加),并显示变换的效果图,最终存储相应的H文件

-----------------------------------------------------------------------------------

Expand All @@ -91,6 +93,12 @@ python extrinsicCalib.py -h
- 对于检测不到角点的图像,可以利用图片工具手动调整其**曝光、对比度**等等,最重要的是在**图片采集时就保证良好的光线环境、合适的距离、合适的相机分辨率**,可以在采集图像时用intrinsicCalib.py进行测试,在去畸变时也要选择**合适的焦距尺寸缩放系数**
- 将四组相机和无人机图片分别运行该程序得到对应的计算单应性矩阵H并存储

**图片处理流程**
![exCalib_process.png](https://i.loli.net/2021/06/22/NiCjQDTk82HeqWA.png)

**变换结果**
![exCalib_result.jpg](https://i.loli.net/2021/06/22/5fMmcxTuZ2aIUyN.png)

`2021.6 ZZH`


26 changes: 15 additions & 11 deletions IntrinsicCalibration/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Requirement: opencv(>=3.4.2) numpy(>=1.19.2)

使用`intrinsicCalib.py`可以完成相机的**在线标定****离线标定**,包含**鱼眼相机****普通相机**模型,
同时支持**相机、视频、图像**三种输入,生成**相机内参****畸变向量**
同时支持**相机、视频、图像**三种输入,生成**相机内参****畸变向量**,并显示**重投影误差**
详细注释包含在`intrinsicCalib.ipynb`中,也可以在Jupyter Notebook中直接运行该代码
可以根据得到的相机内参和畸变向量文件用Tools中的`undistort.py`完成图像去畸变处理

Expand All @@ -23,7 +23,7 @@ Requirement: opencv(>=3.4.2) numpy(>=1.19.2)
### intrinsicCalib.py
> 相机内参标定
连接相机后并准备好棋盘标定板后,在命令行运行即可
**连接相机**后并准备好棋盘标定板后,在命令行运行即可(默认相机在线标定)
```
python intrinsicCalib.py
```
Expand Down Expand Up @@ -67,7 +67,7 @@ python intrinsicCalib.py -h

#### 示例1 (在线标定)
**此时为鱼眼相机自动在线标定** (默认设置)
若相机分辨率设置为1280×720,棋盘格**角点数**为6×8,每小格**边长**20mm,未输入参数保持默认值,则键入
若相机分辨率设置为1280×720,棋盘格**角点数**为6×8,每小格**边长**20mm(也可以不设置保持默认),未输入参数保持默认值,则键入
```
python intrinsicCalib.py -fw 1280 -fh 720 -bw 6 -bh 8 -size 20
```
Expand Down Expand Up @@ -98,16 +98,18 @@ python intrinsicCalib.py -fw 1280 -fh 720 -bw 6 -bh 8 -size 20

#### 示例2 (离线标定)
(注:**建议将视频或图像放下./data/下并按默认值命名**,可以省去参数输入便于使用)
若离线标定,输入为本地视频,文件位于./data/video.mp4,棋盘格角点数为6×8,每小格边长20mm,未输入参数保持默认值,则键入
若离线标定,输入为本地视频,文件位于./data/video.mp4,棋盘格角点数为6×8,未输入参数保持默认值,则键入
```
python intrinsicCalib.py -input video -path ./data/ -video video.mp4 -bw 6 -bh 8 -size 20
python intrinsicCalib.py -input video -path ./data/ -video video.mp4 -bw 6 -bh 8
```

若离线标定,输入为本地图片,文件位于./data/下,图片命名为img_raw_xxx.xxx,棋盘格角点数为6×8,每小格边长20mm,未输入参数保持默认值,则键入
若离线标定,输入为本地图片,文件位于./data/下,图片命名为img_raw_xxx.xxx,棋盘格角点数为7×6,未输入参数保持默认值,则键入
```
python intrinsicCalib.py -input image -path ./data/ -image img_raw -bw 6 -bh 8 -size 20
python intrinsicCalib.py -input image -path ./data/ -image img_raw -bw 7 -bh 6
```
**脚本会将输入路径下所有包含该命名前缀的所有图片作为输入**
**脚本会将输入路径下所有包含该命名前缀的所有图片作为输入**
读入示例提供的图片,可以看到标定结果和去畸变图像
![inCalib_result.jpg](https://i.loli.net/2021/06/22/nxOsU1mM4D3kJWS.png)

--------------------------------------------------------------------------------

Expand All @@ -121,7 +123,7 @@ python intrinsicCalib.py -input image -path ./data/ -image img_raw -bw 6 -bh 8 -
输出界面会显示已捕获的有效图片数量
例:
```
python intrinsicCalib.py -mode manual -fw 1280 -fh 720 -bw 6 -bh 8 -size 20
python intrinsicCalib.py -input image -mode manual -fw 1280 -fh 1024 -bw 7 -bh 6
```

--------------------------------------------------------------------------------
Expand All @@ -146,8 +148,10 @@ python intrinsicCalib.py -fw 1280 -fh 720 -bw 6 -bh 8 -num 10 -delay 15 -store

#### 常见问题
- linux下推荐使用`cv2.VideoCapture(f"/dev/video{id}")`代替`cv2.VideoCapture(id)`读取相机图片
- 若相机标定时,去畸变图像出现异常,此时可能计算发散,重投影误差很大,需要退出重新标定,
一般是由于前几张图像质量不好导致初始化错误而发散,请检查参数设置,并可以尝试修改`-num` `-delay` `subpix`等值,更换图片顺序等,或者重新采集图像
- 若相机标定时,去畸变图像出现异常,此时可能计算发散,重投影误差很大,需要ESC退出重新标定,
一般是由于前几张图像质量不好导致初始化错误而发散,请检查参数设置,保证标定板平直,
并可以尝试修改`-num` `-delay` `subpix`等值,更换图片顺序等,或者重新采集图像
- 鱼眼相机模型和普通相机模型不同,尤其是去畸变向量的表达不同,都有各自的opencv函数进行处理

--------------------------------------------------------------------------------

Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ args.INPUT_PATH = './IntrinsicCalibration/data/'
InCalibrator.edit_args(args) # 修改args参数
calibrator = InCalibrator(camera_type) # 初始化内参标定器
```

示例结果:
<img src="https://i.loli.net/2021/06/22/nxOsU1mM4D3kJWS.png" width="750" height="200" alt="inCalib_result.jpg"/>
<img src="https://i.loli.net/2021/06/22/iVETOUIMqCRHDYr.png" width="750" height="300" alt="inCalib_image.jpg"/>


## Camera Extrinsic Calibration
Expand Down Expand Up @@ -122,6 +126,9 @@ ExCalibrator.edit_args(args) # 修改args参数
exCalib = ExCalibrator() # 初始化外参标定器
```

示例结果:
![exCalib_result.jpg](https://i.loli.net/2021/06/22/5fMmcxTuZ2aIUyN.png)


## Surround Camera Bird Eye View
> 环视相机鸟瞰拼接图生成
Expand Down Expand Up @@ -156,6 +163,11 @@ BevGenerator.edit_args(args) # 修改为新的参数
bev = BevGenerator() # 初始化环视鸟瞰生成器
```

示例结果:
<div align=center><img src="https://i.loli.net/2021/06/22/fOwPsTYkCFeo8dW.png" width="740" height="170" alt="camera.jpg"/></div>
<div align=center><img src="https://i.loli.net/2021/06/22/HeKJVBm2vEINy4z.png" width="360" height="400" alt="bev.jpg"/></div>


## Other Tools
`collect.py`可以开启相机完成图像或视频的**数据采集**
`undistort.py`可以批量完成图像的**去畸变处理**
Expand All @@ -165,4 +177,5 @@ bev = BevGenerator() # 初始化环视鸟瞰生



`2021.6 ZZH`
`2021.6 ZZH`

11 changes: 11 additions & 0 deletions SurroundBirdEyeView/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ from surroundBEV import BevGenerator
bev = BevGenerator() # 初始化环视鸟瞰生成器
surround = bev(front,back,left,right) # 输入前后左右四张原始相机图像 得到拼接后的鸟瞰图
```

------------------------------------------------------------------------------------------------------

拼接时使用**预设的MASK**,根据中间车辆图片的尺寸计算
直接拼接时,取车辆图片四个角与鸟瞰图四个角连线得到对应的mask,
融合拼接时,则取更大的区域使得各mask之间有重叠部分,在重叠区域内根据距离两个mask的距离计算权重
如下图所示(以前视图mask为例):
![mask.jpg](https://i.loli.net/2021/06/22/Sm6wlYzqTxZahpg.png)

**拼接结果**
![surround.jpg](https://i.loli.net/2021/06/22/2JRw31FszrDgxZK.png)

`2021.6 ZZH`

2 changes: 1 addition & 1 deletion SurroundBirdEyeView/surroundBEV.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
parser.add_argument('-ch', '--CAR_HEIGHT', default=400, type=int, help='Car Frame Height')
parser.add_argument('-fs', '--FOCAL_SCALE', default=1, type=float, help='Camera Undistort Focal Scale')
parser.add_argument('-ss', '--SIZE_SCALE', default=2, type=float, help='Camera Undistort Size Scale')
parser.add_argument('-blend','--BLEND_FLAG', default=False, type=bool, help='Blend BEV Image (Ture/False)')
parser.add_argument('-blend','--BLEND_FLAG', default=True, type=bool, help='Blend BEV Image (Ture/False)')
parser.add_argument('-balance','--BALANCE_FLAG', default=False, type=bool, help='Balance BEV Image (Ture/False)')
args = parser.parse_args()

Expand Down
1 change: 1 addition & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def runInCalib_2():
print("Reprojection Error is : {}".format(np.mean(result.reproj_err)))

raw_frame = cv2.imread('./IntrinsicCalibration/data/img_raw0.jpg')
# calibrator.draw_corners(raw_frame) # 画出角点
cv2.imshow("Raw Image", raw_frame)
undist_img = calibrator.undistort(raw_frame) # 使用undistort方法得到去畸变图像
cv2.imshow("Undistort Image", undist_img)
Expand Down

0 comments on commit 8c8fc47

Please sign in to comment.