Halcon算子學習:create_surface_model

在這裏插入圖片描述

create_surface_model

( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
創建執行基於表面的匹配所需的數據結構

輸入:

  • object_model_3d
    3D對象模型的句柄。
  • RelSamplingDistance (input_control) real→(real)
    相對於物體直徑的採樣距離
    默認值:0.03
    建議值:0.1,0.05,0.03,0.02,0.01
    限制:0 < RelSamplingDistance < 1
  • GenParamName (input_control)
    通用參數的名稱。
    默認值:[]
    建議值:model_invert_normalspose_ref_rel_sampling_distancefeat_step_size_relfeat_angle_resolutiontrain_3d_edges
  • GenParamValue
    通用參數的值。
    默認值:[]
    建議值:0,1,‘true’, ‘false’,0.005,0.01,0.02,0.05,0.1

輸出:

  • SurfaceModelID (output_control)
    表面模型的句柄

算子說明

1、操作符create_surface_model爲3D對象模型ObjectModel3D創建基於表面的匹配模型。例如,以前可以使用read_object_model_3d從文件讀取3D對象模型,或者使用xyz_to_object_model_3d創建3D對象模型。創建的表面模型在SurfaceModelID中返回。

2、曲面模型的創建要求三維對象模型包含點和法線。下列組合是可能的:

  • 點和點法線;
  • 點和三角形或多邊形網格,例如,從CAD文件;
  • 點和2d映射,例如用xyz_to_object_model_3d三倍轉換的XYZ圖像。

3、注意,模型法線的方向和方向(向內或向外)對於匹配非常重要。還請注意,對於邊緣支持的基於表面的匹配,模型必須包含一個三角形或多邊形網格(如圖)
在這裏插入圖片描述
4、表面模型是通過對一定距離的三維對象模型採樣來創建的。採樣距離必須在參數RelSamplingDistance中指定,並相對於三維對象模型的軸向-平行 邊界框(axis-parallel bounding box)的直徑進行參數化。例如,如果RelSamplingDistance設置爲0.05,ObjectModel3D的直徑爲「10 cm」,則從對象表面採樣的點之間的距離大約爲「5 mm」。採樣點用於操作符find_surface_model中的近似匹配(參見下面)。可以使用操作符get_surface_model_param使用值’sampled_model’獲得採樣點。請注意,應該避免對象模型中的離羣點,因爲它們會破壞直徑。
減少RelSamplingDistance會產生更多的點,從而實現更穩定但更慢的匹配。增加RelSamplingDistance會導致更少的點,從而導致更少的穩定但更快的匹配。

5、採樣點用於通過操作符find_surface_model在場景中查找對象模型。爲此,要檢查點集中所有可能的點對,並計算每對點的距離和相對錶面方向。這兩個值被離散化並存儲以進行匹配。通用參數**‘feat_step_size_rel’和‘feat_angle_resolution’可分別用於設置距離和方向角的離散化**(如下所示)。

再次採樣3D對象模型進行姿態細化。第二次採樣的採樣距離較小,導致更多的點。通用參數**'pose_ref_rel_sampling_distance’設置相對於對象直徑的採樣距離**。降低該值可以得到更精確的位姿細化,但會導致更大的模型和更慢的模型生成和匹配。增加該值會導致更少的精確姿態細化,但會導致更小的模型和更快的模型生成和匹配(見下文)。

6、此外,基於表面的匹配可以使用3D邊緣來改進對齊(排列)。這對於平面或包含較大平面邊的對象特別有幫助,例如在不正確的旋轉或背景平面中發現它們。爲了允許find_surface_model也對齊邊緣,必須通過將通用參數‘train_3d_edges’設置爲‘true’來訓練表面模型。在這種情況下,模型必須包含一個網格,即三角形或多邊形。此外,對於邊緣支持的基於表面的匹配的訓練需要 OpenGL 2.1、GLSL 1.2和OpenGL擴展GL_EXT_framebuffer_object和GL_EXT_framebuffer_blit。我也可以比沒有邊緣支持的訓練花更長的時間。
通用參數對GenParamName和GenParamValue用於爲模型生成設置額外的參數。GenParamName包含要設置的參數名的元組,GenParamValue包含相應的值。以下值是可能的GenParamName:

  • 「model_invert_normals」:
    反轉模型表面法線的方向。模型生成需要知道正常的方向。如果模型和場景都使用相同的設置,法線將指向相同的方向。如果模型是從CAD文件加載的,法線可能指向相反的方向。如果你在場景表面的「外部」發現了模型,並且模型是由CAD文件創建的,試着將這個參數設置爲「true」。另外,確保CAD文件中的法線都指向外或內,即,始終一個方向。法向與曲面模型的姿態細化無關。因此,如果對象模型僅與操作符refine_surface_model_pose一起使用,則‘model_invert_normals’的值對結果沒有影響。
    可能的值:‘false’, ‘true’
    默認值:「假」

  • 「pose_ref_rel_sampling_distance」:
    設置相對於對象直徑的姿態細化的採樣距離。減少這個值會導致更精確的姿態細化,但會導致更大的模型和更慢的模型生成和細化。增加該值會導致更少的精確姿態細化,但會導致更小的模型和更快的模型生成和匹配。
    建議值:0.05、0.02、0.01、0.005
    默認值:0.01
    斷言:0 < ‘pose_ref_rel_sampling_distance’ < 1

  • 「feat_step_size_rel」:
    設置點對距離相對於物體直徑的離散化距離。該值默認爲RelSamplingDistance的值。不建議更改此值。對於噪聲很大的場景,可以通過增加值來提高對噪聲點的匹配的魯棒性。
    建議值:0.1、0.05、0.03
    默認值:RelSamplingDistance的值
    斷言:0 < ‘feat_step_size_rel’ < 1

  • 「feat_angle_resolution」:
    將點對方向的離散化設置爲角度細分的數目。建議不要更改此值。值的增加增加了匹配的精度,但降低了對不正確法線方向的魯棒性。值的減少降低了匹配的精度,但增加了對不正確法線方向的魯棒性。對於法線方向無法精確計算的非常嘈雜的場景,該值可以設置爲25或20。
    建議值:20、25、30
    默認值:30
    斷言:‘feat_angle_resolution’ > 1

  • 「train_3d_edges」:
    支持邊緣支持的基於表面的匹配和細化的訓練。在這種情況下,模型必須包含一個網格,即三角形或多邊形。這個參數需要OpenGL。 可能的值:‘false’, ‘true’ 默認值:「假」