目錄
Intel RealSense D435深度相機(jī)介紹:
關(guān)于左右紅外圖像:
關(guān)于像素深度的檢索:
Intel RealSense 各種工具:
工具的介紹
相機(jī)基本操作
相機(jī)自校準(zhǔn)
獲取相機(jī)參數(shù)
python腳本
Linux命令行
相機(jī)運(yùn)行并顯示畫面
獲得深度圖像
點(diǎn)云
幀對齊
英特爾官方手冊:調(diào)整深度攝像頭以獲得最佳性能
首先以相機(jī)的最佳深度分辨率運(yùn)行
確保圖像已正確曝光(曝光不佳時性能不佳的首要原因)
后處理
更改深度步長
彩色攝像頭
使用陽光,但避免眩光
Intel RealSense D435深度相機(jī)介紹:
一對立體紅外傳感器(Stereo IR Pair) + 一個紅外激光發(fā)射器(IR Projector) + RGB Camera
RGB攝像頭分辨率達(dá)2000萬像素,3D傳感器可以30幀/秒的速度提供分辨率高達(dá)1280 × 720,或者以90幀/秒的速度提供848 × 480的較低分辨率。?深度距離在0.1 m~10 m之間,視場角度為85 × 58度。
工作原理:左右紅外相機(jī)(接收器)分貝產(chǎn)生兩幅也就是左側(cè)和右側(cè)ir灰度圖像,中間紅外點(diǎn)陣發(fā)射器(紅外散斑)相當(dāng)于補(bǔ)光燈,進(jìn)而可以得到點(diǎn)云。紅外點(diǎn)陣發(fā)射器強(qiáng)度可調(diào),是否發(fā)射也可調(diào),不打開也能測深度,只是效果不好。最右邊的rgb相機(jī)用于采集彩色圖片,最終可以將彩色視頻流與深度流進(jìn)行對齊。
測距原理和一般的雙目相機(jī)相同,都是基于左右圖像的視差來求得距離。只是相比于普通彩色rgb相機(jī),紅外ir相機(jī)是用來接收目標(biāo)返回的紅外光線的,得到的是左右兩幅紅外灰度圖像。若把屋里燈光關(guān)掉,黑暗的環(huán)境,紅外ir相機(jī)一樣可以生成深度圖像,只是質(zhì)量略有下降。
視差目前僅在D400系列上可用,可使用控件修改控制視差。(advanced_mode)
關(guān)于左右紅外圖像:
- 具有相同的內(nèi)聯(lián)函數(shù)
- 沒有失真
- 兩個圖像之間沒有旋轉(zhuǎn)(單位矩陣)
- 兩個圖像之間只有一個軸上的平移(
translation[1]、
translation[2]為零
) - 像素坐標(biāo)的 y 分量可以在這兩個圖像間互換使用(立體校正的效果很好)
關(guān)于像素深度的檢索:
立體視差通過逆線性關(guān)系與深度相關(guān),并且可以通過 1 / rs2_get_depth_scale(...) 查詢記錄視差為 1 的點(diǎn)的距離。下面顯示了如何檢索像素的深度(以米為單位):
c++:
const float scale = rs2_get_depth_scale(sensor, NULL);
const uint16_t * image = (const uint16_t *)rs2_get_frame_data(frame, NULL);
float depth_in_meters = 1 / (scale * image[pixel_index]);
Intel RealSense 各種工具:
- 可以獲取的原始數(shù)據(jù)如下:
- color image,2D彩色圖像
- 點(diǎn)云xyz
- texure image,點(diǎn)云紋理彩色圖像,與點(diǎn)云xyz(或者說深度圖像)是對其的
- 點(diǎn)云xyz rgb,將點(diǎn)云xyz和texture image組合得到
- ir left image,左側(cè)ir灰度圖像
- ir right image,右側(cè)ir灰度圖像
工具的介紹
- 深度校準(zhǔn):Depth Quality Tool for Intel RealSense Cameras 用于測試z方向的深度數(shù)據(jù)是否準(zhǔn),只需要把rgbd相機(jī)正對著白色的墻面等就可以了,然后對比卷尺量的距離與軟件上顯示的距離,來判斷是否需要校準(zhǔn)相機(jī);
- Intel RealSense D400 Series Dynamic Calibration Software Tools?這個是校準(zhǔn)工具,如果前面計(jì)算的距離不準(zhǔn),可以利用這個軟件進(jìn)行校準(zhǔn),在蘋果或安卓手機(jī)搜realsense這個軟件,安裝打開,就是顯示一張類似棋盤格標(biāo)定板的圖片,然后配合校準(zhǔn)工具,按照上面的提示晃動手機(jī)即可校準(zhǔn),輸出外參R\T。
相機(jī)基本操作
更詳細(xì)說明見官網(wǎng):
Projection in RealSense SDK 2.0 · IntelRealSense/librealsense Wiki (github.com)
相機(jī)自校準(zhǔn)
更詳細(xì)內(nèi)容可見官網(wǎng):
Intel? RealSense? Self-Calibration for D400 Series Depth Cameras
這張圖片也就是說,在 Viewer 上進(jìn)行校準(zhǔn),當(dāng)誤差小于一定值時,可以忽略。
如果校準(zhǔn)過程中報(bào)錯:可能是沒有足夠的有效深度像素,通常可以通過確保投影儀處于打開狀態(tài)來補(bǔ)救。
獲取相機(jī)參數(shù)
python腳本
# 注意?。。⊥ㄟ^python script獲取內(nèi)參一定要看好自己到底用了哪個video stream
import pyrealsense2 as rs
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.rgb8, 30)
cfg = pipeline.start(config)
time.sleep(1)
profile = cfg.get_stream(rs.stream.depth) # 獲取深度流的配置文件
intr = profile.as_video_stream_profile().get_intrinsics() # 向下播放到視頻流并獲取內(nèi)在信息
print(intr) # 獲取內(nèi)參 width: 640, height: 480, ppx: 319.115, ppy: 234.382, fx: 597.267, fy: 597.267, model: Brown Conrady, coeffs: [0, 0, 0, 0, 0] 319.1151428222656
print(intr.ppx) # 獲取指定某個內(nèi)參
Linux命令行
rs-sensor-control
相機(jī)運(yùn)行并顯示畫面
import pyrealsense2 as rs
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.rgb8, 30)
pipeline.start(config)
time.sleep(1)
frames = pipeline.wait_for_frames()
depth_frame = frames.get_depth_frame()
color_frame = frames.get_color_frame()
# Convert images to numpy arrays
depth_image = np.asanyarray(depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
# # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
# depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
#
# # Stack both images horizontally
# images = np.hstack((color_image, depth_colormap))
#
# # Show images
# cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
# cv2.imshow('RealSense', images)
# cv2.waitKey(1)
fig, axes = plt.subplots(1, 2)
for ax, im in zip(axes, [color_image, depth_image]):
ax.imshow(im)
ax.axis('off')
plt.show()
pipeline.stop()
獲得深度圖像
通過函數(shù)從2D像素坐標(biāo)映射到3D坐標(biāo)需要了解該像素的深度(以米為單位)。下面顯示了如何獲得像素的深度(以米為單位):
python:
dpt_frame = pipe.wait_for_frames().get_depth_frame().as_depth_frame()
pixel_distance_in_meters = dpt_frame.get_distance(x,y)
若設(shè)備無法確定給定圖像像素的深度,則深度圖像中將存儲零值。這表示“無深度”。C++可以修改深度的刻度。(python似乎也可以)
點(diǎn)云
pyrealsense2提供了一個處理塊,用于從深度和顏色框架創(chuàng)建點(diǎn)云和相應(yīng)的紋理映射。從深度影像創(chuàng)建的點(diǎn)云是深度流的3D坐標(biāo)系中的一組點(diǎn)。下面是如何創(chuàng)建點(diǎn)云對象:
python:
import pyrealsense2 as rs
pc = rs.pointcloud()
points = pc.calculate(depth_frame)
pc.map_to(color_frame)
幀對齊
通常在處理顏色和深度圖像時,需要將每一個像素從一個圖像映射到另一個圖像
import pyrealsense2 as rs
align = rs.align(rs.stream.color)
aligned_frames = align.proccess(depth_and_color_frameset)
color_frame = aligned_frames.first(rs.stream.color)
aligned_depth_frame = aligned_frames.get_depth_frame()
英特爾官方手冊:調(diào)整深度攝像頭以獲得最佳性能
調(diào)整深度攝像頭以獲得最佳性能 (intelrealsense.com)
首先以相機(jī)的最佳深度分辨率運(yùn)行
- 英特爾實(shí)感系列D435:848*480
- 可以使用較低的分辨率,但會降低深度精度。立體深度傳感器的深度測量性能來自匹配左右圖像中物體位置的能力。輸入分辨率越高,輸入圖像越好,深度精度越好。
- 如果由于計(jì)算原因,應(yīng)用程序需要較低的分辨率,我們建議使用后處理算法在收到數(shù)據(jù)后立即對更高分辨率的深度圖和彩色圖像進(jìn)行子采樣(抽取)。將D4xx相機(jī)設(shè)置為較低分辨率模式的唯一令人信服的理由是:
- 減小最小工作范圍,該范圍將隨 x-y 分辨率進(jìn)行擴(kuò)展,
- 減少USB3.0總線上的帶寬,例如,如果達(dá)到帶寬限制,則允許更多攝像機(jī)同時運(yùn)行。
確保圖像已正確曝光(曝光不佳時性能不佳的首要原因)
檢查自動曝光是否良好,若不好,則切換到手動曝光以確保擁有良好的灰度左右圖像。曝光不佳是性能不佳的首要原因。
通常,我們建議先調(diào)整曝光以獲得最佳效果,同時保持GAIN=16(最低設(shè)置)。增加增益往往會引入電子噪聲,雖然彩色圖像可能看起來更好,但深度質(zhì)量會下降。曝光單位為微秒,因此33000為33ms。請注意,過度曝光圖像可能與曝光不足一樣糟糕,因此請小心找到合適的曝光。
自動曝光功能的使用見官方手冊
后處理
英特爾沒有對深度圖像進(jìn)行任何的后處理,而是將其留給其他的應(yīng)用程序。在SDK2.0中有一些簡單的后處理選項(xiàng),通常有以下處理步驟:
- 子采樣:在捕獲后降低x-y分辨率通常有利于減少更高級別的計(jì)算。分辨率減低2倍講授后續(xù)處理速度提高4倍。此外,子采樣可用于使用非零均值或非零中位數(shù)函數(shù)對數(shù)據(jù)進(jìn)行一些基本的孔填充和平滑處理。最后,子采樣實(shí)際上也有助于點(diǎn)云的可視化。
- 時間過濾:使用一些時間平均來改善深度,深度數(shù)據(jù)中存在時間噪聲。建議使用 IIR 過濾器。但在某些情況下,使用“持久性”也可能是有益的。
- 保留邊緣的濾波:平滑深度噪點(diǎn),保留邊緣,同時使表面更平坦。建議在視差域(即深度刻度為 1/距離)中進(jìn)行此處理,并通過逐漸增加步長閾值進(jìn)行試驗(yàn),直到它看起來最適合預(yù)期用途。另一種成功的后處理技術(shù)是使用由 RGB 圖像引導(dǎo)的域變換濾波器或雙線性濾波器。例如,這可以幫助銳化邊緣。
- 孔填充:有必要根據(jù)相鄰值或RGB圖像用最佳猜測來填充孔
更改深度步長
可能需要在高級模式 API 中更改“深度單位”。默認(rèn)情況下,D4 VPU 提供 16 位深度,深度單位為 1000um (1mm)。這意味著最大范圍將約為65m。但是,例如,通過將其更改為5000um,可以將深度報(bào)告為最大值5x65 = 325m。
彩色攝像頭
優(yōu)點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-785439.html
- 像素完美對齊、校準(zhǔn)并與深度圖重疊
- 完美的時間同步
- 無需額外的開銷即可對齊顏色與深度
- 不會產(chǎn)生額外的遮擋偽像,因?yàn)樗耆矊ζ洹?/li>
缺點(diǎn):文章來源地址http://www.zghlxwxcb.cn/news/detail-785439.html
- 如果投影儀打開,它通常會顯示投影儀圖案
使用陽光,但避免眩光
- 陽光可以降低傳感器的噪音,并傾向于"帶出"物體的紋理。此外,曝光可以減少到接近1ms,這也減少了運(yùn)動偽像。因此,結(jié)果是英特爾實(shí)感D4xx攝像頭實(shí)際上在陽光下表現(xiàn)非常好。
- 需要注意的一個問題是指向太陽或靠近太陽時的鏡片眩光。建議用擋板遮擋鏡片,以降低鏡片眩光的風(fēng)險(xiǎn)。
- 在自動曝光方面要特別小心,尤其是在圖像中可以看到太陽或太陽反射的情況下。默認(rèn)情況下,自動曝光算法會嘗試將整個圖像的平均強(qiáng)度保持在一定范圍內(nèi)。如果太陽在那個圖像中,其他一切都會突然變成黑色。對于許多應(yīng)用,如自主機(jī)器人或汽車,只需將自動曝光算法的興趣區(qū)域更改為較小的尺寸,或者具體到圖像的下半部分,它會有所幫助。
到了這里,關(guān)于英特爾 D435/D435i雙目相機(jī) 使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!