前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >结构光三维测量几种比较成熟的方法

结构光三维测量几种比较成熟的方法

作者头像
小白学视觉
发布于 2022-02-09 04:47:46
发布于 2022-02-09 04:47:46
2.2K2
举报

1.飞行时间发

原理:通过直接测量光传播的时间,确定物体的面型。发射脉冲信号,接受发射回的光,计算距离。

精度:毫米级

优点:原理简单,可避免阴影和遮挡等问题,且仪器便携化。

缺点:精度相对较低

2.莫尔条纹法

原理:采用两组光栅,一个主光栅,一个基准光栅,通过基准光栅来检测轮廓表面的主光栅,并根据条纹规律来推算物体的轮廓面型。

优点:过程运算量小,比较容易实现快速测量。

缺点:单从莫尔等高线不能判定物体凹凸,且光栅制作存在局限性,一般应用于工业在线质量检测。

主要两类:影像型莫尔条纹和投影型摩尔条纹

①影像型摩尔条纹

优点:测量精度高

缺点:要求较大光栅面积,至少覆盖待测轮廓,且光栅要紧挨待测物体

②投影莫尔法

将一个光栅投射到被测物体上,旁边使用另一个光栅观测行程的摩尔条纹,分析观测到的摩尔条纹,就可得到深度信息。

优点:适合测量较大物体。

3.立体视觉法

原理:由多幅图像(一般两幅)来获取物体三维几何信息的方法。主要模仿生物,几乎所有具备视觉的生物,都是两个眼睛。利用成像设备从不同位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体的三维几何信息。

优点:原理简单,对材质颜色等物面性质及背景光等环境因素要求较低,在超大型三维测量如建筑物测量中具有不可替代的优势。 缺点:系统需要预先标定,当测量环境发生变化时,相机参数需要重新调节。很难获取无纹理区域的信息。 应用:谷歌无人车

4.激光三角法

原理:线扫描法的一种,是用线光源投射到待测物体表面,然后经过一侧一维的扫描,获得整个物体的深度信息。

每次投射器投射一条光线到物体上,摄像机对带有光条纹的物体成像,图像上的光线特征恰恰对应投射器的光线。根据三角测量原理,可确定落在物体上光线的深度信息。

优点:原理简单,精度较高,因为使用单色性好的激光使得这种方法很少受物体表面纹理的影响相对较稳定,因此激光三角法在精度要求较高、环境较为复杂的工业检测领域,应用非常广泛

缺点:由于单帧图像得到的信息非常有限,激光三角法还需要一次一维的移动扫描,这也导致该方法效率较低

5.机构光技术

是一种主动的三角测量技术。

原理:由光源投射可控制的光点、光条或光面结构,光在物体表面形成特征点,线或者面,并由成像系统捕获图像,得到特征点的投射角,然后根据标定出的空间方向、位置参数,利用三角法测量原理计算特征点与摄像机镜头主点 之间的距离。

几种比较典型的编码结构光方式:

根据编码图案,将编码结构光分为了离散编码和连续编码两大类。

如图1.6所示。若沿着一行扫描编码结构光的数字投影条纹图案,我们会发现离散编码的图案中,码字(codeword)相同的区域其扫描轮廓线的值也是一样的,而相同码字区域的大小也很大程度上代表了重构出来的三维点云的密度;然而,在连续编码图案上,扫描轮廓线则为一条连续平滑的亮度曲线,在一个周期内每个像素都有唯一的码字,正是如此,该方法才能够获得与图像分辨率相当的点云密度。

而时间编码则是使用同一个像素点不同时间下的多个码字来确定该点的位置信息。

当然,也有一些方法结合时间和空间策略共同确定位置信息。

离散型空间编码方法大致可以分为三类:基于De aruijn的编码方法,基于M.array的编码方法,非正式的编码方法。

离散型时间编码方法主要代表有:自然二进制编码,Gray码。

离散型编码可以通过空间域或时间域进行编码实现。

空间编码和时间编码是通过码字解码的方式不同来区分的,空间编码需要周围相邻码字共同确定中心码字的位置信息,理论上讲,连续性编码方法既可以采用周期性模式,也可以采用非周期性模式。然而非周期性模式往往限制了模板大小,目前图像亮度等级有限,只有256级的情况下,无法绝对唯一地标识大范围空间。因此,周期性模式图像配合时间域交叉技术获得广泛认可。

连续性编码方案中,最具有代表性的是相移轮廓术和傅里叶轮廓术。

①傅里叶变换轮廓术

图1.7所示。轮廓测量法利用数字滤波技术,将频率较高的载波和频率较低的面形分离出来,然后进行反变换,得到包含高度信息的相位,在通过标定得到的相位高度映射关系得到三维面型信息。傅里叶变换轮廓术只用一幅图就可以得到相位值测量面型信息,但该方法计算量大,使用FFT产生的泄漏、混频、栅栏效应等会产生误差,采用数字滤波器也需要不断试错才能得到正确的参数。

②相位测量轮廓术

相位测量轮廓术(PMP:Phase Measurement Profilometry)的基本思想就是通过3F(F为相移法中采用的频率个数)张具有一定相位差的条纹图来计算相位,然后再结合相位-高度映射关系式计算出物体的高度分布。

相位测量轮廓术的原理同样如图1.7所示,将正弦光栅图像投影到物体表面,同时用成像设备采集变形条纹。

然后开始投影第二帧正弦光栅图案,同时采集这一帧的变形条纹……整个过程重复Ⅳ次,而每一帧图案相对前一帧的相移为2,r/N。

典型的几种算法被广泛应用于实际测量中,分别是三步相移法,四步相移法,五步相移法和六步相移法。

相比傅里叶轮廓术,相位测量轮廓术运算量要小很多,而且可以用查表法进一步降低运算量,这使得相位测量轮廓术在高速高精度实时三维测量中运用的非常广泛。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
样式也不给一下 老哥
样式也不给一下 老哥
回复回复点赞举报
报错了
报错了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
请描述django模板中标签的作用?_抽奖券模板
if标签相当于Python中的if语句,有elif和else相对应,但是所有的标签都需要用标签符号({%%})进行包裹。if标签中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判断运算符。示例代码如下:
全栈程序员站长
2022/09/19
8070
Django中的模板相关
1.render_to_string :找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过 HttpResponse 类包装成一个 HttpResponse 对象返回回去。示例代码如下:
bering
2023/10/16
5260
Django 学习笔记之模板
本文是自己 Django 学习笔记系列的第四篇原创文章。主要接着篇文章的视图内容,讲解模板的用法。另外也说下 Django 学习笔记系列的安排。自己计划大概 15 篇文章的输出自己学习 Django 框架的内容,再用大概 10 篇文章进行实战开发,最后可能用少量的篇幅进行补充。废话不多说,切回主题。
猴哥yuri
2018/08/16
2.1K0
Django之模板层
  在一个项目里面有一个专门放模板的文件夹Templates,有一个专门放视图的文件views,而且我们大多给浏览器响应的都应该是一个完整的页面,也就是读取的是一个HTML文件,然后再返回给浏览器。但我们在写HTML文件时,里面关于要从数据库拿数据,或者经常更改的地方又不能写死了,此时就需要用到模板语法了,在HTML文件中写上模板语法,然后在views读取HTML文件时,再对HTML文件中模板语法进行解析,替换。这样即完成解耦,又实现代码的复用性。
py3study
2020/01/19
6800
Pycharm开发Django项目DTL模板语法
模板中可以包含变量,Django在渲染模板的时候,可以传递变量对应的值过去进行替换。变量的命名规范和Python非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数,这个参数是一个字典类型。以后在模板中的变量就从这个字典中读取值的。示例代码如下:
用户2200417
2021/10/25
4010
Django模板标签
==, !=, >=, <=, >, < and, or, not, in, not in这些操作符都可以在模板中使用
星哥玩云
2022/09/14
1.8K0
Django 模板
在html文件中,default 为变量提供一个默认值,如果views传的变量布尔值为false,则使用指定的默认值,如果为true,就使用views传的变量值;
HammerZe
2022/03/25
5K0
Django 模板
Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中。 1 2 3 4 def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse
用户1214487
2018/01/24
2.7K0
Django之模板系统
  当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。 变量的命名包括任何字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。
py3study
2020/01/20
1.4K0
django学习-day03
#DTL模板中的python语句使用 ###if->elif->else: <body> {% if k.o.1 < 2 %} \<p>是的\</p> {% elif k.o.1 == 2 %} <p>刚刚好</p> {% else %} <p>不是</p> {% endif %} </body> 需要注意的是,因为是在DTL模板中使用,需要严格按照django 的语法来执行,包括每一个空格,python对这些是严格的,django 也是一样,DTL模板中所有的标签都是成双成对的
kirin
2020/05/09
6420
Django内置模板标签
控制自动转义是否可用。参数是on或off。 该标签会以一个endautoescape作为结束标签. 例如: {% autoescape on %} {{ body }} {% endautoescape %} 2. block block标签可以被子模板覆盖。 3. comment 在{% comment %}和{% endcomment %}之间的内容会被忽略,作为注释。 比如,当要注释掉一些代码时,可以用此来记录代码被注释掉的原因。 例如: <p>Rendered text with {{ pub_date|date:"c" }}</p> {% comment "Optional note" %} <p>Commented out text with {{ create_date|date:"c" }}</p> {% endcomment %} comment标签不能嵌套使用。 4. csrf_token 这个标签用于跨站请求伪造保护。常用于为form表单提供csrf令牌。 5. cycle 每当这个标签被访问,返回它的下一个元素。第一次访问返回第一个元素,第二次访问返回第二个参数,以此类推. 一旦所有的变量都被访问过了,就会回到最开始的地方,重复下去。这个标签在循环中特别有用: {% for o in some_list %} <tr class="{% cycle 'row1' 'row2'%}"> ... </tr> {% endfor %} 第一次迭代产生的HTML引用了row1类,第二次则是row2类,第三次又是row1 类,如此类推。 cycle的本质是根据某个规律,提供某种特性,比如想循环给表格的行添加底色等等。 也可以使用变量, 例如,如果你有两个模版变量:rowvalue1和rowvalue2, 可以让他们的值像这样替换: {% for o in some_list %} <tr class="{% cycle rowvalue1 rowvalue2 %}"> ... </tr> {% endfor %} 被包含在cycle中的变量将会被转义。 可以禁止自动转义: {% for o in some_list %} <tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}"> ... </tr> {% endfor %} 可以混合使用变量和字符串: {% for o in some_list %} <tr class="{% cycle 'row1' rowvalue2 'row3' %}"> ... </tr> {% endfor %} 在某些情况下,可能需要连续引用一个当前循环的值,而不前进到下一个循环值。要达到这个目的,只需使用as来给{% cycle %}取一个别名,就像这样: {% cycle 'row1' 'row2' as rowcolors %} 从那时起(设置别名后),你可以将别名当作一个模板变量进行引用,从而随意在模板中插入当前循环的值。 如果要将循环值移动到原始cycle标记的下一个值,可以使用另一个cycle标记并指定变量的名称。看下面的例子: <tr> <td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td> <td class="{{ rowcolors }}">...</td> </tr> <tr> <td class="{% cycle rowcolors %}">...</td> <td class="{{ rowcolors }}">...</td> </tr> 将输出: <tr> <td class="row1">...</td> <td class="row1">...</td> </tr> <tr> <td class="row2">...</td> <td class="row2">...</td> </tr> cycle 标签中,通过空格分割,可以使用任意数量的值。被包含在单引号(')或者双引号(")中的值被认为是可迭代字符串,相反,没有被引号包围的值被当作模版变量。 6. debug 输出整个调试信息,包括当前上下文和导入的模块。 7. extends 表示当前模板继承自一个父模板。 这个标签可以有两种用法: {% extends "ba
菲宇
2019/08/14
1.5K0
python测试开发django-68.templates模板标签{% for %}
有些标签类似这样:{% tag %} ,需要开始和结束标签 例如:{% tag %} …标签 内容 … {% endtag %},一般用于循环列表对象输出内容。
上海-悠悠
2019/11/14
8170
Django的模板系统
  {{ }} 和 {% %}  (变量相关用{{ }}  逻辑相关用{% %})
py3study
2020/01/21
1.8K0
Django学习笔记之Django模版系统
官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}。 变量 {{ 变量名 }} 变量名由字母数字和下划线组成。 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值。 几个例子: view中代码: def template_test(request): l = [11, 22, 33] d = {"name": "alex"} class Person(object): def __init__(
Jetpropelledsnake21
2018/07/04
9970
Django(29)模板变量「建议收藏」
模板中可以包含变量,Django在渲染模板的时候,可以传递变量对应的值过去进行替换。变量的命名规范和Python非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数,这个参数是一个字典类型。以后在模板中的变量就从这个字典中读取值的。示例代码如下:
全栈程序员站长
2022/09/16
4410
04.Django基础四之模板系统
  当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。 变量的命名包括任何字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。
changxin7
2019/09/29
2.6K0
Python进阶28-Django 模板层(Jinja2)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.9K0
Python进阶28-Django 模板层(Jinja2)
二、路由、模板
一、路由系统 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/' 每个正则表达式前面的r表示字符串不转义 请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求的参数及域
酱紫安
2018/04/16
1.9K0
Django模板层
tips:可以利用{% for obj in list reversed %}反向完成循环
py3study
2020/01/19
1.1K0
模板语法[通俗易懂]
标签看起来像是这样的: {% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
全栈程序员站长
2022/07/21
6930
相关推荐
请描述django模板中标签的作用?_抽奖券模板
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档