mrcal相机标定库

2023-12-22 06:15:42

号称比opencv更强大的库,自称“Next-generation camera-modeling toolkit”,也是c++写的,有python的api。
装库搞死我了,比python麻烦多了。
安装教程 here
在ubuntu22.04下可以

apt install mrcal libmrcal-dev python3-mrcal

所以我装了个虚拟机。。。。
不过旧版本的ubuntu也可以自己去配置,

For older distros or if you want to get the latest release of mrcal, you can use the mrcal APT repository. I currently distribute packages for
Debian/buster (10)
Debian/bullseye (11)
Debian/bookworm (12)
Debian/sid (bleeding-edge)
Ubuntu/bionic (18.04 LTS)
Ubuntu/focal (20.04 LTS)
Ubuntu/jammy (22.04 LTS)
amd64 and arm64 architectures only (except Ubuntu/bionic, which is amd64-only). To use these, add to your /etc/apt/sources.list:
deb [trusted=yes] http://mrcal.secretsauce.net/packages/DISTRO/public/ DISTRO main
where DISTRO is one of
buster
bulleye
bookworm
bionic
focal
jammy
Then, apt update && apt install mrcal. The chessboard corner finder, while not strictly required, is needed if you’re doing chessboard-based calibrations. apt install mrgingham
怎么说呢,不亏是搞技术的,技能全点技术了,这教程写的很随意啊,很自由。

python api here
python包装后的github库 代码 here
丰富的教程 here
一开始就遇到了bug,它的图片可以识别角点,

mrgingham --jobs 4 --gridn 14 '*.JPG' > corners.vnl 

gridn 是棋盘格的大小 ,14就是14x14,可以写成

mrgingham --jobs 4 --gridn 9,6 '*.JPG' > corners.vnl 

corners.vnl 就是输出到corners.vnl 文件里面。
–jobs 4 线程
mrgingham 这个库的命令

如果检测到点,corners.vnl应该是这样
在这里插入图片描述

然后是

< corners.vnl       \
  vnl-filter -p x,y | \
  feedgnuplot --domain --square --set 'xrange [0:6000] noextend' --set 'yrange [3376:0] noextend'

vnl-filter是一个库,可以过滤corners.vnl里面的x,y坐标值。
feedgnuplot是画图用的,把x,y坐标值在图上画出来。
不过这两个库,好像挞梁的都是mrcal的作者写的,真牛批。
在这里插入图片描述

在这里插入图片描述
上面是原图,下面是检测出的corners,看着很不错。
不过到我自己用的时候,就检测不到corners。
在这里插入图片描述
我麑蚂。。。

好像是因为mrgingham 只能适应NxN的棋盘格。
后面找到了另外一个运行方法,mrcal-calibrate-cameras,作者说这个方法可以适应非 NxN 的棋盘格。
运行之后还是有bug。

mrcal-calibrate-cameras
    --corners-cache corners.vnl
    --lensmodel LENSMODEL_OPENCV8
    --focal 1700 --object-spacing 0.01 --object-width-n 10
    --outdir /tmp
    --pairs
    'left*.png' 'right*.png'

好像是安装库版本的问题。这里就很难受了,为啥调用的是.local/lib/python3.10/site-packages/里面的库,我的虚拟虚拟环境明明在 ~/anaconda3/envs/ChessBoardCornersDetection/ 。懵逼了。

在这里插入图片描述
好像是因为命令行直接调用的就是系统的库,不是虚拟环境的库,因为我的mrcal是用的apt install搞的,要是想用虚拟环境做,应该自己用make去构建mrcal的库。。。麑蚂的。

不过这一步好像是标定。。。。不是检测corners。corners要先检测出来,才能进行这一步。。。尻。

怎么说呢,matlab太好用了,这才是相机标定的好工具嘛。
你鼐鼐的mrcal,太吉尔烦了。
不过后面做了几个对比实验
有的图opencv识别不到,matlab识别的不错,有的图matlab识别的很差,opencv可以很不错。各有优劣。
总的来看,opencv适应性更强,matlab需要棋盘格占据图片区域比较大。棋盘格倾斜角不能太大。
所以mrcal库不晓得为啥不好,暂时不搞了。
检测不到的原理可能和像素有关,毕竟作者自带的图片分辨率很高,后面可能可以拍几张图片大一点的照片去试试。

文章来源:https://blog.csdn.net/onlyyoujojo/article/details/135090611
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。