halcon 位姿估计代码

halcon 位姿估计代码

基于形状匹配的位姿估计代码,将位姿以文本形式进行保存。队原始的图像进行了处理,去除纹理信息,保存关键边缘信息。
在这里插入图片描述

ReCreateShapeModel3D := false
* delete_file('F:/lb/halcon3d/obj_000003/old_model.sm3')
* ReCreateShapeModel3D := true
* Calibration 01: Code generated by Calibration 01
* CamParam := [0.0163392,-778.343,2.99949e-06,3e-06,925.576,553.982,1920,1080]
* CameraPose := [0.0117945,0.00286742,0.162576,1.37971,355.714,143.877,0]
CamParam := [0.0018522, 0, 3e-6, 3e-6,323.8841552734375, 243.9881591796875,640, 480 ]
Width := 640
Height := 480
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_update_off ()
read_object_model_3d ('model.ply', 'm', [], [], ObjectModel3DID, DxfStatus)
prepare_object_model_3d (ObjectModel3DID, 'shape_based_matching_3d', 'true', [], [])
list_image_files('', 'bmp', [], ImageFiles)
read_image(Images, ImageFiles)

inspect_object_model_3d (Images, ObjectModel3DID, CamParam, RefRotX, RefRotY, RefRotZ, LongitudeMin, LongitudeMax, LatitudeMin, LatitudeMax, CamRollMin, CamRollMax, DistMin, DistMax, MinFaceAngle)

dev_clear_window ()
 if (ReCreateShapeModel3D)
    Message := 'Creating the 3D shape model (may take several minutes) ...'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    create_shape_model_3d (ObjectModel3DID, CamParam, RefRotX, RefRotY, RefRotZ, 'gba', LongitudeMin, LongitudeMax, LatitudeMin, LatitudeMax, -rad(180), rad(180), DistMin, DistMax, 10, 'min_face_angle', MinFaceAngle, ShapeModel3DID)
    write_shape_model_3d (ShapeModel3DID, 'old_model.sm3')
else
    Message := 'Reading the 3D shape model file from disk ...'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    dev_set_check ('~give_error')
    dev_error_var (ErrorVar, 1)
    read_shape_model_3d ('old_model.sm3', ShapeModel3DID)
    Error := ErrorVar
    dev_set_check ('give_error')
   if (Error != H_MSG_TRUE)
        Message := 'Reading the 3D shape model file from disk ... not found!'
        Message[1] := 'Creating the 3D shape model (may take several minutes) ...'
        disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
        create_shape_model_3d (ObjectModel3DID, CamParam, rad(0), 0, rad(0), 'gba', -rad(180), rad(180), -rad(90), rad(90), rad(0), rad(360), 0.1, 0.3, 10, [], [], ShapeModel3DID)
*         create_shape_model_3d (ObjectModel3DID, CamParam, rad(180), 0, rad(90), 'gba', -rad(35), rad(35), -rad(35), rad(35), 0, rad(360), 0.2, 0.25, 10, [], [], ShapeModel3DID)
         write_shape_model_3d (ShapeModel3DID, 'old_model.sm3')
    endif
     read_shape_model_3d ('old_model.sm3', ShapeModel3DID)
 endif

dev_set_line_width (2)
list_files('rgb_gaussian','files', Files)
len:=|Files|

for ImageNo := 0 to len-1 by 1
    imgname:=Files[ImageNo]
    read_image (Image, Files[ImageNo])
    dev_display (Image)
    count_seconds (Seconds1)
    find_shape_model_3d (Image, ShapeModel3DID, 0.9, 0.8, 10, ['num_matches','pose_refinement'], [1,'least_squares_very_high'], Pose, CovPose, Score)
    count_seconds (Seconds2)
    Time := Seconds2 - Seconds1
    Message := |Score| + ' Match(es) found in ' + Time$'4.3f' + ' s'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    Time := Seconds2 - Seconds1
    for I := 0 to |Score| - 1 by 1
        PoseI := Pose[I * 7:I * 7 + 6]
        CovPoseI := CovPose[I * 6:I * 6 + 5]
        ScoreI := Score[I]
        project_shape_model_3d (ModelContours, ShapeModel3DID, CamParam, PoseI, 'true', 0.523599)
        dev_set_color ('blue')
        dev_display (ModelContours)
        dev_set_color ('coral')
        disp_3d_coord_system (WindowHandle, CamParam, PoseI, 0.015)
        dev_set_color ('magenta')
        display_match_pose (ShapeModel3DID, PoseI, WindowHandle)
        pose_to_hom_mat3d(PoseI, HomMat3D)
        parse_filename( imgname , BaseName, Extension, Directory)
*         if (ImageNo < 10)
*             id:='0000'     
*         elseif (ImageNo>=10 and ImageNo<100)
*             id:='000'     
*         elseif (ImageNo>=100 and ImageNo<1000)
*             id:='00'
*         elseif (ImageNo>=1000 and ImageNo<10000)
*             id:='0'
*         elseif (ImageNo>10000)
*             id:=''
*         endif
        
        open_file ('./poses-martix/'+BaseName+'.txt', 'append', martixFileHandle)
        for i:=0 to 11 by 1
            fwrite_string (martixFileHandle, HomMat3D[i])
            fwrite_string (martixFileHandle, ' ')
        endfor
        
        open_file ('./poses-angle/'+BaseName+'.txt', 'append', posesFileHandle)
        for j:=0 to |Pose|-2 by 1
            fwrite_string (posesFileHandle, PoseI[j])
            fwrite_string (posesFileHandle, ' ')
        endfor
        
        dump_window_image (Image1, WindowHandle)
        write_image (Image1, 'png', 0,'./results/'+BaseName)

        
    endfor
*     disp_continue_message (WindowHandle, 'black', 'true')
      wait_seconds(10)
endfor
* 
Message := 'Program terminated. Press \'Run\' to clear the 3D shape model.'
disp_message (WindowHandle, Message, 'window', Height - 30, 12, 'black', 'true')
* 
stop ()
dev_update_on ()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值