matlab打开笔记本摄像头_8.图像视觉(1) 鱼眼摄像头标定和图像畸变矫正

本文介绍了如何使用Matlab进行鱼眼摄像头的标定和图像畸变矫正。通过采集棋盘标定数据,利用Matlab App或内置函数进行标定,并展示了标定过程及结果。文章还探讨了360°环绕视频功能的原理,为相关项目的实施提供参考。
摘要由CSDN通过智能技术生成

前言:最近项目上研究鱼眼摄像头的画面畸变问题,对比了基于Matlab和Python Opencv的方法,分别进行了摄像头的标定和图像矫正,实际结果个人认为Opencv的效果为佳,本文分享一下基于Matlab的鱼眼摄像头标定和图像畸变矫正fcb6543c4c7344d7980797417076b8bb.png

关键字:鱼眼摄像头;摄像头标定;图像畸变矫正


1、鱼眼摄像头介绍

鱼眼摄像机可以独立实现大范围无死角监控的全景摄像机,其概念与初级成品诞生已久,但成熟商用产品直到08年才正式出现。又因为国内安防方面的标准大多围绕模拟摄像机与网络摄像机展开,故此对于全景摄像机还没有较为统一的标准定义,使得在具体到某些项目实施的过程中会存在认同度方面的问题。总的说来,当下主流全景摄像机采用吊装与壁装方式可分别达到360°与180°的监控效果,而某些只有120°到130°视场角的摄像机,因为能达到客户对一个较为开阔面积的监控诉求,亦可被称为全景摄像机。

ef12f4a9bcf48c9e0584c66e8e99015d.png

图1:安防鱼眼摄像头

a99722b8c11acb76e84258ba8f9a99a3.png6cc01e6607c73ae9e89eea8c8dbb5ee9.png

图2:车载鱼眼摄像头(倒车雷达)


2、Matlab鱼眼摄像头标定

2.1 采集标定数据

常规使用的是棋盘标定法,所以用的标定块如下图所示。这个标定板可以自己网上下载一个,或者用matlab画一个,这个不是很难。注意一点,在用摄像头采集数据的时候,要保证标定板是处于一个平整的位置。我用的比较简陋,就直接打印在纸上,平铺在桌面上,进行数据采集了。这里可以拍20张左右,多变换一点角度,还有距离。

5983a30761ab13c2d5b78571f0b66a5a.png

图3:标定棋盘

采集的数据类似如下图,

feb059ac7ce33d89a372dc8b1bff114a.png

图4:采集的数据集

2.2 基于App的摄像头标定

在Matlab App中找到摄像头标定

0616af88aca6469c99317d90fa5ae8bd.png

点击Camera Calibrator这个应用,显示如上图案,点击add images,

06872713988e0dcff0cd84b520122fc6.png

程序会要求输入棋盘的边长,这个要自己进行测量,当然测量要尽量准确。

582ba3ae4b1ed47eccc0d35c13051bf2.png

添加之前制作好的数据集,它会经过一定的筛选,剔除不合格的图片。

0c6c6c3f9e2fe0aaceffce5b3570624b.png

matlab会给每张图片建坐标系。

e91f8bb40df32d12985a2cfd718cf69e.png


选择自己要矫正的参数,点击按钮calibrate,进行对相机进行标定。

以棋盘为中心的相机的位姿图

d618bc8a756640bdc47969f9242afb59.png

以相机为中心的棋盘的位姿图

8d2e857b551b39ef5070ab36f8ac1d01.png

最后选择export camera parameters,将我们需要的内参进行导出。

b80f1b0ddef4fb1ad72e7e865e489f23.png

5bb40879ea5365766461f11fdc10ac28.png

2.3 基于代码的标定

Matlab自带函数可以直接实现标定,本文图片是Matlab自带的图片,仅供讲解说明。

% 图片集合images = imageDatastore(fullfile(toolboxdir('vision'), 'visiondata','calibration', 'gopro'));imageFileNames = images.Files; % 标定边框[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);% 生成标定格子的实际坐标squareSize = 0.029; % 标定格子大小worldPoints = generateCheckerboardPoints(boardSize, squareSize);% 标定摄像头I = readimage(images, 1);  % 任取其中一张图片imageSize = [size(I, 1), size(I, 2)];% 获取图片长宽params = estimateFisheyeParameters(imagePoints, worldPoints, imageSize);

任意打开一张鱼眼照片测试效果

imageFileName = fullfile(toolboxdir('driving'), 'drivingdata', 'checkerboard.png');I = imread(imageFileName);imshow(I)

ee918f6b1cc4ce6a5e2da42fdad16ed4.png

进行画面矫正

% 画面矫正[J1, camIntrinsics] = undistortFisheyeImage(I, params.Intrinsics, 'Output', 'full');imshow(J1)

cf802a4b9adf53a56cc7e6413e72030e.png

可以看出Matlab是把整张图全部进行了矫正,导致了4个角落出现尖锐画面,同时画面上下左右出现黑框,为了更好地使用照片,还需要把图片裁剪(imcrop函数),期望输入如下图;

722bf51dc856394a1d17cb16d2067c6e.png

启发思考:在现在的高档车上一般配备有360°环绕视频功能(效果下图),给行车带来了极大便利,尤其是我这种不擅于倒车的583f19297d492abcb747da18c8c8ea1c.png,其基本原理和本文类似,感兴趣的读友可以思考一下它怎么实现的,后续也将分享其做法

a4940f9c3648a3d5232698dcc258dc03.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值