create_sheet_of_light_model
(ProfileRegion : : GenParamName, GenParamValue : SheetOfLightModelID)
创建一个执行线结构光技术3D测量的的模型
输入:
ProfileRegion
包含要处理的轮廓的图像的ROI。(如果所提供的区域不是矩形的,则使用其最小的外接矩形)
-
GenParamName
可以为线结构光模型调整的通用参数的名称。
默认值:“min_gray”
值列表:’ uity_solving’, ‘calibration’, ‘method’, ‘min_gray’, ‘num_profiles’, ‘offset_x’, ‘offset_y’, ‘offset_z’, ‘scale’, ‘scale_x’, ‘scale_y’, ‘scale_z’, ‘score_type’ -
GenParamValue
可以为线结构光模型调整的通用参数的值。
默认值:50
建议值:‘default’, ‘center_of_gravity’, ‘last’, ‘first’, 'bright ', ‘none’, ‘intensity’, ‘width’, ‘offset_scale’, 50,100,150,180
输出:
- SheetOfLightModelID
用于使用和访问光照模型的句柄。
描述
操作符create_sheet_of_light_model使用线结构光技术创建一个模型来执行3d测量。
该技术通过使用区域扫描摄像机和光线投影仪(通常是激光线投影仪)对不透明和漫反射固体的表面进行三维重建。照相机和放映机必须安装好,使它们的主轴形成三角形。三角测量的值通常选择在30°到60°之间。投射的光线在空间中定义了一个平面(结构光平面)。这个平面与被测量的固体表面相交,并建立了一个对摄像机可见的表面轮廓(Profile)。通过移动固体在测量系统前面,(即如照相机和激光器的组合),就有可能记录整个固体的表面。作为一种替代方案,测量系统也可以在被测表面上移动。请注意,轮廓在轮廓图像中必须大致水平定位,因为它们是逐列处理的。
如果有测量装置的几何信息,就可以计算出重建曲面的真实三维坐标。浏览所需几何图形的描述(即,标定)的信息,请参阅操作符set_sheet_of_light_param。如果没有这样的信息,测量的结果是一个视差图像(disparity image),其中每个像素保存着被测轮廓的亚像素精确位置的记录。
操作员在SheetOfLightModelID中返回光表模型的句柄,该句柄用于对光表模型的所有进一步操作,如修改模型的参数、测量轮廓、应用标定转换或访问测量结果。
强制输入图像参数
为了执行测量,您将不得不设置以下输入图标参数:
- ProfileRegion:定义轮廓图像的区域,操作符measure_profile_sheet_of_light将处理这些区域。这个区域应该是矩形的,可以通过使用操作符gen_rectangle1生成。如果传递给ProfileRegion的区域不是矩形的,那么将使用其最小的外接矩形(包围框)。注意,ProfileRegion仅由操作符measure_profile_sheet_of_light考虑,在处理视差图像时忽略它。
线结构光模型的默认设置参数
-
线结构光模型的默认设置被用来在基本配置中执行非校准的测量。以下列表提供了默认情况下使用的参数值的概述(有关所有受支持的通用参数的详细描述,请参阅set_sheet_of_light_param):
-
‘method’
is set to ‘center_of_gravity’ -
‘min_gray’:
is set to 100 -
‘num_profiles’
is set to 512 -
‘ambiguity_solving’
is set to ‘first’ -
‘score_type’
is set to ‘none’ -
‘calibration’
is set to ‘none’
修改模型参数
我们建议根据您的特定度量任务调整默认参数,以提高度量的质量或缩短运行时间。如果需要校准结果,还必须修改模型参数的默认值。
create_sheet_of_light_model提供了通用参数GenParamName和GenParamValue来修改大多数模型参数的默认值。注意,还可以使用set_sheet_of_light_param操作符设置模型参数。然而,使用第二个操作符,一次只能设置一个参数,而使用create_sheet_of_light_model一次可以设置多个参数。有关所有受支持的通用参数的详细描述,请参阅set_sheet_of_light_param。
请注意,以下模型参数无法使用create_sheet_of_light_model操作符设置,因此必须使用set_sheet_of_light_param操作符设置:
‘camera_parameter’、‘camera_pose’、‘lightplane_pose’和’movement_pose’。
可以使用操作符get_sheet_of_light_param查询模型参数的值。操作符query_sheet_of_light_params返回所有受支持的模型参数的名称。
使用简化的线结构光模型参数
在一个简单的设置或是否为一个真正的度量标定是必要的,观测到的视差图转换成3D值可以控制使用简化的参数集的线结构光模型:
通过将set_sheet_of_light_param的校准设置为‘offset_scale’,位姿和相机参数将更改为这样的值,即一个像素的偏移量对应于3D结果中的一个单元。这允许从一个未校准的线结构光模型创建一个三维物体模型和三维图像。
从视差到三维坐标的转换可以通过六个参数来控制:‘scale_x’、‘scale_y’、‘scale_z’、‘offset_x’、‘offset_y’、‘offset_z’。有关所有受支持的通用参数的详细描述,请参阅set_sheet_of_light_param。
自由的线结构光模型
由于在操作符create_sheet_of_light_model调用期间以及在接下来的操作期间为模型分配了内存,所以当模型不再使用时,操作符clear_sheet_of_light_model应该显式地释放该模型。
在多个线程中使用句柄
请注意,在多线程中使用线结构光模型’“SheetOfLightModelID’的句柄时必须特别小心。同一句柄不能在不同的线程中并发使用,如果它们修改了句柄。因此,您必须小心,特别是当线程调用更改句柄数据的操作符时。你可以在操作符的“注意”部分找到相应的提示。无论如何,如果您仍然希望在不同线程中并发写入句柄的操作符中使用相同的句柄,则必须同步这些线程,以确保它们不会同时访问相同的句柄。如果您不确定同一句柄的用法是否线程安全,请参阅相应参考手册条目的“注意”部分,如果其中包含指向此问题的警告。但是,可以在不同的线程中独立安全地使用不同的句柄。
示例:
* Create the rectangular region in which the profiles are measured.
gen_rectangle1 (ProfileRegion, 120, 75, 195, 710)
*
* Create a model in order to measure profiles according to
* the sheet-of-light technique. Simultaneously set some
* parameters for the model.
create_sheet_of_light_model (ProfileRegion, ['min_gray','num_profiles', \'ambiguity_solving','score_type'], \[70,290,'first','width'], \SheetOfLightModelID)
*
* Measure the profile from successive images
for Index := 1 to 290 by 1read_image (ProfileImage, 'sheet_of_light/connection_rod_'+Index$'.3')dev_display (ProfileImage)dev_display (ProfileRegion)measure_profile_sheet_of_light (ProfileImage, SheetOfLightModelID, [])
endfor
*
* Get the resulting disparity and score images
get_sheet_of_light_result (Disparity, SheetOfLightModelID, 'disparity')
get_sheet_of_light_result (Score, SheetOfLightModelID, 'score')
*
* Close the sheet-of-light handle once the measurement
* has been performed
clear_sheet_of_light_model (SheetOfLightModelID)