• <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
      
      
      <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
    • <dd id="2awkm"><s id="2awkm"></s></dd>
      <tbody id="2awkm"></tbody>
    • <dfn id="2awkm"></dfn>
      <menu id="2awkm"><noscript id="2awkm"></noscript></menu>

      深度圖像的HDR功能

      版本:V3.1

      1. 介紹

      圖像傳感器往往面臨的挑戰(zhàn)是明暗亮度相差較大場(chǎng)景下的物體細(xì)節(jié)顯示能力,例如拍攝室內(nèi)窗邊的人或物體,如圖1所示。在機(jī)器人方向,類似的場(chǎng)景也會(huì)出現(xiàn),比如在工廠走廊(陽光和陰影共存的場(chǎng)景)運(yùn)行的自主移動(dòng)機(jī)器人(AMR);在落地窗旁工作的清潔機(jī)器人面臨著過曝和背光物體過暗的問題。在這些場(chǎng)景中,長時(shí)間曝光可能會(huì)導(dǎo)致亮區(qū)過度曝光,而短時(shí)間曝光可能無法捕捉暗區(qū)的細(xì)節(jié)。Orbbec Gemini 330 Series 立體相機(jī)也面臨著類似的挑戰(zhàn),因?yàn)樯疃葓D像的本質(zhì)是根據(jù)左右IR計(jì)算得到。

      image.png 

      1  半戶外場(chǎng)景

      高動(dòng)態(tài)范圍的成像是在計(jì)算機(jī)圖形學(xué)與電影攝影術(shù)中,是用來實(shí)現(xiàn)比普通數(shù)位圖像技術(shù)更大曝光動(dòng)態(tài)范圍(即更大的明暗差別)的一組技術(shù),利用多幀合并的方式來克服普通傳感器的極限。對(duì)于3D深度攝像頭,高動(dòng)態(tài)范圍意味著更高的深度填充率和更高的準(zhǔn)確性,這將顯著增強(qiáng)機(jī)器人的避障能力。本文介紹了與HDR功能相關(guān)的基本概念,并介紹了HDR在Orbbec Gemini  330 Series 相機(jī)的應(yīng)用。

      2. 傳感器設(shè)置

      2.1 曝光和增益

      曝光和增益是攝影和成像技術(shù)中的兩個(gè)主要參數(shù),直接影響圖像的質(zhì)量和清晰度。

      ORBBEC Gemini 330 Series 分別控制可見光RGB相機(jī)、紅外相機(jī)的曝光。深度或紅外攝像頭,曝光以微秒(μs)為單位進(jìn)行測(cè)量。曝光時(shí)間范圍從1μs到約166 ms。較長的曝光時(shí)間可以增加低光環(huán)境中圖像亮度和信噪比(SNR),從而提高圖像清晰度,反之亦然。室內(nèi)場(chǎng)景通常需要較長的曝光時(shí)間,而戶外場(chǎng)景則需要較短的曝光時(shí)間。  

      image.png 

      2 圖像亮度隨曝光時(shí)間的變化趨勢(shì)

      增益不會(huì)影響傳感器的進(jìn)光量,而是放大現(xiàn)有的電信號(hào)。增加增益可以增強(qiáng)低光條件下的圖像亮度,但也會(huì)增加噪聲并降低圖像質(zhì)量。此外,將較短的曝光時(shí)間與較高的增益設(shè)置相結(jié)合,可以有效減小由快速運(yùn)動(dòng)引起的運(yùn)動(dòng)模糊等效應(yīng)。

      image.png 

      3 圖像亮度隨時(shí)間的變化

      2.2 過曝和欠曝

      當(dāng)電信號(hào)轉(zhuǎn)換為數(shù)字圖像過程中,它們根據(jù)傳感器的有效動(dòng)態(tài)范圍和可用的比特深度進(jìn)行量化,對(duì)于一個(gè)k位成像傳感器,通常預(yù)期的灰度值范圍從0到  2k-1, 小于最小閾值或大于最大閾值將被截?cái)唷_@可能導(dǎo)致出現(xiàn)過曝和欠曝的區(qū)域。曝光過度的區(qū)域通常在IR圖像中呈現(xiàn)白色,而曝光不足IR圖像會(huì)呈現(xiàn)黑色。在3D相機(jī)中該問題也會(huì)存在,過曝和欠曝會(huì)導(dǎo)致深度圖出現(xiàn)缺失或噪聲,如下圖所示。

      image.png 

      image.png 

      4 過曝(上)和欠曝(下)兩種不良情況:左測(cè)為紅外圖像,右側(cè)為深度圖像

      為了解決欠曝或者過曝的問題,常見的方法包括:手動(dòng)調(diào)整相機(jī)曝光、自動(dòng)曝光策略、HDR技術(shù) 或 圖像增強(qiáng)等。本文不討論圖像增強(qiáng)技術(shù)。

      2.3 手動(dòng)曝光

      Orbbec Gemini 330 Series 支持手動(dòng)曝光調(diào)整,即允許用戶調(diào)整曝光時(shí)間和增益來保證圖像亮度。該方法不會(huì)根據(jù)環(huán)境光照的變化自動(dòng)調(diào)整。一般應(yīng)用在需要執(zhí)行精確的曝光控制的場(chǎng)景,例如,為了拍攝快速移動(dòng)的物體,可以設(shè)置較小的固定曝光時(shí)間以防止運(yùn)動(dòng)模糊。

      image.png 

      5 用短曝光(左圖)和長曝光(右圖)拍攝相同的場(chǎng)景

      用戶可以在Orbbec Viewer中設(shè)置左右IR相機(jī)或深度的曝光時(shí)間和增益。設(shè)置前先將關(guān)閉自動(dòng)曝光。其中左右IR和Depth相機(jī)的曝光和增益是同步調(diào)整,三者保持一致。

      image.png 

      6 在Orbbec Viewer中手動(dòng)曝光參數(shù)設(shè)置

      代碼參考如下:

      // Create a pipeline with default device
      ob::Pipeline pipe;

      // Get the device from the pipeline
      auto device = pipe.getDevice();

      // set ir exposure value to 3000
      device->setIntProperty(OB_PROP_IR_EXPOSURE_INT, 3000);

      // set ir gain value to 16
      device->setIntProperty(OB_PROP_IR_GAIN_INT, 16);

      2.4 自動(dòng)曝光

      自動(dòng)曝光是相機(jī)根據(jù)光線的強(qiáng)弱自動(dòng)調(diào)整曝光量,防止曝光過度或者不足,保證圖像信噪比滿足用戶需求。例如,機(jī)器人需要在室內(nèi)和室外工作,通常將攝像頭設(shè)置為自動(dòng)曝光模式。

      image.png 

      image.png 

      7 自動(dòng)曝光效果,室內(nèi)(上圖)和室外(下圖),左邊是IR圖,右邊是深度圖

      默認(rèn)情況下,Orbbec Gemini 330 Series 相機(jī)配置為自動(dòng)曝光模式。在這種模式中,相機(jī)會(huì)自動(dòng)調(diào)整曝光和增益值,直到平均圖像強(qiáng)度達(dá)到某個(gè)預(yù)設(shè)值。在Orbbec Viewer中也可以開啟或者關(guān)閉自動(dòng)曝光。

      用戶可以根據(jù)場(chǎng)景調(diào)整自動(dòng)曝光參數(shù),即目標(biāo)亮度預(yù)設(shè)值(Mean Intensity Set Point),設(shè)置方式如下圖所示:

      image.png 

      8 在Orbbec Viewer中自動(dòng)曝光參數(shù)配置

      自動(dòng)曝光配置代碼如下:

      // Create a pipeline with default device
      ob::Pipeline pipe;

      // Get the device from the pipeline
      auto device = pipe.getDevice();

      // Enable IR sensor auto exposue
      device->setBoolProperty(OB_PROP_IR_AUTO_EXPOSURE_BOOL, true);

      // set the IR sensor mean intensity set point value to 60
      device->setIntProperty(OB_PROP_IR_BRIGHTNESS_INT, 60);

      自動(dòng)曝光可以滿足用戶的絕大部分場(chǎng)景的使用,但是對(duì)于極端的高低反場(chǎng)景,可以考慮第3節(jié)的HDR功能。

      2.5 曝光限制

      相機(jī)的最大曝光時(shí)間受到幀率的限制,如表1所示。在自動(dòng)曝光模式下,最大曝光時(shí)間小于該幀率對(duì)應(yīng)的最大曝光(表1所示最大曝光時(shí)間)。在手動(dòng)曝光模式下,允許曝光曝光時(shí)間大于該幀率對(duì)應(yīng)的最大曝光,但會(huì)導(dǎo)致幀率降低。例如,如果相機(jī)的幀率設(shè)置為30fps,并且手動(dòng)曝光時(shí)間設(shè)置為30ms,但某些室內(nèi)場(chǎng)景仍然顯得太暗,曝光時(shí)間可以延長到60ms, 但此時(shí)輸出幀率降低到15fps。

      1 每個(gè)幀率對(duì)應(yīng)的最大曝光時(shí)間

      image.png

      3. 高動(dòng)態(tài)范圍

      HDR 高動(dòng)態(tài)范圍成像的目的是可以顯示更大的范圍亮度。為了克服傳統(tǒng)動(dòng)態(tài)范圍的限制,可以采用采集多幀不同曝光時(shí)間的圖像,并將它們合并成一張HDR圖像。 因?yàn)镺rbbec Gemini 330 Series 硬件(MX6800)的限制,無法在硬件ASIC上實(shí)現(xiàn)多幀融合。我們提出了一種運(yùn)行在主機(jī)CPU上的軟件解決方案來實(shí)現(xiàn)此功能。利用兩個(gè)連續(xù)幀的數(shù)據(jù)直接合成一幀深度圖像,從而增強(qiáng)了16位深度圖像的動(dòng)態(tài)范圍。此功能需要固件版本v1.2.01+和SDKv1.9.0+。

      3.1 方法

      如上所述,HDR可調(diào)整固定的曝光和增益值,用戶根據(jù)實(shí)際應(yīng)用場(chǎng)景來進(jìn)行設(shè)置。深度的HDR即為合并不同的曝光和增益設(shè)置下的深度圖。對(duì)于給定的n幀的深度圖,定義 d_i (i=0, \ldots, n-1)為任意像素(u, v)的第i幀深度值,則該點(diǎn)(u, v)融合后的深度值可表達(dá)為:

      d=\sum_{i=0}^{n-1}\mathscr{W}(d_i)\cdot d_i,                                                                    (1)

      其中,\mathscr{W}是權(quán)重函數(shù)。在Orbbec的HDR功能n=2。\mathscr{W}函數(shù)的取值為0或1,因此上述函數(shù)也可以表示為:

      d=\begin{cases} d_0 &\text{if } d_0\neq0 \\ d_1 & \text{elif } d_1\neq0 \\ 0&\text{otherwise} \end{cases}                                                                (2)

      注: 如前所述,該融合算法在OrbbecSDK中實(shí)現(xiàn)。

      3.2 工具使用

      但用戶使用Orbbec Viewer工具中高動(dòng)態(tài)范圍(HDR)控制功能時(shí),需要開啟深度或紅外數(shù)據(jù)流。因?yàn)镠DR涉及連續(xù)兩幀數(shù)據(jù)的融合,為了避免圖像拖影,可以將幀率提高到30fps及以上。 每幀HDR輸出結(jié)果為合并相鄰兩幀后的結(jié)果,即“高曝光+低曝光”融合和“低曝光+高曝光”融合方式。這種方式會(huì)導(dǎo)致幀延遲,但幀率可以保持不變。用戶可以按照如下設(shè)置方式手動(dòng)調(diào)整高曝光和低曝光幀的曝光和增益設(shè)置,以優(yōu)化HDR性能。 為了更準(zhǔn)確設(shè)置參數(shù),可以先關(guān)閉HDR-Merge功能,先檢查高/低曝光下的所感興趣的物體是否有較為完整的深度(高反物體和低反物體)。

      image.pngimage.png 

      9 在Orbbec Viewer中配置HDR的硬件

      開啟HDR后,數(shù)據(jù)流會(huì)在兩個(gè)預(yù)定的曝光設(shè)置之間交替。可以查看工具面板的metadata信息列表。

      image.png 

      10 檢查HDR流的幀元數(shù)據(jù)

      其中,metadata 相關(guān)內(nèi)容說明如下:

      ● Hdr Sequence NameHDR序列的名稱

      ● Hdr Sequence SizeHDR序列的長度

      ● Hdr Sequence Index:當(dāng)前幀在HDR序列中的編號(hào)(從零開始)

      ● Exposure:用于當(dāng)前幀的曝光

      ● Gain:用于當(dāng)前幀的增益

      HDR融合后的深度需要啟用HDRMerge后處理開關(guān),如下圖所示:

      image.png 

      11   開啟深度HDRMerge

      開啟HDRMerge后,深度不會(huì)閃爍,但是IR圖仍然會(huì)閃爍。OrbbecSDK不支持對(duì)IR圖像的融合,IR圖像的融合用戶可以根據(jù)自身的需要按照簡單的圖像處理即可完成。除了HDRMerge之外,OrbbecSDK還可以通過數(shù)據(jù)幀ID,將閃爍流拆分為兩個(gè)獨(dú)立數(shù)據(jù)流(需要關(guān)閉HDRMerge)。通過ID來過濾數(shù)據(jù)流,此時(shí)深度也不再閃爍,輸出的深度為高曝光幀或者低曝光幀。

      image.png 

      12 通過序列ID對(duì)流進(jìn)行過濾

      3.3 代碼參考

      HDR使能和HDRMerge功能生效,相關(guān)配置可以參考如下示例代碼:

      #include "window.hpp"

      #include "libobsensor/hpp/Pipeline.hpp"
      #include "libobsensor/hpp/Error.hpp"

      int main(int argc, char **argv) try {
          // Create a pipeline with default device
          ob::Pipeline pipe;

          // Get the device from the pipeline
          auto device = pipe.getDevice();

          // Check if the device supports HDR merge
          if(!device->isPropertySupported(OB_STRUCT_DEPTH_HDR_CONFIG, OB_PERMISSION_READ_WRITE)) {
              std::cerr << "Current default device does not support HDR merge" << std::endl;
              return -1;
          }

          // Configure which streams to enable or disable for the Pipeline by creating a Config
          std::shared_ptr<ob::Config> config = std::make_shared<ob::Config>();

          // Get all stream profiles of the depth camera, including stream resolution, frame rate, and frame format
          auto depthProfiles = pipe.getStreamProfileList(OB_SENSOR_DEPTH);
          auto depthProfile  = depthProfiles->getProfile(OB_PROFILE_DEFAULT);
          config->enableStream(depthProfile);

          // Create HdrMerge post processor to merge depth frames betweens different hdr sequence ids.
          // The HdrMerge also supports processing of infrared frames.
          ob::HdrMerge hdrMerge;

          // configure and enable Hdr stream
          OBHdrConfig obHdrConfig;
          obHdrConfig.enable     = true;  // enable HDR merge
          obHdrConfig.exposure_1 = 7500;
          obHdrConfig.gain_1     = 24;
          obHdrConfig.exposure_2 = 100;
          obHdrConfig.gain_2     = 16;
          device->setStructuredData(OB_STRUCT_DEPTH_HDR_CONFIG, &obHdrConfig, sizeof(OBHdrConfig));

          // Start the pipeline with config
          pipe.start(config);

          // Create a window for rendering and set the resolution of the window
          bool   resizeWindows = true;
          Window app("HDR-Merge", 1280, 720);
          bool   mergeRequired = true;

          std::cout << "Press 'M' to toggle HDR merge." << std::endl;
          while(app) {
              auto key = app.waitKey(10);
              if(key == 'M' || key == 'm') {
                  mergeRequired = !mergeRequired;
                  if(mergeRequired) {
                      std::cout << "HDR merge enabled." << std::endl;
                  }
                  else {
                      std::cout << "HDR merge disabled." << std::endl;
                  }
              }

              auto frameSet = pipe.waitForFrames(100);
              if(frameSet == nullptr) {
                  continue;
              }

              auto depthFrame = frameSet->depthFrame();
              if(depthFrame == nullptr) {
                  continue;
              }

              if(mergeRequired) {
                  // Using HdrMerge post processor to merge depth frames
                  auto mergedDepthFrame = hdrMerge.process(depthFrame);
                  if(mergedDepthFrame == nullptr) {
                      continue;
                  }

                  // add merged depth frame to render queue
                  app.addToRender(mergedDepthFrame);
              }
              else {
                  // add original depth frame to render queue
                  app.addToRender(depthFrame);
              }
          }

          // Stop the Pipeline, no frame data will be generated
          pipe.stop();

          // close hdr merge
          obHdrConfig.enable = false;
          device->setStructuredData(OB_STRUCT_DEPTH_HDR_CONFIG, &obHdrConfig, sizeof(OBHdrConfig));

          return 0;
      }
      catch(ob::Error &e) {
          std::cerr << "function:" << e.getName() << "\nargs:" << e.getArgs() << "\nmessage:" << e.getMessage() << "\ntype:" << e.getExceptionType() << std::endl;
          exit(EXIT_FAILURE);
      }

      3.4 結(jié)果

      Orbbec Gemini 330 Series 相機(jī)的HDR功能提高了深度填充率,降低了深度空洞率。我們可以在如下場(chǎng)景下對(duì)比AE和HDR效果,場(chǎng)景包含一個(gè)矩形高反面板和一個(gè)低反射支架, 當(dāng)采用自動(dòng)曝光時(shí), 從深度圖可知,矩形白色高反貼已過曝,深度出現(xiàn)了明顯了缺失。

      image.png 

      13  自動(dòng)曝光模式下的深度效果(高低反場(chǎng)景,高反貼深度缺失)

            如果使用HDR功能,分別設(shè)置曝光時(shí)間為7000ms和100ms, 得到如下深度效果,以及融合后的深度效果,從深度效果來看,整幅圖像中的物體深度完整,不管是低反黑色支架還是白色高反貼。

      image.png 

      14. HDR效果示意:高曝光幀(第一行),低曝光幀(第二行),融合后的HDR深度(第三行)

      HDR另一個(gè)關(guān)注點(diǎn)是其對(duì)深度準(zhǔn)確性的影響。如下所示,在距離Orbbec Gemini 335相機(jī)約1043mm的墻上粘貼幾塊高反射面板,如左上方的RGB圖像所示。從右上方圖上可知,高反區(qū)域的散斑點(diǎn)已過曝,因此這些區(qū)域深度無法準(zhǔn)確估算。左下方采用自動(dòng)曝光采集的深度圖,右下方是開啟HDR及HDRMerge后的深度。

       

      image.png 

      15. 將高度反射的面板緊貼在平坦的墻壁上以測(cè)試準(zhǔn)確性

      比較高反貼在自動(dòng)曝光下的深度和HDR融合后的深度,選擇深度圖高反貼區(qū)域,采用Imagej 工具顯示某一行的深度波動(dòng)情況,黑色表示開啟自動(dòng)曝光和紅色線表示HDR融合后的深度,從下面數(shù)據(jù)可以看到HDR融合后的深度波動(dòng)會(huì)略小,不過在有些情況下,兩者精度波動(dòng)趨勢(shì)也不明顯。

      image.png 

      16. 在與圖15相同的場(chǎng)景中捕獲的深度圖像的部分剖面

      4. 總結(jié)

      Orbbec Gemini 330 Series 相機(jī)能提供高質(zhì)量的深度成像,其中自動(dòng)曝光可以滿足大多數(shù)情況下的用戶需求,包括室內(nèi)和室外。對(duì)于自主移動(dòng)機(jī)器人,自動(dòng)曝光模式能夠有效處理不斷變化的光照條件。自動(dòng)曝光算法在固件中實(shí)現(xiàn)的,因此不會(huì)消耗上位機(jī)資源,用戶操作簡單。而手動(dòng)曝光通常用于需要精確曝光控制的場(chǎng)景。

      深度相機(jī)的HDR主要是為了解決自動(dòng)曝光和手動(dòng)曝光都無法解決的一些挑戰(zhàn)。它顯著提高了在一些極線光照環(huán)境下的深度填充率,可能提升深度準(zhǔn)確性。它能幫助減少了機(jī)器人視覺系統(tǒng)中兩種常見且嚴(yán)重的錯(cuò)誤:“漏檢”和“誤檢”。

             深度HDR也有自身的局限性,因?yàn)樾枰獌蓭瑪?shù)據(jù)幀的融合,需要消耗上位機(jī)額外的算力,且還會(huì)導(dǎo)致幀延遲;確定適當(dāng)?shù)母咂毓鈺r(shí)間和低曝光時(shí)間需要一定的經(jīng)驗(yàn);對(duì)于高速移動(dòng)物體會(huì)因?yàn)槿诤隙a(chǎn)生運(yùn)動(dòng)偽影。

      在相機(jī)快速移動(dòng)的場(chǎng)景中,可以調(diào)整自動(dòng)曝光的平均強(qiáng)度來提高深度質(zhì)量。如果需要使用HDR功能,可以考慮更高幀率,可以改善運(yùn)動(dòng)偽影。對(duì)于需要精確深度數(shù)據(jù)的應(yīng)用場(chǎng)景,可以使用HDR開啟,但不使用多幀融合(HDRMerge 關(guān)閉),即采用高曝光和低曝光幀以滿足特定算法需求。


      • <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
        <rt id="2awkm"><noscript id="2awkm"></noscript></rt>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><acronym id="2awkm"></acronym></menu>
        
        
        <rt id="2awkm"></rt><dfn id="2awkm"><code id="2awkm"></code></dfn>
      • <dd id="2awkm"><s id="2awkm"></s></dd>
        <tbody id="2awkm"></tbody>
      • <dfn id="2awkm"></dfn>
        <menu id="2awkm"><noscript id="2awkm"></noscript></menu>
        久久网成人 | 日韩亚洲在线视频 | 无码成人精国在线视频 | 专干老热女A99 | 国产精品免费久久久久 |