号称比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库不晓得为啥不好,暂时不搞了。
检测不到的原理可能和像素有关,毕竟作者自带的图片分辨率很高,后面可能可以拍几张图片大一点的照片去试试。