没有合适的资源?快使用搜索试试~ 我知道了~
首页matlab相机标定程序 注解
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10733108/bg1.jpg)
标定程序原理注解
一、标定程序的总体结构
二、图片的读取
1.标定图片的检测
(1).检测当前文件夹下是否有能进行标定的图片存在(data_calib.m 函数)
1).用 matlab 自带的 dir函数来检验当前 matlab 打开的文件夹下是否有标定的图
片 格 式 并 把 相 应 的 图 片 数 量 以 数 组 的 形 式 存 储 , 例 如
1_bmp=dir(‘*bmp’)、1_ras=dir(‘*ras’)等;
2). 把 相 应 图 片 格 式 的 数 量 保 存 在 相 应 的 变 量 中 , 如
s_bmp=size(1_bmp,1),s_ras=size(1_ras,1);
3).把所有图片的数量保存在变量 s_tot 中,通过判断 s_tot 与 0 的大小来判定当
前文件夹下是否有图片存在:当 s_tot>0,说明有;反之,则无;
图片的读取
图片的标定
标定参数获取
标定参数的优化
求取参数的初始值
求取拐点的像素坐标
求取拐点的世界坐标
世界坐标的确定
标定图片相关变量的确定
标定图片的检测
![](https://csdnimg.cn/release/download_crawler_static/10733108/bg2.jpg)
4).如果有,则用 dir 函数显示当前文件夹下的所有文件名;反之,则停止进行标
定。
(2).确定标定图片的名称以及格式
1).用变量名 calib_name 来存储标定图片的名称,用变量 format_image 来
存储标定图片的格式,通过 matlab 自带的 input函数来输入要标定的图片名
称及格式;
2).通过 format_image 与已经规定的几种图片格式进行比较,如果与已规定
的某种图片格式相同,则输入图片格式有效;反之则该图片格式无效;
3).通过调用函数 check_directory.m 函数来检测该文件下是否存在输入所要
求标定图片名称(简称标定名)及格式的图片;检测过程如下:
① 用 dir 函数来检测含有标定名的文件,并把其以数组的形式存储在变量
名 l 中;把含有该标定名的个数存储在变量 N1 中,把该标定名含有的字符数存
储在变量 length_name 中;
如果 N1<0,说明输入的标定名可能是错误的;反之,把满足上述条件的文
件进行进一步检测,对变量 pp 取 1,2,……,N1 进行循环检测
② 用函数 !ndstr把检测到的文件名 l(pp)与输入的标定名 calib_name 进
行比较,并把标定名出现在文件名中的位置表示出来保存在变量 iii 中(如果标
定名为空字符则 iii=1);同样用函数 !ndstr 把检测到的文件名与输入要求的图
片格式 format_image 进行比较,并把 format_image 在文件名内中的位置
表示出来保存在变量 loc_ext 中;把检测到的文件名中介与 calib_name 和
format_image 之间的数字序号存储在变量 string_num 中;
③ 如果 string_num 不为空字符且 iii(1)=1,则说明该文件即为要标定的
文件之一;把所有满足标定的文件数量存储在变量 Nima_valid 中;把对应的
文件标记为 ind_valid pp 存储在数组变量 ind_valid 中;把对应的文件中图像格
式出现的位置存储在数组变量 loc_ectension 中;
注意的是上述循环如果的得到的 Nima_valid=0,则需要把图像格式变成
大写再次进行循环检测。
④ 图像格式的大小写都检测过后:如果 Nima_valid=0,说明输入要求的
图像格式可能是错误的;反之,把所有符合条件的文件数字序号用函数
![](https://csdnimg.cn/release/download_crawler_static/10733108/bg3.jpg)
str2num转换后存储在数组变量 indices 中,数字序号用函数 size 求出其列数
后存储在数组变量 string_length 中;用函数 min、max 分别得出 indices 中
最小最大数,把最小的数对应的图像记为第一幅图像,用 max-min+1 算出标
定图的总数,其值存储在变量 n_ima 中;通过判断 string_length 中最大最小
的 数 是 否 相 等 来 对 N_slots 以 及 type_numbering 进 行 取 值 , 若
min(string_length)= max(string_length), 则 令 N_slots=
min(string_length) , type_numbering=1 ; 否 则 , 令
N_slots=1,type_numbering=0;
⑤ 数组 image_numbers 的第一个元素赋值为 min(indices),最后一个
元素赋值为 max(indices),两者间元素按逐渐加一的方式依次赋值。
上面整个过程可以参照下面的图 1 标定流程:
![](https://csdnimg.cn/release/download_crawler_static/10733108/bg4.jpg)
开 始
dir调 用 函 数 检 测 当 前 文 件 夹 下 存 在 的 可 标 定 图 片
( ras bmp tif pgm ppm jpg jpeg )即 、 、 、 、 、 、 格 式 的 图 片 ,
s_tot并 把 其 总 数 存 在 变 量 中
s_tot 1比 较 是 否 小 于 ?
否否
是是
没 有 可 标 定 的 图 片 ,
停 止 进 行 标 定
显 示 当 前 文 件 下
的 所 有 文 件 名
input调 用 函 数 输 入 要
标 定 图 片 的 名 称 及 格 式
check_directory.m调 用
函 数 寻 找 符 合 条 件 的 图 片
检 测 输 入 的 图 片 格 式 与
能 标 定 图 片 格 式 是 否 一 致 ?
是是
否否 输 入 的 图 片 格 式 无 效
是 否 存 在 含 有
标 定 名 的 文 件 名 ?
是是
否否
没 有 找 到 要 标 定 的 图 片 ,
输 入 标 定 名 可 能 是 错 误 的
l把 所 有 含 有 标 定 名 的 文 件 名 存 在 数 组 中 ,
size l N1并 调 用 函 数 得 元 素 个 数 记 为
该 元 素 不 是 要 找 的 图 片
l k对 中 的 第 个 元 素 进 行 测 试 ,
findstr调 用 函 数 检 测 标 定 名
是 否 在 该 元 素 的 第 一 位 ?
是是
否否
str2num l调 用 函 数 检 测 元 素 中
标 定 名 与 标 定 格 式 之 间 的 字 符
是 否 是 纯 数 字 ?
是是
否否
indvalid该 元 素 是 要 找 的 图 片 , 并 把 其 序 号 存 在 数 组 中
k N1?是 否 等 于
是是
, k=k+1否 令, k=k+1否 令 是是
把 所 有 符 合 条 件 的 图 片 总 数
Nima_valid保 存 在 变 量
图 1 标定流程
![](https://csdnimg.cn/release/download_crawler_static/10733108/bg5.jpg)
2.标定图片相关变量的确定
(1).读取标定的图片数据(ima_read_calib.m)
1).调用 matlab 自带函数 exist 来判断一些变量名如 calib_name、format_iamge 等
是否存在,若不存在重新进行数据输入即调用 data_calib.m,若存在就调用
check_active_images.m 函数;
2).调用 check_active_image.m 函数的作用:第一,给含有 n_ima 个元素的数组
active_images 进 行 赋 值 , 每 一 个 元 素 的 值 为 1 , 并 且 调 用 函 数 find 找 出
active_images 里的非零元素的序号存在数组 ind_active 里;第二,对存在的一些
变量名进行类型拓展由 int 变为 double 型,如 center_optim、est_alpha、est_dist
等;
3). 让变量 i 依次取 1,2,......,n_ima,进行下列循环来读取图片数据:根据上面提
到 的 type_numbering 的 取 值 来 确 定 变 量 number_ext 的 取 值 : 当
type_numbering=0 时,调用函数 num2str 把 image_number(i)转换成数字;
type_numbering=1 时,通过函数 sprintf 把数字保存在变量 number_ext 中;
把[calib_name number_ext ‘.’ format_image]构成新的图像名存在变量 ima_name
中 , 根 据 图 像 名 的 format_image 调 用 相 应 的 函 数 来 读 入 图 像 的 数 据 : 当
format_image=ppm 时,调用 loadppm.m 函数;当 format_image=pgm 时,调用
loadpgm.m 函 数 ; 当 format_image=ras 时 , 调 用 readras.m 函 数 ; 当
format_image=bmp 或 tif 或 jpg 或 jpeg 时,则用 matlab 自带的函数 imread 来读入
图片的数据;把读入的图片数据存储在变量 Ii 中;最后把令 I_i=Ii;
4).调用函数 find 把 images_read(images_read=active_images,当 images_read 里某
个元素对应的图片没有数据读入时,令该元素为 0;反之,则不变。)中非零元
素的序号存储在数组 ind_read 内,根据 ind_read 是否是空数组来判断是否有图
像数据读入:当 ind_read 为空数组时,说明没有图像数据读入,此时,令
no_image_file=1;反之,说明有图像数据读入,此时,令 no_image_file=0;
5).调用函数 size 可以得到图片 I_1 的行数 m 和列数 n,并且取 ny=Hcal=m 和
nx=Wcal=n;另外,当 m=480 时,令 small_calib_image=0;反之,令
small_calib_image=1;调用函数 gray 获得一组图像灰度化比例数组并把其赋值
给 map;取 active_images=images_read。
剩余35页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/8a3954f9893f4f0d9eb4b919a40afe32_weijieliuliu_2.jpg!1)
weijieliuliu_2
- 粉丝: 1
- 资源: 12
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)