halcon三维点云数据处理(十)locate_cylinder_3d

server/2025/1/11 13:34:14/

目录

  • 一、locate_cylinder_3d例程代码
  • 二、gen_binocular_rectification_map函数
  • 三、binocular_disparity函数
  • 四、自定义函数select_best_candidates
  • 五、自定义函数remove_shadowed_regions

3d_1">一、locate_cylinder_3d例程代码

1、读取或者创建3D形状模型,
2、根据双目相机参数和图像获得校正后图像对的视差图。
3、

gen_cam_par_area_scan_division (0.00855613, -2579.17, 5.99979e-006, 6e-006, 399.681, 232.327, 752, 480, CamParamMatching)
gen_cam_par_area_scan_division (0.0121469, -2514.3, 9.30281e-006, 9.3e-006, 272.773, 273.689, 640, 512, CamParam1)
gen_cam_par_area_scan_division (0.0121592, -2687.76, 9.30085e-006, 9.3e-006, 302.665, 263.738, 640, 512, CamParam2)
create_pose (0.202198, 0.00177953, 0.0376427, 0.325733, 342.295, 359.167, 'Rp+T', 'gba', 'point', RelPose)
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, 1, 'viewing_direction', 'bilinear', CamParamRect1, CamParamRect2, CamPoseRect1, CamPoseRect2, RelPoseRect)
* 
file_exists ('cylinder.sm3', FileExists)
if (FileExists)* Load the model from fileread_shape_model_3d ('cylinder.sm3', ShapeModel3DID)
else* Recreate the model from the DXF fileread_object_model_3d ('cylinder.dxf', 'mm', [], [], ObjectModel3DID, DxfStatus)prepare_object_model_3d (ObjectModel3DID, 'shape_based_matching_3d', 'true', [], [])create_shape_model_3d (ObjectModel3DID, CamParamMatching, rad(90), 0, 0, 'gba', 0, 0, 0, rad(45), 0, rad(360), 0.3, 0.45, 10, 'num_levels', 5, ShapeModel3DID)write_shape_model_3d (ShapeModel3DID, 'cylinder.sm3')
endif
* 
for Index := 1 to 15 by 1* * emphasize() enhances the texture on the cylinders surfaceread_image (Image1, Path + 'stereo_left_' + Index$'02')emphasize (Image1, ImageEmphasize1, 5, 5, 2)map_image (ImageEmphasize1, Map1, ImageMapped1)read_image (Image2, Path + 'stereo_right_' + Index$'02')emphasize (Image2, ImageEmphasize2, 5, 5, 2)map_image (ImageEmphasize2, Map2, ImageMapped2)* * the mask width and height must be (approximately) set according to the size* of the pattern projected onto the setupbinocular_disparity (ImageMapped2, ImageMapped1, Disparity, Score, 'ncc', 7, 7, 0, -20, 140, 1, 0.7, 'left_right_check', 'none')select_best_candidates (Disparity, TopMost)remove_shadowed_regions (Disparity, 0.01)* * display height map and highest object extractedclear_window (WindowHandleL)dev_set_window (WindowHandle)dev_clear_window ()dev_display (ImageMapped2)dev_display (Disparity)wait_seconds (0.5)dev_display (TopMost)dev_display (Disparity)wait_seconds (0.5)* * determine exact 3D pose of highest objectdev_set_window (WindowHandleL)read_image (Image, Path + 'closeup_' + Index$'02')dev_display (Image)find_shape_model_3d (Image, ShapeModel3DID, 0.8, 0.7, [0, 2], [], [], Pose, CovPose, Score_CTRL)if (|Score_CTRL| != 0)dev_set_color ('green')display_match_pose (ShapeModel3DID, Pose, WindowHandleL)elsedisp_message (WindowHandleL, ' No match found ', 'window', 12, 12, 'black', 'true')endif* if (Index != 15)disp_continue_message (WindowHandleL, 'black', 'true')endifstop ()
endfor
disp_message (WindowHandleL, 'Program finished \nPress \'Run\' to clear the shape model', 'window', 1, 1, 'black', 'true')
stop ()
dev_close_window ()

二、gen_binocular_rectification_map函数

生成变换映射,描述双目相机对图像到公共校正图像平面的映射。

gen_binocular_rectification_map( : Map1, Map2 : CamParam1, CamParam2, RelPose, SubSampling, Method, MapType : CamParamRect1, CamParamRect2, CamPoseRect1, CamPoseRect2, RelPoseRect)

三、binocular_disparity函数

使用相关技术计算校正图像对的视差

binocular_disparity(ImageRect1, ImageRect2 : Disparity, Score : Method, MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, Filter, SubDisparity : )

四、自定义函数select_best_candidates

下面这段代码的功能是选取最上层的一个圆柱,感觉非常经典,逐句理解一下:
full_domain 将图像的域(ROI)扩大到最大。
scale_image_max 灰度值范围(minimum,maximum ),扩展到范围是(0 ,255)。
regiongrowing_n 对多通道图像使用区域生长来分割图像
intensity 计算灰度值的均值和偏差。
select_gray 根据灰度值特征选择区域。
select_shape借助形状特征选择区域。
min_max_gray确定区域内的最小和最大灰度值。
tuple_sort_index 对Tuple中的所有元素按升序排序
select_obj 选取图像

* 
full_domain (Disparity, DisparityFull)
scale_image_max (DisparityFull, ImageScaleMax2)
gray_dilation_shape (ImageScaleMax2, ImageMax, 3, 3, 'octagon')
* 
* 
regiongrowing_n (ImageMax, cylinders, '2-norm', 0, 5, 200)
intensity (cylinders, ImageScaleMax2, Mean1, Deviation1)
tuple_max (Mean1, MaxVal)
select_gray (cylinders, ImageScaleMax2, SelectedRegions, 'mean', 'and', MaxVal / 2, MaxVal + 1)
select_shape (SelectedRegions, SelectedRegions, ['area', 'rectangularity'], 'and', [7000, 0.65], [25000, 1.0])
intensity (SelectedRegions, ImageScaleMax2, Mean, Deviation)
* 
min_max_gray (SelectedRegions, ImageScaleMax2, 0, Min, Max, Range)
tuple_sort_index (Max, Indices)
select_obj (SelectedRegions, TopMost, Indices[|Max| - 1] + 1)
* 
return ()

五、自定义函数remove_shadowed_regions

对于每个3D相机,遮挡和阴影都会产生非常高视差的小区域,这将被理解为靠近相机的物体,为了提高结果的质量,我们删除了这些区域,把高视差区域灰度设为0。

scale_image_max (Disparity, ImageScaleMax)
gray_histo (ImageScaleMax, ImageScaleMax, AbsoluteHisto, RelativeHisto)
Percent := RelativeHisto[255]
i := 254
while (Percent < Threshold)Percent := RelativeHisto[i] + Percenti := i - 1
endwhile
threshold (ImageScaleMax, Region, i, 255)
overpaint_region (Disparity, Region, 0.0, 'fill')
return ()

http://www.ppmy.cn/server/157478.html

相关文章

web前端第三次作业

制作可提交的用户注册表: 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

Java阶段四03

第4章-第3节 一、知识点 Mybatis-Plus、mapstruct 二、目标 理解为什么要过滤敏感字段 如何使用查询过滤 Mybatis-Plus如何使用联表分页查询 如何实现字段的自动填充 三、内容分析 重点 掌握几种过滤敏感字段的方式 掌握Mybatis-Plus的联表分页查询方式 掌握字段自动…

Three.js 渲染技术:打造逼真3D体验的幕后功臣

文章目录 前言一、着色器&#xff08;Shaders&#xff09;二、后处理&#xff08;Post-processing&#xff09;三、抗锯齿&#xff08;Anti-aliasing&#xff09;四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射&#xff08;Environment Mapping&#xff09;七、纹理…

不同音频振幅dBFS计算方法

1. 振幅的基本概念 振幅是描述音频信号强度的一个重要参数。它通常表示为信号的幅度值&#xff0c;幅度越大&#xff0c;声音听起来就越响。为了更好地理解和处理音频信号&#xff0c;通常会将振幅转换为分贝&#xff08;dB&#xff09;单位。分贝是一个对数单位&#xff0c;能…

【时时三省】(C语言基础)常见的动态内存错误3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对同一块动态内存多次释放 示例&#xff1a; 解决方法就是释放完把p等于空指针就好了 动态开辟的空间忘记释放 示例&#xff1a; 只有p能找到这块空间 只有p知道这块动态开辟的空间起始地…

STM32 : 奈奎斯特-香农采样定理

在 MPU6050 角度计算过程中&#xff0c;采样率&#xff08;Sampling Rate&#xff09;需要大于等于两倍的带宽&#xff08;Bandwidth&#xff09;&#xff0c;这一要求源自奈奎斯特-香农采样定理&#xff08;Nyquist-Shannon Sampling Theorem&#xff09;。该定理指出&#xf…

uniapp实现商品图片管理

先上效果图&#xff08;实现商品的图片管理&#xff09; &#xff08;修改前&#xff09; &#xff08;修改后&#xff09; 图片管理移动app常见需求&#xff0c;今天主要演示如何快速实现.这里还是基于 《星云erp-移动版》演示版 &…

Web渗透测试之XSS跨站脚本 原理 出现的原因 出现的位置 测试的方法 危害 防御手段 面试题 一篇文章给你说的明明白白

目录 XSS介绍的原理和说明 Cross Site Scripting 钓鱼 XSS攻击原理 XSS漏洞出现的原因&#xff1a; XSS产生的原因分析 XSS出现位置&#xff1a; XSS测试方法 XSS的危害 防御手段&#xff1a; 其它防御 面试题: 备注&#xff1a; XSS介绍的原理和说明 嵌入在客户…