天天看點

基于相機空間位置的圖像拼接

      圖像拼接操作是指将具有重疊區域的兩幅 RGB 圖像和兩幅深度圖像分别拼接成一幅 RGB 圖像和一幅深度圖像。所謂基于相機空間位置的圖像拼接方法,就是将相機按照指定的方式安裝,然後根據圖像中每個像素的空間坐标進行拼接。該方法是應用在深度圖像中,結合 RGB 圖像與深度圖像的對齊操作,也可以用于 RGB 圖像的拼接。 

      基于相機空間位置的圖像拼接方法的重點在于相機的安裝方式,具體安裝要求如下:第一,所安裝的相機在垂直方向需要與所拍攝區域保持平行。第二,所安裝的相機在水準方向需要前後、左右保持平行。下圖展示的是安裝兩個 RGB-D 相機的示意圖,垂直方向安裝示意圖如下圖a 所示,水準方向安裝示意圖如下圖b 所示。在安裝好相機之後,需要确定相機的安裝高度和相機之間的間距。 

基于相機空間位置的圖像拼接

      本文在設計單件分離系統時使用了兩個 RGB-D 相機,對于兩個 RGB-D 相機的深度圖像拼接的具體步驟如下: 

1.  處理兩幅深度圖像中的背景像素點。依次周遊兩幅深度圖像中的每個像素點,像素值為 65535 的像素點即為背景像素點,需要将其像素值設定為相機安裝的高度。 

2.  計算深度圖像中的像素點對應到相機坐标系下的空間坐标。根據前面中的介紹,像素坐标系與相機坐标系之間的轉換公式如下:

基于相機空間位置的圖像拼接

3.  根據相機坐标系下的空間坐标對兩幅深度圖像進行拼接。周遊深度圖像中的每個像素點,根據其相機坐标系下的空間坐标,對兩幅深度圖像以每行像素點“行滿”的方式進行拼接。具體步驟如下: 

a)  使用 OpenCV 建立存儲拼接結果的矩陣,寬度與單個深度圖像的寬度一樣,高度是單個深度圖像的高度的兩倍。用 H 表示存儲拼接結果矩陣的高度。 

b)  将兩個 RGB-D 相機拍攝範圍重疊的部分平分為兩個部分,左邊部分記作 leftPart,右邊部分記作 rightPart。 

c)  先按行周遊圖中左邊 RGB-D 相機采取的深度圖像。 

d)  根據其每個像素點的空間坐标,若該像素點的空間位置在 rightPart中,則把該像素點丢棄;若該像素點的空間位置不在 rightPart 中,則把該像素點及深度值填入存儲拼接結果的矩陣中。每行處理完之後,若該行中的每個點都填入了存儲拼接結果的矩陣中,則拼接結果的矩陣的行高 H 加 1。 

e)  接着按行周遊圖右邊 RGB-D 相機采取的深度圖像。

f)  根據其每個像素點的空間坐标,若該像素點的空間位置在 leftPart中,則把該像素點丢棄;若該像素點的空間位置不在 leftPart 中,則把該像素點及深度值填入存儲拼接結果的矩陣中。每行處理完之後,若該行中的每個點都填入了存儲拼接結果的矩陣中,則拼接結果的矩陣的行高 H 加 1。 

g)  根據存儲拼接結果的矩陣的高度 H 對矩陣進行裁剪。 

下圖是基于相機空間位置的深度圖像拼接結果,為了友善展示對齊結果,根據相機的高度,将深度圖像轉換為灰階圖像。左邊的兩幅圖像分别為上下兩個 RGB-D 相機所擷取的圖像,右邊的圖像為拼接之後的結果。基于相機空間位置的圖像拼接方法用于深度圖像拼接時隻需要 5ms 左右,其拼接速度和效果都是可以應用在單件分離系統中的。

基于相機空間位置的圖像拼接

      在對兩幅深度圖像進行拼接的過程中也可以執行 RGB 圖像與深度圖像對齊操作,這樣也可以對兩幅 RGB 圖像進行拼接。下圖是基于相機空間位置的RGB 圖像拼接結果,雖然拼接效果不夠完美,但是其拼接速度在 30ms 以内,該方法已經應用在單件分離系統中。 

基于相機空間位置的圖像拼接

本文僅做學術分享,如有侵權,請聯系删文。​