一、前言

深度图向点云图进行转换是进行3D检测项目时会遇到的问题,halcon里也有针对此问题的相关例程,下面对此例程进行分析。通过学习此例程,我们可以掌握如何将一张深度图像和一张正常二维图像转换为3D点云。

二、分析

* 初始化界面
dev_update_off ()
dev_close_window ()
*
* 读取Z图,即为深度图
read_image (Z, 'mreut_dgm_2.0.tif')
get_image_size (Z, Width, Height)
*
* 读取灰度图,将其灰度值作为属性添加到3D模型中。
read_image (AerialImage, 'mreut4_3.png')
*
* 用灰度图生成标签图像,采用的方法很简单,只做展示用。
* 自适应的阈值处理方法,将图像分为3个对象,用红蓝绿三种颜色表示。参数4表示高斯平滑的核的大小。如下图所示。
auto_threshold (AerialImage, Regions, 4)
*将分割后的区域生成标签图像。
* region_to_label根据分割区域的索引(1…n)将输入区域转换成标签图像,即,第一区域被绘成灰度值1,第二区域被绘成灰度值2。
region_to_label (Regions, LabelImage, 'byte', Width, Height)
*
* 将灰度图和标签图像合并为1个2通道复合图像。
compose2 (AerialImage, LabelImage, MultiChannelAttribImage)
*
* 在常规网格中创建包含X和Y坐标的灰度渐变图像。
GroundResolution := 2.0
* 用一阶方程来生成平面(输出图像,类型,垂直方向的参数,水平方向的参数,0阶参数,参考点的行坐标,列坐标,图像的宽高)。
* ImageSurface(r,c) = Alpha(r - Row) +Beta(c - Column) +Gamma
gen_image_surface_first_order (X, 'real', 0, GroundResolution, 0, 0, 0, Width, Height)
gen_image_surface_first_order (Y, 'real', -GroundResolution, 0, 0, 0, 0, Width, Height)


*
* 创建3D模型
* 属性名
AttribName := ['&gray','&terrain']
* 该算子将包含3D点的X、Y和Z坐标的图像三元组转换为3D对象模型。
* 从上面的程序可以看出,XY图像为与Z图同样大小的灰度渐变图像,MultiChannelAttribImage为两通道的属性图像,包含灰度图像和分割后的标签图像。
* 其中MultiChannelAttribImage的图像通道必须和AttribName的维度大小相同。
* 此时生成的为点云,下面用三角法生成三维图像。
xyz_attrib_to_object_model_3d (X, Y, Z, MultiChannelAttribImage, AttribName, ObjectModel3D)
*
* Display results
* 设置窗口1的属性,显示“地形类型”
dev_open_window (Height / 2, 0, Width / 2, Height / 2, 'black', WindowHandle1)
dev_set_part (0, 0, Height - 1, Width - 1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_set_color (['red','green','blue'])
dev_set_draw ('fill')
dev_display (Regions)
disp_message (WindowHandle1, 'Terrain types', 'window', 12, 12, 'black', 'true')
* 设置窗口2的属性,显示“鸟瞰图”
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle2)
set_display_font (WindowHandle2, 16, 'mono', 'true', 'false')
dev_display (AerialImage)
disp_message (WindowHandle2, 'Aerial image', 'window', 12, 12, 'black', 'true')
* 设置窗口3的属性,显示“Z图”
dev_open_window (0, Width / 2 + 8, Width, Height, 'gray', WindowHandle3)
set_display_font (WindowHandle3, 16, 'mono', 'true', 'false')
dev_display (Z)
disp_message (WindowHandle3, 'Digital surface model', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle3, 'black', 'true')
stop ()
*
* 对对象模型进行快速的三角测量,以便更好地进行可视化。
* 该算子通过三角法将点云重建为三维模型。
prepare_object_model_3d (ObjectModel3D, 'segmentation', 'true', [], [])
* 交互式地可视化3d对象模型
* 创建3D模型的位姿(平移量,旋转量,平移旋转的顺序,旋转值的意义,视图转换,位姿)
create_pose (-620, -85, 17000, 135, 2, 10, 'Rp+T', 'gba', 'point', Pose)
Instructions := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
*显示3D模型
visualize_object_model_3d (WindowHandle3, ObjectModel3D, [], Pose, ['color_attrib','color_attrib_start','color_attrib_end'], ['&gray',0,255], ['Created 3D model','Attribute used for visualization: \'&gray\''], [], Instructions, PoseOut)
visualize_object_model_3d (WindowHandle3, ObjectModel3D, [], PoseOut, ['color_attrib','lut'], ['&terrain','color1'], ['Created 3D model','Attribute used for visualization: \'&terrain\''], [], Instructions, PoseOut)
disp_end_of_program_message (WindowHandle3, 'black', 'true')


总结

通过此例程,可以初步了解3D转换的具体步骤。

  1. 根据灰度图,创建多通道的复合图像。
  2. 创建灰度渐变图像,X和Y
  3. 使用算子xyz_attrib_to_object_model_3d生成点云图。
  4. 三角化网格 prepare_object_model_3d (ObjectModel3D, ‘segmentation’, ‘true’, [], [])。
  5. 显示3D模型visualize_object_model_3d。
    总结下,虽然读完了整个例程,但还是有几个疑问。
  6. 为什么一定要要创建灰度渐变图像,灰度值的朝向有什么意义。
  7. 三角化方法的原理还不太清楚

再更:1,问题一搞清楚了,灰度渐变图像代表图像在X,Y平面的尺度。
2,三角化是三维重建的经典算法,根据平面内三位点的拓扑连接关系获得一个三角网格曲面模型。

Halcon例程详解 (深度图转换为3D图像)—— xyz_attrib_to_object_model_3d相关推荐

  1. Halcon例程详解(植物测量) —— measure_plant.hdev

    文章目录 前言 一.过程 1.1 筛选ROI区域 1.2 分割 1.3 三维建模与仿射变换 1.4 确定叶子的角度分布和高度 1.5 确定叶子的面积和树干的直径 1.6 对叶子的角度进行分析 二.例程 ...

  2. Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev

    前言 1卡尺工具介绍 Halcon中的Metrology方法即为卡尺工具,可用来拟合线,圆,这种方法对于目标比背景很明显的图像尺寸测量是很方便的,不需要用blob进行边缘提取等,但缺点也很明显,需要目 ...

  3. Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

    前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coup ...

  4. 093:QuerySet API详解-QuerySet转换为SQL的条件

    QuerySet API详解-QuerySet转换为SQL的条件: 生成一个 QuerySet 对象并不会马上转换为 SQL 语句去执行.比如我们获取 Book 表下所有的图书: books = Bo ...

  5. 详解美摄汽车图像及视频处理方案(二)

    延续详解美摄汽车图像与视频处理方案(一),在解决了车载摄像头拍摄记录难题后,新的问题接踵而至.单纯的拍摄记录已远不能满足当下年轻人乐于社交分享和追求个性表达的喜好,若是将车载摄像头拍摄的视频全部导出再 ...

  6. 25.消除不相关的细节/裂缝桥接(形态学 --膨胀与腐蚀详解 )--- OpenCV从零开始到图像(人脸 + 物体)识别系列

    本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 简书链接:https://www.jianshu.com/u/45da1fbce7d0 本文你会找到以下问题的答案: 形态 ...

  7. 进阶篇——树莓派OLED模块的使用 大量例程详解

    树莓派OLED模块的使用教程大量例程详解 #树莓派# 简介 Python有两个可以用的OLED库 [Adafruit_Python_SSD1306库]->只支持SSD1306 [Luma.ole ...

  8. 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 模型三维重建...

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html 前言:最近公司项目用到halcon的3d模板匹配,三维重建,相机标定, ...

  9. 一文为你详解2D与3D人脸识别有什么区别?

    最近业界内刮起了一股"人脸识别安全"的大讨论,小到个人大到超市以及银行,都在使用这个刷脸认证或支付,说它好吧,确实解决了无接触,快速高效等问题,你说它不好吧,也是有原因的,比如最明 ...

最新文章

  1. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
  2. BZOJ 1977: [BeiJing2010组队]次小生成树(Kruskal+树上倍增)
  3. 黑盒测试——自动饮料售货机
  4. mvc:annotation-driven/
  5. jsp java语法_javaweb-jsp语法
  6. Windows路由表
  7. [蓝桥杯2018初赛]日志统计-双指针
  8. 新闻发布项目——接口类(UserDao)
  9. python安装目录结构_python软件目录结构规范
  10. 协方差矩阵的详细说明
  11. C语言复合赋值运算符
  12. Python使用总结
  13. resourcehacker汉化版教程
  14. visio如何改变折线箭头拐弯方向
  15. 概率图模型(总结篇)
  16. Zero-Shot Deep Domain Adaptation[reading notes]
  17. 我是一名自由职业白帽黑客
  18. 网站出现403错误怎么办,为什么会出现403错误,要怎么解决
  19. 快速批量修改文件名字
  20. Effective java 总结11 - 序列化

热门文章

  1. 用boost库实现traceroute小工具
  2. 萨蒂扬软件技术(南京)研发中心”落户高新区
  3. [开发手记] 使用.NET实现你的IP切换器
  4. 589-N叉树的前序遍历
  5. 213. House Robber II 首尾相同的偷窃问题
  6. 前端面试---Vue部分考点梳理
  7. SpringBoot之静态资源访问
  8. 关于Vue.use()详解
  9. vue-cli3使用cdn引入
  10. matlab --- 图像处理基础