生活随笔
收集整理的這篇文章主要介紹了
Halcon 3D点云和深度图的相互转化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
3D點云和深度圖
- 1. 如何將灰度圖轉(zhuǎn)為3D點云
- 2. 創(chuàng)建一張深度圖
- 3. 深度圖轉(zhuǎn)點云、點云轉(zhuǎn)深度圖
- 4. 代碼和圖片下載地址
1. 如何將灰度圖轉(zhuǎn)為3D點云
- 這里所說的灰度圖轉(zhuǎn)為3D點云,其實是將灰度圖像每個像素的行列坐標(biāo)作為3D點云的X,Y坐標(biāo),像素的灰度值(0—255)作為三維點的Z坐標(biāo)。
- 簡單說就是將一張灰度圖像拆成了三個數(shù)組:X,Y,Z,然后將這三個數(shù)組轉(zhuǎn)為點云。
halcon代碼:
dev_get_window
(WindowHandle
)
read_image
(Image, '1.bmp')
rgb1_to_gray
(Image
, GrayImage
)*獲取圖像尺寸
get_image_size
(GrayImage, Width, Height)
gen_rectangle1
(Rectangle
, 0, 0, Height
-1,Width
-1)
*從區(qū)域生成所有的像素坐標(biāo)
get_region_points(Rectangle
, X
, Y
)
*讀取圖像的全部像素
get_grayval(GrayImage
, X
, Y
, Z
)
*創(chuàng)建
3D對象模型
gen_object_model_3d_from_points(X
, Y
, Z
, ObjectModel3D
)
*顯示
3D模型
visualize_object_model_3d
(WindowHandle
,ObjectModel3D
, [], [], [], [], [], [], [], PoseOut
)
2. 創(chuàng)建一張深度圖
- 實際上深度圖是使用X,Y,Z三個數(shù)組的數(shù)據(jù)創(chuàng)建來的;
- X,Y是作為圖像的行列坐標(biāo),Z是實數(shù)(表示的是深度/高度),而不是灰度,因為灰度值是0——255之間的整數(shù);
- Z的值是能夠返回高度信息的傳感器獲取到的,比如點激光、線激光,結(jié)構(gòu)光等。
- 下面是自己賦值得到的一張深度圖。
dev_get_window
(WindowHandle
)
read_image
(Image, '2.bmp')
rgb1_to_gray
(Image
, GrayImage
)
*獲取圖像尺寸
get_image_size
(GrayImage, Width, Height)
gen_rectangle1
(Rectangle
, 0, 0, Height
-1,Width
-1)
*從區(qū)域生成所有的像素坐標(biāo)
get_region_points(Rectangle
, X
, Y
)
*讀取圖像的全部像素
get_grayval(GrayImage
, X
, Y
, Z
)*改變Z的值
Z
:=Z
-256*對在Rectangle2區(qū)域中的像素進(jìn)行賦值
gen_rectangle1
(Rectangle2, 101, 101, 140,140)
get_region_points(Rectangle2
, X2
, Y2
)
Z
[X2
*400+Y2
]:=2.4*創(chuàng)建一張類型為'real'的圖像
gen_image_const
(ImageConst
, 'real'
, Width
, Height
)
*使用X
,Y
,Z給圖像賦值
A
set_grayval
(ImageConst
, X
, Y
, Z
)
3. 深度圖轉(zhuǎn)點云、點云轉(zhuǎn)深度圖
- 接下來我們加載一張真正的深度圖,它是由線激光采集數(shù)據(jù)得到的,保存格式為tiff文件;
- 這是截取了其中一段圖像,掃描的是電路板上一些元器件和焊點的高度。
read_image
(Image, '3DImage1.tiff')
get_image_size
(Image
, Width
, Height
)*1. 這一步是將灰度圖轉(zhuǎn)為了X
,Y
,Z三個數(shù)組,當(dāng)然也就可以轉(zhuǎn)為三位點云了
*獲取圖像尺寸
get_image_size
(Image, Width, Height)
gen_rectangle1
(Rectangle
, 0, 0, Height
-1,Width
-1)
*從區(qū)域生成所有的像素坐標(biāo)
get_region_points(Rectangle
, X
, Y
)
*讀取圖像的全部像素
get_grayval(Image
, X
, Y
, Z
)*2. 再將X
,Y
,Z這三個數(shù)組轉(zhuǎn)回深度圖,實際應(yīng)用中,線機(jī)光返回的數(shù)據(jù)就是Z數(shù)組,X
,Y數(shù)組由自己創(chuàng)建
*創(chuàng)建一個空圖像
,注意type選擇'real'
gen_image_const
(ImageConst
, 'real'
, Width
, Height
)
*然后使用數(shù)組填充圖像
,這樣就完成了
set_grayval
(ImageConst
, X
, Y
, Z
)*3. 接下來就可以對深度圖做進(jìn)一步處理了。。。
4. 代碼和圖片下載地址
https://download.csdn.net/download/weixin_38566632/19765495
總結(jié)
以上是生活随笔為你收集整理的Halcon 3D点云和深度图的相互转化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。