哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

創(chuàng)建點云數(shù)據(jù)的Birdseye視圖

新機器視覺 ? 來源:CSDN ? 作者:CSDN ? 2021-04-01 14:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

點云數(shù)據(jù)——The Point Cloud Data

點云數(shù)據(jù)應表示為具有N行和至少3列的numpy數(shù)組。每行對應于單個點,其在空間(x,y,z)中的位置使用至少3個值表示。

d0be3e4c-92a7-11eb-8b86-12bb97331649.png

如果點云數(shù)據(jù)來自LIDAR傳感器,那么它可能具有每個點的附加值,例如“反射率”,其是在該位置中障礙物反射多少激光光束的量度。在這種情況下,點云數(shù)據(jù)可能是Nx4陣列。

圖像與點云坐標——Image vs Point Cloud Coordinates

點云的軸與圖像中的軸具有完全不同的含義。下圖顯示了藍色的圖像軸和橙色的點云軸。

d0d158ba-92a7-11eb-8b86-12bb97331649.png

關于圖像需要注意的一些重要事項:

圖像中的坐標值始終為正。

原點位于左上角。

坐標是整數(shù)值。

有關點云坐標的注意事項:

點云中的坐標值可以是正數(shù)或負數(shù)。

坐標可以采用實數(shù)值。

正x軸表示向前。

正y軸表示左。

正z軸表示向上。

創(chuàng)建點云數(shù)據(jù)的Birdseye視圖

鳥瞰圖的相關軸
為了創(chuàng)建鳥眼視圖圖像,來自點云數(shù)據(jù)的相關軸將是x和y軸。

d0e948f8-92a7-11eb-8b86-12bb97331649.png

但是,正如我們從上圖所示,我們必須小心并考慮以下事項:
x和y軸意味著相反的事情。
x和y軸指向相反的方向。
您必須移動值,以便(0,0)是圖像中可能的最小值。

1.限制矩形看——Limiting Rectangle to Look at

僅關注點云的特定區(qū)域通常很有用。因此,我們希望創(chuàng)建一個僅保留我們感興趣的區(qū)域內(nèi)的點的過濾器。

由于我們正在查看頂部的數(shù)據(jù),并且我們有興趣將其轉換為圖像,因此我將使用與圖像軸更加一致的方向。下面,我指定我想要集中在相對于原點的值的范圍。原點左側的任何內(nèi)容都將被視為負數(shù),而右側的任何內(nèi)容都將被視為正數(shù)。點云的x軸將被解釋為向前方向(這將是我們的鳥眼圖像的向上方向)。

下面的代碼將感興趣的矩形設置為在原點的兩側跨越10米,并在其前面20米處。

side_range=(-10, 10) # left-most to right-mostfwd_range=(0, 20) # back-most to forward-most

2.接下來,我們創(chuàng)建一個過濾器,僅保留實際位于我們指定的矩形內(nèi)的點。

# EXTRACT THE POINTS FOR EACH AXISx_points = points[:, 0]y_points = points[:, 1]z_points = points[:, 2] # FILTER - To return only indices of points within desired cube# Three filters for: Front-to-back, side-to-side, and height ranges# Note left side is positive y axis in LIDAR coordinatesf_filt = np.logical_and((x_points > fwd_range[0]), (x_points < fwd_range[1]))s_filt = np.logical_and((y_points > -side_range[1]), (y_points < -side_range[0]))filter = np.logical_and(f_filt, s_filt)indices = np.argwhere(filter).flatten() # KEEPERSx_points = x_points[indices]y_points = y_points[indices]z_points = z_points[indices]

3.將點位置映射到像素位置——Mapping Point Positions to Pixel Positions

目前,我們有一堆帶有實數(shù)值的點。為了映射這些值,將這些值映射到整數(shù)位置值。我們可以天真地將所有x和y值整合到整數(shù)中,但我們最終可能會失去很多分辨率。例如,如果這些點的測量單位是以米為單位,則每個像素將表示點云中1x1米的矩形,我們將丟失任何小于此的細節(jié)。如果你有一個類似山景的點云,這可能沒問題。但是如果你想能夠捕捉更精細的細節(jié)并識別人類,汽車,甚至更小的東西,那么這種方法就沒有用了。 但是,可以稍微修改上述方法,以便我們獲得所需的分辨率級別。在對整數(shù)進行類型轉換之前,我們可以先擴展數(shù)據(jù)。例如,如果測量單位是米,我們想要5厘米的分辨率,我們可以做如下的事情:

res = 0.05# CONVERT TO PIXEL POSITION VALUES - Based on resolutionx_img = (-y_points / res).astype(np.int32) # x axis is -y in LIDARy_img = (-x_points / res).astype(np.int32) # y axis is -x in LIDAR

您會注意到x軸和y軸交換,方向反轉,以便我們現(xiàn)在可以開始處理圖像坐標。

更改坐標原點——Shifting to New Origin

x和y數(shù)據(jù)仍未準備好映射到圖像。我們可能仍然有負x和y值。所以我們需要將數(shù)據(jù)移位到(0,0)最小值。

# SHIFT PIXELS TO HAVE MINIMUM BE (0,0)# floor and ceil used to prevent anything being rounded to below 0 after shiftx_img -= int(np.floor(side_range[0] / res))y_img += int(np.ceil(fwd_range[1] / res))

現(xiàn)在數(shù)據(jù)值都為正值

>>> x_img.min()7>>> x_img.max()199>>> y_img.min()1>>> y_img.max()199

像素值——Pixel Values

我們已經(jīng)使用點數(shù)據(jù)來指定圖像中的x和y位置。我們現(xiàn)在需要做的是指定我們想要用這些像素位置填充的值。一種可能性是用高度數(shù)據(jù)填充它。要做的兩件事 請記住: 像素值應為整數(shù)。 像素值應該是0-255范圍內(nèi)的值。 我們可以從數(shù)據(jù)中獲取最小和最大高度值,并重新縮放該范圍以適應0-255的范圍。另一種方法,這里將使用的方法是設置我們想要集中的高度值范圍,并且高于或低于該范圍的任何內(nèi)容都被剪切為最小值和最大值。這很有用,因為它允許我們從感興趣的區(qū)域獲得最大量的細節(jié)。

height_range = (-2, 0.5) # bottom-most to upper-most # CLIP HEIGHT VALUES - to between min and max heightspixel_values = np.clip(a = z_points, a_min=height_range[0], a_max=height_range[1])

在下面的代碼中,我們將范圍設置為原點下方2米,高于原點半米。接下來,我們將這些值重新縮放到0到255之間,并將類型轉換為整數(shù)。

def scale_to_255(a, min, max, dtype=np.uint8): """ Scales an array of values from specified min, max range to 0-255 Optionally specify the data type of the output (default is uint8) """ return (((a - min) / float(max - min)) * 255).astype(dtype) # RESCALE THE HEIGHT VALUES - to be between the range 0-255pixel_values = scale_to_255(pixel_values, min=height_range[0], max=height_range[1])

創(chuàng)建圖像陣列——Create the Image Array

現(xiàn)在我們準備實際創(chuàng)建圖像,我們只是初始化一個數(shù)組,其尺寸取決于我們在矩形中所需的值范圍和我們選擇的分辨率。然后我們使用我們轉換為像素位置的x和y點值來指定數(shù)組中的索引,并為這些索引分配我們選擇的值作為前一小節(jié)中的像素值。

# INITIALIZE EMPTY ARRAY - of the dimensions we wantx_max = 1+int((side_range[1] - side_range[0])/res)y_max = 1+int((fwd_range[1] - fwd_range[0])/res)im = np.zeros([y_max, x_max], dtype=np.uint8) # FILL PIXEL VALUES IN IMAGE ARRAYim[y_img, x_img] = pixel_values

預覽——Viewing

目前,圖像存儲為numpy數(shù)組。如果我們希望將其可視化,我們可以將其轉換為PIL圖像,并查看它。

# CONVERT FROM NUMPY ARRAY TO A PIL IMAGEfrom PIL import Imageim2 = Image.fromarray(im)im2.show()

我們作為人類并不善于分辨灰色陰影之間的差異,因此它可以幫助我們使用光譜顏色映射來讓我們更容易分辨出價值差異。我們可以在matplotlib中做到這一點。(實際無法正常顯示)

import matplotlib.pyplot as pltplt.imshow(im, cmap="spectral", vmin=0, vmax=255)plt.show()

d0f64850-92a7-11eb-8b86-12bb97331649.jpg

它實際上編碼與PIL繪制的圖像完全相同的信息量,因此機器學習學習算法例如仍然能夠區(qū)分高度差異,即使我們?nèi)祟惒荒芊浅G宄乜吹讲町悺?/p>

import cv2 #通過cv2顯示 cv2.imshow("im",im) cv2.waitKey() cv2.destroyAllWindows()

d1411b0a-92a7-11eb-8b86-12bb97331649.png

完整代碼——Complete Code

為方便起見,我將上面的所有代碼放在一個函數(shù)中,它將鳥瞰視圖作為一個numpy數(shù)組返回。然后,您可以選擇使用您喜歡的任何方法對其進行可視化,或者將numpy數(shù)組插入到機器學習算法中。

import numpy as np # ==============================================================================# SCALE_TO_255# ==============================================================================def scale_to_255(a, min, max, dtype=np.uint8): """ Scales an array of values from specified min, max range to 0-255 Optionally specify the data type of the output (default is uint8) """ return (((a - min) / float(max - min)) * 255).astype(dtype) # ==============================================================================# POINT_CLOUD_2_BIRDSEYE# ==============================================================================def point_cloud_2_birdseye(points, res=0.1, side_range=(-10., 10.), # left-most to right-most fwd_range = (-10., 10.), # back-most to forward-most height_range=(-2., 2.), # bottom-most to upper-most ): """ Creates an 2D birds eye view representation of the point cloud data. Args: points: (numpy array) N rows of points data Each point should be specified by at least 3 elements x,y,z res: (float) Desired resolution in metres to use. Each output pixel will represent an square region res x res in size. side_range: (tuple of two floats) (-left, right) in metres left and right limits of rectangle to look at. fwd_range: (tuple of two floats) (-behind, front) in metres back and front limits of rectangle to look at. height_range: (tuple of two floats) (min, max) heights (in metres) relative to the origin. All height values will be clipped to this min and max value, such that anything below min will be truncated to min, and the same for values above max. Returns: 2D numpy array representing an image of the birds eye view. """ # EXTRACT THE POINTS FOR EACH AXIS x_points = points[:, 0] y_points = points[:, 1] z_points = points[:, 2] # FILTER - To return only indices of points within desired cube # Three filters for: Front-to-back, side-to-side, and height ranges # Note left side is positive y axis in LIDAR coordinates f_filt = np.logical_and((x_points > fwd_range[0]), (x_points < fwd_range[1])) s_filt = np.logical_and((y_points > -side_range[1]), (y_points < -side_range[0])) filter = np.logical_and(f_filt, s_filt) indices = np.argwhere(filter).flatten() # KEEPERS x_points = x_points[indices] y_points = y_points[indices] z_points = z_points[indices] # CONVERT TO PIXEL POSITION VALUES - Based on resolution x_img = (-y_points / res).astype(np.int32) # x axis is -y in LIDAR y_img = (-x_points / res).astype(np.int32) # y axis is -x in LIDAR # SHIFT PIXELS TO HAVE MINIMUM BE (0,0) # floor & ceil used to prevent anything being rounded to below 0 after shift x_img -= int(np.floor(side_range[0] / res)) y_img += int(np.ceil(fwd_range[1] / res)) # CLIP HEIGHT VALUES - to between min and max heights pixel_values = np.clip(a=z_points, a_min=height_range[0], a_max=height_range[1]) # RESCALE THE HEIGHT VALUES - to be between the range 0-255 pixel_values = scale_to_255(pixel_values, min=height_range[0], max=height_range[1]) # INITIALIZE EMPTY ARRAY - of the dimensions we want x_max = 1 + int((side_range[1] - side_range[0]) / res) y_max = 1 + int((fwd_range[1] - fwd_range[0]) / res) im = np.zeros([y_max, x_max], dtype=np.uint8) # FILL PIXEL VALUES IN IMAGE ARRAY im[y_img, x_img] = pixel_values return im

責任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2577

    文章

    55445

    瀏覽量

    793744
  • 激光光束
    +關注

    關注

    0

    文章

    18

    瀏覽量

    7244
  • 點云
    +關注

    關注

    0

    文章

    59

    瀏覽量

    4095

原文標題:點云數(shù)據(jù)詳解——點云數(shù)據(jù)變?yōu)閳D像

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    S32DS 3.5 內(nèi)存映射視圖在閃存擦除/寫入后不更新問題怎么解決

    (我可以通過讀回數(shù)據(jù)來確認這一)。但是,“內(nèi)存映射”視圖不會刷新并繼續(xù)顯示舊值。 詳: 環(huán)境:S32DS 3.5 RDT GHS 工具鏈 項目生成并成功運行。 閃存擦除/寫入作按預期工作(通過讀取
    發(fā)表于 04-15 08:26

    如何克服毫米波雷達稀疏問題?

    細致描繪物體輪廓的致密,毫米波雷達輸出的數(shù)據(jù)就顯得比較“吝嗇”,通常每幀圖像只能提供幾十個離散的探測。 這種
    的頭像 發(fā)表于 02-27 09:16 ?290次閱讀
    如何克服毫米波雷達<b class='flag-5'>點</b><b class='flag-5'>云</b>稀疏問題?

    自動駕駛模型是如何“看”懂信息的?

    [首發(fā)于智駕最前沿微信公眾號]在自動駕駛中,是一個非常重要的感知信號,如激光雷達(LiDAR)生成的,其實就是三維空間里一堆帶坐標、強度和時間戳的
    的頭像 發(fā)表于 11-29 10:25 ?2045次閱讀
    自動駕駛模型是如何“看”懂<b class='flag-5'>點</b><b class='flag-5'>云</b>信息的?

    知聲入選國家知識產(chǎn)權示范企業(yè)創(chuàng)建推薦單位

    近日,上海市知識產(chǎn)權局公示了《2025-2027年知識產(chǎn)權強國建設示范創(chuàng)建工作推薦結果》。知聲(上海)智能科技有限公司憑借其卓越的自主創(chuàng)新能力與知識產(chǎn)權,成功入選“國家知識產(chǎn)權示范企業(yè)創(chuàng)建推薦單位
    的頭像 發(fā)表于 11-04 10:28 ?738次閱讀

    AI 驅(qū)動三維逆向:降噪算法工具與機器學習建模能力的前沿應用

    在三維逆向工程領域,傳統(tǒng)方法在處理復雜數(shù)據(jù)和構建高精度模型時面臨諸多挑戰(zhàn)。隨著人工智能(AI)技術的發(fā)展,降噪算法工具與機器學習建模能力的應用,為三維逆向工程帶來了創(chuàng)新性解決方案,顯著提升
    的頭像 發(fā)表于 08-20 10:00 ?846次閱讀
    AI 驅(qū)動三維逆向:<b class='flag-5'>點</b><b class='flag-5'>云</b>降噪算法工具與機器學習建模能力的前沿應用

    AIcube導入數(shù)據(jù)集,創(chuàng)建項目,報錯顯示“水平直方圖繪制異?!痹趺唇鉀Q?

    當我導入數(shù)據(jù)集,點擊創(chuàng)建項目后,報錯顯示水平直方圖異常,并且會卡在正在解析數(shù)據(jù)畫面。我嘗試將數(shù)據(jù)集數(shù)量更改,10張與100張,都會顯示這個錯誤 廬山派K230,CAMMV 錯誤日志
    發(fā)表于 08-11 06:38

    HarmonyOS5服務技術分享--函數(shù)預加載文章整理

    ??嗨,親愛的開發(fā)者朋友們!??? 今天咱們來聊聊如何使用??端一體化方式開發(fā)函數(shù)??,尤其針對華為的預加載服務。整個過程會手把手帶你從零開始,涵蓋創(chuàng)建工程、編寫代碼、調(diào)試到部署,幫你輕松掌握
    發(fā)表于 05-22 20:33

    HarmonyOS5服務技術分享--Serverless抽獎模板部署

    活動。不用寫復雜代碼,跟著步驟走就能搞定,文末還有部署避坑指南哦~ 一、前期準備 1?? ??注冊賬號+創(chuàng)建項目?? 先到華為開發(fā)者平臺注冊賬號 創(chuàng)建新項目時記得勾選\"開發(fā)
    發(fā)表于 05-22 20:25

    HarmonyOS5服務技術分享--存儲指南

    Hi各位開發(fā)者伙伴們!今天咱們來聊一聊HarmonyOS存儲的實戰(zhàn)玩法,手把手教你實現(xiàn)文件上傳、下載、元數(shù)據(jù)操作等核心功能。無需官方文檔的嚴肅感,咱們用最接地氣的方式搞懂這些API怎么用?。ㄎ哪└?/div>
    發(fā)表于 05-22 19:17

    HarmonyOS5服務技術分享--數(shù)據(jù)庫使用指南

    ? 華為數(shù)據(jù)庫(CloudDB)在HarmonyOS中的使用指南 ? ??嗨,開發(fā)者朋友們!?? 今天咱們來聊聊華為數(shù)據(jù)庫(CloudDB)在HarmonyOS應用中的集成和使用技
    發(fā)表于 05-22 18:29

    HarmonyOS5服務技術分享--ArkTS調(diào)用函數(shù)

    小白也能輕松上手?。ㄎ哪┯型暾a模板哦) ? 前期準備 1?? 登錄華為AppGallery Connect控制臺 2?? 確保已創(chuàng)建函數(shù)項目(還沒有的話快去后臺創(chuàng)建一個吧) ? 核心四步走
    發(fā)表于 05-22 18:22

    HarmonyOS5服務技術分享--ArkTS開發(fā)Node環(huán)境

    Studio 3.0+,配置HarmonyOS SDK。 ??服務開通??:在AGC(AppGallery Connect)控制臺創(chuàng)建項目,開通函數(shù)服務,獲取agconnect-services.json
    發(fā)表于 05-22 17:21

    HarmonyOS5服務技術分享--函數(shù)創(chuàng)建配置指南

    大家好!今天咱們來一起探索如何在華為HarmonyOS的AGC函數(shù)服務中創(chuàng)建和配置函數(shù),手把手教你用HTTP觸發(fā)器玩轉函數(shù)。無論你是剛入門還是想優(yōu)化現(xiàn)有功能,這篇指南都會給你清晰的指引,咱們直接
    發(fā)表于 05-22 17:08

    自動駕駛中常提的“”是個啥?

    啥?對自動駕駛有何影響? 是個啥? (Point Cloud)是一種在三維空間中由大量離散組成的
    的頭像 發(fā)表于 05-21 09:04 ?1345次閱讀
    自動駕駛中常提的“<b class='flag-5'>點</b><b class='flag-5'>云</b>”是個啥?

    標貝科技“4D-BEV上億標注系統(tǒng)”入選國家數(shù)據(jù)局首批數(shù)據(jù)標注優(yōu)秀案例

    ”主題,探討數(shù)據(jù)標注產(chǎn)業(yè)發(fā)展和高質(zhì)量數(shù)據(jù)集建設路徑。同時,現(xiàn)場發(fā)布了全國首批數(shù)據(jù)標注優(yōu)秀案例。由青島市大數(shù)據(jù)發(fā)展管理局推薦,標貝(青島)科技有限公司申報的“4D-BEV上億
    的頭像 發(fā)表于 04-30 14:38 ?826次閱讀
    標貝科技“4D-BEV上億<b class='flag-5'>點</b><b class='flag-5'>云</b>標注系統(tǒng)”入選國家<b class='flag-5'>數(shù)據(jù)</b>局首批<b class='flag-5'>數(shù)據(jù)</b>標注優(yōu)秀案例
    宁都县| 兴城市| 虹口区| 禄劝| 宜君县| 桓台县| 富蕴县| 莱州市| 玛纳斯县| 南澳县| 高雄县| 潢川县| 昌黎县| 商城县| 扶风县| 翼城县| 诏安县| 双鸭山市| 洛川县| 九江市| 荃湾区| 莲花县| 永善县| 凯里市| 武清区| 巴马| 张家港市| 怀集县| 田林县| 息烽县| 疏勒县| 石景山区| 开封市| 郓城县| 汨罗市| 金昌市| 台中市| 阳高县| 峡江县| 四川省| 绥中县|