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

一、前言

深度图向点云图进行转换是进行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,三角化是三维重建的经典算法,根据平面内三位点的拓扑连接关系获得一个三角网格曲面模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态代理之Cglib浅析

什么是Cglib Cglib是一个强大的,高性能,高质量的代码生成类库。它可以在运行期扩展JAVA类与实现JAVA接口。其底层实现是通过ASM字节码处理框架来转换字节码并生成新的类。大部分功能实际上是ASM所提供的,Cglib只是封装了ASM,简化了…

机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化(Max Pooling)概念的提出——卷积神经网络通用 1)池化层 2&#xff0…

C#委托——基础2

在上一篇随笔中,简要说明了怎样定义委托,定义事件,订阅事件,最后也实现了效果,就是当员工类的某个对象,执行某个事件时,委托事件被触发,后面也得到了结果,但是想象一下实…

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点:模型标准化,源代码…

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

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…

【tenserflow】——数据类型以及常用属性

目录 一、什么是Tensor? 二、Tensorflow常见数据类型 三、Tensorflow常见属性device\cpu\gpu\ndim\shape\rank等 1、创建一个tensor 1)tf.constant() 2)tf.Variable() 2、判断一个变量是否为tensor张量 3、生成不同设备(cpu,gpu&#x…

网页开发浏览器兼容性问题

1、在ie6下的双margin问题 在ie6下,设置了float的元素,以float:left为例,如图所示。会出现第一个浮动元素,即相对于父级元素浮动的,会出现双倍margin的问题。 注意仅仅是相对于父级元素浮动的,即第一个会出…

【tensorflow】——创建tensor的方法

目录 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形状的数组 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形状的数组 6、tf.fill():用指定的元素去填充指定形状的数组 7、随机化初始化进行创建 1)normal正态分…

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲,有以下几种图像类型:‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’,具体含义如下图所示。 ‘byte’ 每像素1字节…

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

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

【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)

目录 ​ 1、scalar——标量 1)在神经网络中存在的场景 2)one_hot编码 3)举例应用 2、vector——向量 ​ 3、matrixs——矩阵 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是让初学者对tensor的各种形式的使用场…

Java - I/O

File类 java.io操作文件和目录,与平台无关。具体的常用实例方法: File file new File("."); // 以当前路径创建名为 "." 的 File 对象   文件目录信息函数     -   String getName/Path/Parent(): 文件名/路径…

Halcon —— 边缘检测算子详解

一、算子介绍 1.1 种类 halcon内常用的边缘检测算子包括如下几种: 1.edges_image: 提取2D 图像边缘 2.edges_sub_pix:提取2D图像亚像素边缘 3.edges_object_model_3d :提取3D图像边缘 4.edges_color和edges_color_sub_pix:提取彩…

【TensorFlow】——索引与切片

目录 1、利用index进行索引 2、利用“:”和“...”进行索引与切片 3、tf.gather()——对一个维度进行乱序索引 优势: 缺点: 例子 4、tf.gather_nd()——同时对多个维度进行索引 5、tf.boolean_mask()——通过布…

华硕(ASUS)X554LP笔记本一开机就进入aptio setup utility 问题的解决

某次因大意一直未插电,华硕(ASUS)X554LP笔记本后来没电关机。后来每次一开机就进入aptio setup utility界面,按F9调入默认配置,F10保存后退出,重启仍然进入aptio setup utility。 网上查了一下,…

【TensorFlow】——broadcast_to(在不复制内存的情况下自动扩张tensor)

目录 作用: 内在的思路 优点 什么时候可以broadcast ​ tf.boradcast_to .VS tf.tile 作用: 在不会实际意义上复制数据的情况下进行tensor的维度和形状的扩张,使得两个tensor维度和形状一致 对两个维度不一致的tensor进行加减前进行br…

20145212 《信息安全系统设计基础》第2周学习总结

20145212 《信息安全系统设计基础》第2周学习总结 教材学习内容总结 Vim基本操作 1.使用vim命令进入vim界面vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开Xfce终端,输入以下命令$ vim practice_1.txt 直接使…

Opencv—— 拟合直线

概念 最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。 最小二乘法就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。在图像处理中主要用于拟合线,通过求采样点距离误差最小的线,可以是直…

本地搭建Dubbo监控中心的安装步骤

Dubbo监控中心的安装步骤 参考链接:http://blog.csdn.net/lichunan/article/details/40349645 一、从github上下载dubbo源码进行编译: 1、下载地址为: https://github.com/alibaba/dubbo.git2、编译源码命令:首先进入~/dubbo&am…

【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)

目录 一、常规神经网络模型 二、TensorFlow实现前向传播步骤 1、读取数据集 2、batch划分 3、根据神经网络每一层的神经元个数来初始化参数w,b 4、进行每一层输入输出的计算 5、对每一层的输出进行非线性relu函数变换 6、计算一个batch训练后的误差loss 7、计算每一次…