国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[3D&Halcon] 3D鞋點(diǎn)膠的點(diǎn)云邊界提取

這篇具有很好參考價(jià)值的文章主要介紹了[3D&Halcon] 3D鞋點(diǎn)膠的點(diǎn)云邊界提取。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  • ??博客主頁:https://loewen.blog.csdn.net
  • ??歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正!
  • ??本文由 丶布布原創(chuàng),首發(fā)于 CSDN,轉(zhuǎn)載注明出處??
  • ??現(xiàn)在的付出,都會(huì)是一種沉淀,只為讓你成為更好的人?


一. 邊界提取的常規(guī)思路

3D鞋實(shí)物圖如下所示:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換
鞋點(diǎn)膠的點(diǎn)云邊界提取的常規(guī)思路:

(一) 法向量(很重要,本文基礎(chǔ)內(nèi)容暫時(shí)不做介紹,后面補(bǔ)充)

(二) 切平面(簡單但適用性不強(qiáng),本文使用該方式供初學(xué)者一個(gè)學(xué)習(xí)思路)

  1. 讀取點(diǎn)云模型數(shù)據(jù);
    read_object_model_3d(Operator)
  2. 分割出鞋子點(diǎn)云集合;
    connection_object_model_3d(Operator)
    select_object_model_3d(Operator)
  3. 仿射變換到長軸與X平行的位置(基準(zhǔn)位置);
  4. 定義切平面,求鞋的3D點(diǎn)云集合跟切平面的點(diǎn)云交集
  5. 把交集的點(diǎn)云映射成2DXLD輪廓,求每段XLD輪廓的起點(diǎn)和終點(diǎn)坐標(biāo)
  6. 把得到的每段XLD輪廓的起點(diǎn)和終點(diǎn)坐標(biāo)映射轉(zhuǎn)換成3D點(diǎn)云坐標(biāo);
  7. 顯示鞋的點(diǎn)云集合以及鞋的外邊界點(diǎn)云集合;
  8. 若要配合機(jī)器人點(diǎn)膠的話,還需將外邊界點(diǎn)云坐標(biāo)排序、連接并指定機(jī)器人的運(yùn)行軌跡,將外邊界點(diǎn)云坐標(biāo)轉(zhuǎn)換成機(jī)器人坐標(biāo);

二. 3D鞋點(diǎn)膠的點(diǎn)云邊界提取具體步驟

2.1、讀取點(diǎn)云模型數(shù)據(jù)

如圖所示:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

read_object_model_3d ('./2020-01-14-16832.om3', 'm', [], [], ObjectModel3D, Status)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)

交互式顯示函數(shù) visualize_object_model_3d ,相比較于顯示函數(shù) disp_object_model_3d 的不同:

visualize_object_model_3d(Operator) — Interactively display 3D object models. 交互式顯示,可以點(diǎn)擊旋轉(zhuǎn),縮放。
disp_object_model_3d(Operator) — Display 3D object models. 只是展示。

2.2、去噪(得到鞋子的點(diǎn)云數(shù)據(jù)集合)

如圖所示:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

* ['distance_3d', 1]點(diǎn)云距離在1mm之內(nèi)的算作一個(gè)點(diǎn)云連通域集合
connection_object_model_3d (ObjectModel3D, 'distance_3d', 1, ObjectModel3DConnected)
* 獲取每個(gè)點(diǎn)云連通域集合包含的點(diǎn)個(gè)數(shù)(因?yàn)樾狱c(diǎn)云連通域包含的點(diǎn)云個(gè)數(shù)最多)
get_object_model_3d_params (ObjectModel3DConnected, 'num_points', GenParamValue)
* 篩選點(diǎn)數(shù)(獲取點(diǎn)云最多的集合,即鞋子點(diǎn)云),2e7 = 2*10的七次方
select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 20000, 2e7, ObjectModel3DSelected)
visualize_object_model_3d (WindowHandle, ObjectModel3DSelected, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut1)

Halcon例程中關(guān)于點(diǎn)云篩選的兩種不同方式【select_points_object_model_3d_by_density.hdev】和【select_object_model_3d.hdev】:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換


2.3、將鞋點(diǎn)云集合變換到原始坐標(biāo)系下主軸-x y z(基準(zhǔn))

所謂主軸:用最小外接長方體將點(diǎn)云囊括,獲取其長軸、短軸以及高度。

而鞋點(diǎn)云的長軸、短軸和高度相對于坐標(biāo)系X、Y、Z軸,會(huì)有一個(gè)姿態(tài)關(guān)系,這里稱作 pose。

姿態(tài)Pose7個(gè)參數(shù),包括3個(gè)平移(x、y、z)+3個(gè)旋轉(zhuǎn)(Rx、Ry、Rz)+1個(gè)旋轉(zhuǎn)類型(旋轉(zhuǎn)順序)—— 常規(guī)有0(先繞X旋轉(zhuǎn),在繞Y旋轉(zhuǎn),最后繞Z旋轉(zhuǎn))和1(和0相反)。

我們目的就是將鞋點(diǎn)云變換到標(biāo)準(zhǔn)位置,讓其長軸與X軸重合,短軸與Y軸重合,高度與Z軸重合,好處是切平面與鞋面垂直,與軸平行,沿軸切,不會(huì)亂。整齊。

鞋子點(diǎn)云在剛體/仿射變換后的姿態(tài)所圖所示:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

* 'principal_axes'代表求主軸,并輸出當(dāng)前主軸姿態(tài)Pose
moments_object_model_3d (ObjectModel3DSelected, 'principal_axes', Pose)
* 姿態(tài)翻轉(zhuǎn)
pose_invert (Pose, PoseInvert)
* 點(diǎn)云模型剛體變換
rigid_trans_object_model_3d (ObjectModel3DSelected, PoseInvert, ObjectModel3DStandard)
visualize_object_model_3d (WindowHandle, ObjectModel3DStandard, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)

moments_object_model_3d(Operator):確定主軸X軸方向,這樣做的原因是為了方便沿著x軸做切平面的時(shí)候,方便分割。這就是確定長軸的原因。

標(biāo)準(zhǔn)位置的好處:做切平面與鞋面垂直。與軸平行,沿軸切,不會(huì)亂。整齊。

其參數(shù)二含義:

  • 'central_moment_2_points'計(jì)算點(diǎn)云模型的二階矩(方差、即點(diǎn)云X、Y、Z的波動(dòng)情況),輸出X、Y、Z的方差,XY、XZ、YZ協(xié)方差(關(guān)聯(lián)性)。
  • 'mean_points'計(jì)算點(diǎn)云模型的一階矩(均值、即點(diǎn)云X、Y、Z的均值大小),輸出X、Y、Z的均值。
  • 'principal_axes'計(jì)算點(diǎn)云模型的主軸,輸出姿態(tài)Pose3個(gè)平移(x、y、z)+3個(gè)旋轉(zhuǎn)(Rx、Ry、Rz)+`1個(gè)旋轉(zhuǎn)類型)。

其中剛體變換等價(jià)于仿射變換的如下方式:

* 點(diǎn)云模型仿射變換
pose_to_hom_mat3d (PoseInvert, HomMat3D)
affine_trans_object_model_3d (ObjectModel3DSelected, HomMat3D, ObjectModel3DAffineTrans)

2.5、求鞋點(diǎn)云最小外接box(選做)

若覺得鞋點(diǎn)云主軸(長、寬和高軸)與坐標(biāo)軸(X、Y和Z軸)基本重合,也可忽略這一步。

因?yàn)樾L軸可能并不是直線,所以2.4得到的鞋點(diǎn)云長軸可能不一定和X軸重合,這時(shí)我們可以求鞋點(diǎn)云最小外接box繼續(xù)調(diào)整轉(zhuǎn)正鞋長軸和X軸之間的位置關(guān)系,使鞋點(diǎn)云轉(zhuǎn)正。

1)三角曲面重建

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

求鞋點(diǎn)云的最小外接box之前可以做一個(gè)三角網(wǎng)格曲面重建(點(diǎn)集→曲面),使得點(diǎn)云更加圓滑。

1、三角曲面重建:將無序點(diǎn)云三角化。內(nèi)部算子實(shí)際使用的是貪婪投影三角法:將有向點(diǎn)云投影到一個(gè)二維平面內(nèi),做平面內(nèi)三角化,
   最后根據(jù)平面內(nèi)的三角拓?fù)潢P(guān)系,生成一個(gè)三角網(wǎng)格曲面模型。此外,若使用膨脹腐蝕(參數(shù)3,本文默認(rèn)[]),就會(huì)使網(wǎng)格變大變小。
2、優(yōu)化項(xiàng):三角曲面重建需要點(diǎn)時(shí)間。如果點(diǎn)數(shù)太多的話,可以簡化點(diǎn)云(暫不做演示)。
3、局限性:三角曲面重建比較適用于表面連續(xù)比較光滑的曲面,或者點(diǎn)云密度比較均勻的情況,速度會(huì)比較快。否則會(huì)出現(xiàn)因點(diǎn)云不連續(xù)導(dǎo)致的奇形怪狀,甚至懸空點(diǎn)等。
* 對鞋點(diǎn)云進(jìn)行三角曲面重建(點(diǎn)數(shù)多會(huì)有點(diǎn)耗時(shí))
triangulate_object_model_3d (ObjectModel3DStandard, 'greedy', [], [], TriangulatedObjectModel3D, Information)
visualize_object_model_3d (WindowHandle, TriangulatedObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)

2)求鞋點(diǎn)云最小外接box

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

* Pose0:box的主軸(長、寬和高軸)相對于坐標(biāo)軸(X、Y和Z軸)的姿態(tài)
* Length1、Length2、Length3:box長寬高
smallest_bounding_box_object_model_3d (TriangulatedObjectModel3D, 'oriented', Pose0,Length1, Length2, Length3)
* 求出來的box主軸長軸并不一定和X軸完全重合,下面需要調(diào)整
pose_invert (Pose0, Pose1) //姿態(tài)翻轉(zhuǎn)
rigid_trans_object_model_3d (TriangulatedObjectModel3D, Pose1, TransObjectModel3D)
visualize_object_model_3d (WindowHandle, TransObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)

截止到這里,我們就算將第三步的【將鞋點(diǎn)云集合變換到原始坐標(biāo)系下主軸-x y z(基準(zhǔn))】完成了,下面將鞋子和盒子一起顯示一下:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換

smallest_bounding_box_object_model_3d (TransObjectModel3D, 'oriented', PoseBox,Length1, Length2, Length3)
gen_box_object_model_3d (PoseBox, Length1, Length2, Length3, PoseBoxOriented)
*['green','gray',0.5,'true'] 0.5代表盒子透明度,1表示不透明,0表示完全透明
visualize_object_model_3d (WindowHandle,[TransObjectModel3D,PoseBoxOriented], [],[], ['color_0','color_1','alpha_1','disp_pose'], ['green','gray',0.5,'true'],'RectBOX', [], [], Pose)

最小外接Box的計(jì)算可參考Halcon示例【smallest_bounding_box_object_model_3d.hdev】:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換


2.6、在Box中做切平面(切X軸),求與鞋子輪廓的交線

X軸,做切平面,每次沿X軸移動(dòng)指定均勻長度。切平面與鞋子點(diǎn)云有一個(gè)點(diǎn)云交集,把點(diǎn)云交集映射到二維平面上形成一個(gè)XLD二維的輪廓交線,交線的兩端(起點(diǎn)、終點(diǎn))就是我們需要的輪廓點(diǎn)。

切平面沿X軸方向一段段的對鞋子點(diǎn)云做切割,需要引入一個(gè)循環(huán)問題:

參考Halcon示例:inspect_3d_surface_intersections.hdev

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換
本小結(jié)主要由幾個(gè)步驟組成:

  1. 求出切平面與鞋點(diǎn)云的XLD輪廓;(知識(shí)點(diǎn)1intersect_plane_object_model_3d求交平面 )
  2. 做姿態(tài)轉(zhuǎn)換以及內(nèi)參1:1轉(zhuǎn)換(圖像尺寸和實(shí)際尺寸1:1,這樣比較好轉(zhuǎn)換),將XLD輪廓投影變換到二維XLD進(jìn)行處理;(知識(shí)點(diǎn)2:三維到二維XLD輪廓轉(zhuǎn)換)
  3. 對輪廓行方向點(diǎn)坐標(biāo)進(jìn)行排序,獲得最大最小點(diǎn)(輪廓邊緣);(知識(shí)點(diǎn)3:排序求出二維XLD輪廓的起點(diǎn)、終點(diǎn)坐標(biāo))
  4. 將所有的二維XLD輪廓起點(diǎn)、終點(diǎn)坐標(biāo)再轉(zhuǎn)換成三維點(diǎn)云坐標(biāo)(行坐標(biāo)對應(yīng)Y坐標(biāo),列坐標(biāo)對應(yīng)Z坐標(biāo));(知識(shí)點(diǎn)4:二維XLD輪廓轉(zhuǎn)換到三維點(diǎn)云,因?yàn)楸壤?:1,姿態(tài)直接轉(zhuǎn)就行)
  5. 顯示;

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換
代碼如下:

* 5.在box中做切平面,求與輪廓的交線
objectsOut:=[]
Index_S:=[]
Index_E:=[]
color_S:=[]
color_E:=[]
colorsOut:=[]
colorvaluesOut:=[]
all_x:=[]
all_y:=[]
* 做切平面與鞋子的點(diǎn)云相交
for index1:=0 to 45 by 1
*  求交線點(diǎn)云(做切平面)
   CutPlanePose := PoseBox
   CutPlanePose[0]:=PoseBox[0]-Length1/2+(index1)*4+3  //pose中的第五個(gè)參數(shù)值x:第一個(gè)為沿著x軸的平移,保證循環(huán)時(shí)可以沿著x軸正方向重復(fù)以一個(gè)固定距離做切割
*                                                      //需要從Box最左邊開始做切割,所以:PoseBox[0]-Length1/2,每次循環(huán)沿著x軸往右移動(dòng)4個(gè)單位
   CutPlanePose[3]:=0
   CutPlanePose[4]:=90  //pose中的第五個(gè)參數(shù)值Ry:繞著y軸(綠色)旋轉(zhuǎn)90度,讓平面立起來做切割
   CutPlanePose[5]:=0
   gen_plane_object_model_3d (CutPlanePose, [-1,-1,1,1] * 90, [-1,1,1,-1] * 90, IntersectionPlane)
*  visualize_object_model_3d (WindowHandle, [TransObjectModel3D,IntersectionPlane], [], Pose, ['disp_pose'], ['true'], [], [], [], PoseOut1)
   intersect_plane_object_model_3d (TransObjectModel3D, CutPlanePose, ObjectModel3DIntersection)
*  visualize_object_model_3d (WindowHandle, ObjectModel3DIntersection, [], [], [], [], [], [], [], PoseOut2)
*  為了求交線輪廓的起點(diǎn)和終點(diǎn),需要變換到二維XLD(跟相機(jī)標(biāo)定將世界坐標(biāo)系轉(zhuǎn)換到圖像像素坐標(biāo)系一個(gè)原理,需要內(nèi)外參)
*  圖像中的點(diǎn)云都是物理點(diǎn)坐標(biāo),都是世界坐標(biāo)系下的姿態(tài)(圖像相對于世界坐標(biāo)系下的姿態(tài)),所以需要翻轉(zhuǎn)姿態(tài),轉(zhuǎn)換成圖像坐標(biāo)系下的姿態(tài)
   pose_invert (CutPlanePose, PoseInvert)
*  確定投影平面在前面
   get_object_model_3d_params (ObjectModel3DIntersection, 'diameter_axis_aligned_bounding_box', Diameter)
   PoseInvert[2] := PoseInvert[2] +Diameter
*  用平行于投影平面的相機(jī)(1:1的比例)
   Scale:=1
   CamParam := [0,0,1.0 / Scale,1.0 / Scale,0,0,500,500] //人為構(gòu)建相機(jī)內(nèi)參(焦距、畸變系數(shù)、圖像中心點(diǎn)、寬高)
   project_object_model_3d (IntersectionXld, ObjectModel3DIntersection, CamParam, PoseInvert, 'data', 'lines')

*  轉(zhuǎn)換過來之后就存二維圖像處理XLD輪廓,將輪廓的所有上下起點(diǎn)和終點(diǎn)求出來就是我們需要的鞋子邊界了
   count_obj (IntersectionXld, Number)
   Rows:=[]
   Columns:=[]
   Row:=[]
   Column:=[]
*  可能會(huì)有斷開的輪廓,這里遍歷一下獲取所有輪廓點(diǎn)
   for I:=1 to  Number  by 1
     select_obj (IntersectionXld, EdgeContour, I)
     get_contour_xld(EdgeContour, Row,Column)
     Rows:=[Rows,Row]
     Columns:=[Columns,Column]
   endfor
*  點(diǎn)按照由上到下排序
   tuple_sort_index (Rows, Indices)
   tuple_length(Rows,Length)
   OrderRow:=[]
   OrderColumn:=[]
   if(Length>=1)
   for Row_Index:=0 to Length-1  by 1
      OrderRow:=[OrderRow,Rows[Indices[Row_Index]]]
      OrderColumn:=[OrderColumn,Columns[[Row_Index]]]
   endfor
   endif
   gen_contour_polygon_xld (Intersection, OrderRow, OrderColumn) 
*  求最大和最小點(diǎn)(行方向)
   tuple_sort_index (OrderRow, Indices)
   tuple_length(OrderRow,Length)
*  起點(diǎn)(xld)
   StartRow:=OrderRow[Indices[0]]
   StartColumn:=OrderColumn[Indices[0]]
*  終點(diǎn)(xld)
   EndRow:=OrderRow[Indices[Length-1]]
   EndColumn:=OrderColumn[Indices[Length-1]] 
   gen_cross_contour_xld(StartXP, StartRow, StartColumn, 6, 0.795296)
   gen_cross_contour_xld(EndXP, EndRow,EndColumn, 6, 0.795296)
   dev_display(Intersection)
   * 轉(zhuǎn)成點(diǎn)云的坐標(biāo)
   StartPose:=[CutPlanePose[0],StartRow,-StartColumn, 0,0,0,0]
   EndPose  :=[CutPlanePose[0],EndRow,-EndColumn, 0,0,0,0]
   gen_sphere_object_model_3d (StartPose, 2, StartPoint)
   gen_sphere_object_model_3d (EndPose  , 2, EndPoint  )  
*  visualize_object_model_3d (WindowHandle, [StartPoint,EndPoint], [], [], [], [], [], [], [], PoseOut4)
 * 所有對點(diǎn)的邊界點(diǎn)集合
   objectsOut := [objectsOut,StartPoint]
   objectsOut := [objectsOut,EndPoint  ] 
*  顯示時(shí)的顏色
   Index_S:= 0+index1*2
   Index_E:= 0+index1*2+1
   color_S:='color_'+Index_S
   color_E:='color_'+Index_E
   
   colorsOut := [colorsOut,color_S]
   colorsOut := [colorsOut,color_E]
   
   colorvaluesOut := [colorvaluesOut,'blue']
   colorvaluesOut := [colorvaluesOut,'blue']
     
   all_x:=[all_x,CutPlanePose[0]]
   all_y:=[all_y,StartRow]
   
   all_x:=[all_x,CutPlanePose[0]]
   all_y:=[all_y,EndRow]
   
endfor
*顯示外邊界模型點(diǎn)云
visualize_object_model_3d (WindowHandle,[objectsOut,TransObjectModel3D], [],[],[colorsOut],[colorvaluesOut], [], '', [], Pose)
*2二維顯示
dev_open_window (0, 0, 512, 512, 'black', WindowHandle1)
dev_set_color('red')
gen_cross_contour_xld(Start,all_x,all_y, 3, 0.885398)

效果展示:

3d邊緣提取,3D視覺,3d,點(diǎn)云邊界提取,3D點(diǎn)云與2D平面之間投影變換
注意:當(dāng)前的算法穩(wěn)定性不好,而且有些邊緣處理粗糙,點(diǎn)云轉(zhuǎn)換成2D進(jìn)行處理雖然簡單一些,但有時(shí)候會(huì)造成一些精度損失,本文僅供給初學(xué)者提供一個(gè)解決該問題的思路。最好的做法我們應(yīng)該更多的關(guān)注點(diǎn)云本身的特征進(jìn)行處理,比如基于法向量求解、凸包法形成曲面的變化、根據(jù)點(diǎn)云之間的鄰域關(guān)系等方式。

點(diǎn)云模型以及完整代碼:https://pan.baidu.com/s/15nXvEC8HbzvGM3_DuyCEbg ? ? ? ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ?? ? ? ? 提取碼:wznw文章來源地址http://www.zghlxwxcb.cn/news/detail-555223.html


下雨天,最愜意的事莫過于躺在床上靜靜聽雨,雨中入眠,連夢里也長出青苔。

到了這里,關(guān)于[3D&Halcon] 3D鞋點(diǎn)膠的點(diǎn)云邊界提取的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • rviz是如何獲取圖像里選擇的點(diǎn)云的3D坐標(biāo)的

    以前以為rviz是用OpenGL渲染繪圖,那么獲取圖像里像素點(diǎn)對應(yīng)的真實(shí)3D坐標(biāo)是采用的OpenGL里提供的API實(shí)現(xiàn)的,結(jié)果一看代碼還真不是這樣,rviz也就渲染用了OpenGL,其他都是自己實(shí)現(xiàn)的,圖像界面的實(shí)現(xiàn)完全是遵循MVC設(shè)計(jì)模式自己實(shí)現(xiàn)的透視投影和坐標(biāo)轉(zhuǎn)換等所有相關(guān)類。獲取點(diǎn)

    2024年04月25日
    瀏覽(27)
  • [3D&Halcon] 三維點(diǎn)云匹配&無序抓取

    [3D&Halcon] 三維點(diǎn)云匹配&無序抓取

    ??博客主頁:https://loewen.blog.csdn.net ??歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正! ??本文由 丶布布 原創(chuàng),首發(fā)于 CSDN, 轉(zhuǎn)載注明出處 ?? ??現(xiàn)在的付出,都會(huì)是一種沉淀,只為讓你成為更好的人? 一. 3D無序抓取原理 通過 3D 成像系統(tǒng)(激光三角、結(jié)構(gòu)光+單/雙目等

    2024年02月08日
    瀏覽(22)
  • 基于Open3D的點(diǎn)云處理16-特征點(diǎn)匹配

    基于Open3D的點(diǎn)云處理16-特征點(diǎn)匹配

    將點(diǎn)云數(shù)據(jù)統(tǒng)一到一個(gè)世界坐標(biāo)系的過程稱之為點(diǎn)云配準(zhǔn)或者點(diǎn)云拼接。(registration/align) 點(diǎn)云配準(zhǔn)的過程其實(shí)就是找到同名點(diǎn)對;即找到在點(diǎn)云中處在真實(shí)世界同一位置的點(diǎn)。 常見的點(diǎn)云配準(zhǔn)算法: ICP、Color ICP、Trimed-ICP 算法流程: 選點(diǎn): 確定參與到配準(zhǔn)過程中的點(diǎn)集。 匹

    2024年02月10日
    瀏覽(39)
  • Halcon3d 點(diǎn)云計(jì)算平面度
  • 史上超全的Halcon常用3D算子:點(diǎn)云處理

    在計(jì)算機(jī)視覺和機(jī)器人領(lǐng)域,點(diǎn)云處理是一項(xiàng)重要的任務(wù)。Halcon作為一款強(qiáng)大的圖像處理軟件,提供了豐富的3D算子來進(jìn)行點(diǎn)云數(shù)據(jù)的處理和分析。本文將介紹一些常見的Halcon 3D算子,并提供相應(yīng)的源代碼示例。 讀取點(diǎn)云數(shù)據(jù) 點(diǎn)云數(shù)據(jù)通常以文件的形式存在,可以通過Halco

    2024年02月02日
    瀏覽(31)
  • Halcon3D篇-3D預(yù)處理,濾波,點(diǎn)云篩選

    Halcon3D篇-3D預(yù)處理,濾波,點(diǎn)云篩選

    由于3D相機(jī)采集到的數(shù)據(jù)通常通過Tiff格式的深度圖進(jìn)行顯示或者保存。 深度圖與模型的互轉(zhuǎn)可以訪問另一篇博客:https://blog.csdn.net/m0_51559565/article/details/135362674 關(guān)于3D相機(jī)的數(shù)據(jù)采集,可以訪問我們另一篇關(guān)于LMI3D相機(jī)SDK的二次開發(fā): https://blog.csdn.net/m0_51559565/article/details/1

    2024年01月21日
    瀏覽(25)
  • [3D&Halcon] 3D重要算子及簡單處理點(diǎn)云模型求高度示例講解

    [3D&Halcon] 3D重要算子及簡單處理點(diǎn)云模型求高度示例講解

    ??博客主頁:https://loewen.blog.csdn.net ??歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請指正! ??本文由 丶布布 原創(chuàng),首發(fā)于 CSDN, 轉(zhuǎn)載注明出處 ?? ??現(xiàn)在的付出,都會(huì)是一種沉淀,只為讓你成為更好的人? 一. 重要算子解析 read_object_model_3d ( : : FileName, Scale, GenParamName, Gen

    2024年02月03日
    瀏覽(60)
  • 使用python-open3d讀取pcd,bin格式的點(diǎn)云,并顯示

    使用python-open3d讀取pcd,bin格式的點(diǎn)云,并顯示

    open3d讀取pcd格式點(diǎn)云 效果圖 ? ?用open3d讀取bin文件 ? 效果圖? ? ?

    2024年02月11日
    瀏覽(18)
  • 基于Open3D的點(diǎn)云處理17-Open3d的C++版本

    基于Open3D的點(diǎn)云處理17-Open3d的C++版本

    http://www.open3d.org/docs/latest/cpp_api.html http://www.open3d.org/docs/latest/getting_started.html#c http://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-project https://github.com/isl-org/open3d-cmake-find-package https://github.com/isl-org/open3d-cmake-external-project https://github.com/isl-org/Open3D/releases Note: -DBUILD_SHARED_LIBS

    2024年02月09日
    瀏覽(47)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包