基于fpga的實時視差計算系統的制作方法
【技術領域】
[0001] 本發明屬于圖像處理系統,具體涉及一種基于FPGA的實時視差計算系統。
【背景技術】
[0002] 視差是雙眼觀察同一個目標所產生的位置差異,視差與深度成反比關系,視差計 算在機器人導航、被動測距、航天測控、虛擬現實等領域有廣泛的應用前景。
[0003] 視差計算需要較大的計算量,并且,隨著時代的發展,數字高清化成為發展趨勢, 高幀率,高分辨率的視頻流對視差計算的處理速度帶來了更大的挑戰,在實時視差計算中, 處理速度是檢測系統性能的一個重要指標。傳統的視差計算系統在實時性要求比較高的環 境下并不讓人滿意,主要有以下缺點:
[0004] (1)傳統的視差計算方法在處理速度上有一定的缺陷,視差計算的計算量大,一般 是基于窗口的,因此無法滿足實時性的需求。
[0005] (2)傳統的視差計算方法通常是在通用性處理器上運行,是基于指令的,指令的執 行是串行的,需要對每一條指令進行取指、譯碼、執行等操作,而且由于算術邏輯單元的使 用,對于視差計算來說,會用到大量的計算指令,對于某些計算指令(尤其是乘法),會耗費 大量的機器周期,更加加重了處理器在計算上面的時間消耗。
[0006] 傳統的通用型處理器在實時視差計算方面越來越顯示出運行速度不足,無法滿足 實際應用的需要。
【發明內容】
[0007] 本發明提供一種基于FPGA的實時視差計算系統,其目的在于克服現有技術的缺 陷,獲得更快的視差計算處理速度,從而提高視差計算的實時性。
[0008] 本發明所提供的一種基于FPGA的實時視差計算系統,包括左圖像獲取模塊、右圖 像獲取模塊、變換模塊、海明距離計算模塊、視差計算模塊、一致性檢測模塊和表決模塊,其 特征在于:
[0009] 所述左圖像獲取模塊和所述右圖像獲取模塊分別與所述變換模塊相連,所述變換 模塊、海明距離計算模塊、視差計算模塊、一致性檢測模塊和表決模塊依次串聯;
[0010] (1)所述左圖像獲取模塊和所述右圖像獲取模塊分別從外部存儲器中讀取左圖像 塊數據和右圖像塊數據,再將左圖像塊數據和右圖像塊數據送至所述變換模塊;
[0011] (2)所述變換模塊包括緩存子模塊和比較子模塊;所述緩存子模塊包括左、右雙端 口存儲器組,左、右窗口寄存器組,左、右寫地址寄存器,左、右讀地址寄存器,將所述左圖像 塊數據和右圖像塊數據按圖像窗口分別通過左、右雙端口存儲器組緩存到左、右窗口寄存 器組中;
[0012] 所述比較子模塊包括左、右比較器組,左、右位寄存器組,左、右位向量寄存器組; 左、右比較器組分別對左、右窗口寄存器組中的數據進行比較,比較結果分別通過左、右位 寄存器組緩存到左、右位向量寄存器組,得到左、右位向量,再送至所述海明距離計算模塊;
[0013] (3)所述海明距離計算模塊由異或門組和加法樹組構成;所述海明距離計算模塊 依次從所述比較子模塊的右位向量寄存器組中取一個右位向量,通過所述異或門組和所述 加法樹組,分別計算所述右位向量與左位向量寄存器組中的每個左位向量之間的海明距 離,得到海明距離組,送至所述視差計算模塊;
[0014] (4)所述視差計算模塊包含右視差計算子模塊和左視差計算子模塊;所述右視差 計算子模塊包括海明距離寄存器組和比較器樹;所述比較器樹對海明距離寄存器組的海明 距離進行比較,將最小海明距離對應的寄存器編號作為初始右視差傳送到一致性檢測模 塊;
[0015] 所述左視差計算子模塊包括雙端口存儲器組、比較器樹、讀地址寄存器組和寫地 址寄存器;所述雙端口存儲器組根據寫地址寄存器的內容,將右視差計算子模塊中的海明 距離寄存器組的內容緩存到雙端口存儲器組,并且根據讀地址寄存器的內容,將所述雙端 口存儲器組讀端的內容讀出到所述比較樹組,比較器樹組對海明距離組的海明距離進行比 較,將最小海明距離對應的雙端口存儲器編號作為初始左視差傳送到一致性檢測模塊;
[0016] (5)所述一致性檢測模塊包括左視差寄存器組、右視差寄存器組、多路選擇器(U)、 減法器和一個比較器;
[0017] 所述左視差寄存器組第一個左視差寄存器存儲的初始左視差同時輸出到減法器 和多路選擇器,多路選擇器在右視差寄存器組中找到對應的初始右視差值輸出到減法器, 所述減法器對兩者進行減法運算,所得到的差值絕對值在比較器中與視差誤差T進行比較, 根據比較結果分別置標記為有效或無效,將所述標記連同初始左視差輸出,作為帶標記視 差傳送到所述表決模塊;
[0018] (6)所述表決模塊包括雙端口存儲器組、窗口寄存器組、視差寄存器組、比較器樹、 寫地址寄存器和讀地址寄存器;
[0019] 所述雙端口存儲器組根據寫地址寄存器內容將所述帶標記視差存儲到各雙端口 存儲器中;所述窗口寄存器組中的各行寄存器組根據讀地址寄存器的內容讀取雙端口存儲 器中的數據;
[0020] 當所述窗口寄存器組中的中心窗口寄存器保存的帶標記視差的標記有效時,將該 標記的視差作為最終視差輸出,否則除中心窗口寄存器外,在窗口寄存器組中依次判斷其 余窗口寄存器保存的帶標記視差的標記是否有效,是則在視差寄存器組中找到編號等于相 應帶標記視差的視差值的視差寄存器,將該視差寄存器中的數據加一;否則對下一窗口寄 存器繼續判斷,直至全部判斷完畢;所述比較器樹比較各視差寄存器的內容,將對應最大數 據的視差寄存器編號作為最終視差輸出。
[0021 ]所述變換模塊包括緩存子模塊和比較子模塊;
[0022] A.所述緩存子模塊包括左、右雙端口存儲器組,左、右窗口寄存器組,左、右寫地址 寄存器,左、右讀地址寄存器;
[0023] 所述左、右雙端口存儲器組結構相同,各自均包括N-I個雙端口存儲器(dp(l)~dp (N-1));所述左、右窗口寄存器組結構相同,各自均包括N個行寄存器組(R(m,s)),各行寄存 器組結構相同,各自均由N個寄存器串聯構成,圖像窗口寄存器行序號變量m= 1~N,圖像窗 口寄存器列序號變量s = 1~N,圖像窗口尺寸N 2 3,為奇數;
[0024] 左雙端口存儲器組和左窗口寄存器組中,各雙端口存儲器的寫地址端(W)與左寫 地址寄存器(WAR)相連,讀地址端(r)與左讀地址寄存器(RAR)相連;數據輸入端(P)與第一 雙端口存儲器的寫端(in)及第一行寄存器組(R(l,s))的輸入端相連,第一雙端口存儲器 (dp(l))的讀端(〇)與第二雙端口存儲器(dp(2))的寫端(in)及第二行寄存器組(R(2,s))的 輸入端相連,如此類推,第N-2雙端口存儲器(dp (N-2))的讀端(〇)與第N-I雙端口存儲器(dp (N-I))的寫端(in)及第N-I行寄存器組(R(N-l,s))的輸入端相連,第N-I雙端口存儲器(dp (N-1))的讀端(〇)與第N行寄存器組(R (N,s))的輸入端相連;左寫地址寄存器(WAR)和左讀 地址寄存器(RAR)分別保存左圖像塊數據起始像素的位置;
[0025] 右雙端口存儲器組和右窗口寄存器組中,各雙端口存儲器和各行寄存器組的連接 與上述左雙端口存儲器組和左窗口寄存器組相同;區別僅在于以右寫地址寄存器、右讀地 址寄存器分別代替左寫地址寄存器、左讀地址寄存器;
[0026]所述緩存子模塊對所述左圖像塊數據、右圖像塊數據的操作同時進行;
[0027] 所述緩存子模塊對所述左圖像塊數據進行如下操作:
[0028] Al.新左圖像塊數據到來時,左雙端口存儲器組中的各雙端口存儲器根據左寫地 址寄存器的內容將新左圖像塊數據按行順序存儲于各雙端口存儲器中;
[0029] A2.左窗口寄存器組中的各行寄存器組中的第一寄存器的數據傳送給第二寄存 器,如此類推,第N-I寄存器的數據傳送給第N寄存器;
[0030] A3.左雙端口存儲器組中的各雙端口存儲器根據左讀地址寄存器的內容將自身的 數據從當前雙端口存儲器的讀端讀出到同一行窗口寄存器組的輸入端及下一個雙端口存 儲器的寫端;
[0031 ] A4.左寫地址寄存器中的數據加一,左讀地址寄存器中的數據加一;
[0032] 所述緩存子模塊對所述右圖像塊數據進行上述同樣的操作,區別僅在于以右雙端 口存儲器組、右窗口寄存器組、右寫地址寄存器、右讀地址寄存器分別代替左雙端口存儲器 組、左窗口寄存器組、左寫地址寄存器、左讀地址寄存器;右寫地址寄存器和右讀地址寄存 器分別保存右圖像塊數據起始像素的位置;
[0033] B.所述比較子模塊包括左、右比較器組,左、右位寄存器組,左、右位向量寄存器 組;
[0034] 所述左、右比較器組結構相同,均包括N2-I個比較器,N2-I個比較器分為N行,每行 包括N個比較器,僅第(N+l)/2行中第(N+l)/2個比較器空缺;
[0035]所述左、右位寄存器組結構相同,各自均包括N2-I個位寄存器(r(k,t)),N2_l個位 寄存器分為N行,每行包括N個位寄存器,僅第(N+1 )/2行中第(N+1) /2個位寄存器空缺,位寄 存器行序號變量k=l~N,位寄存器列序號變量t = l~N;
[0036] 所述左、右位向量寄存器組結構相同,各自均包括依次編號為1~d的d個位向量寄 存器R(I)~R(d),l<視差范圍cK 127,每個位向量寄存器具有N2-I位,保存N2-I位組成的一 個位向量;
[0037] 左比較器組中的各行每個比較器的第一輸入端與緩存子模塊中的左窗口寄存器 組中的第(N+l)/2行寄存器組的第(N+l)/2個寄存器輸出端相連;各行每個比較器的第二輸 入端與左窗口寄存器組中相應行及相應行內序號的窗口寄存器的輸出端相連;各行每個比 較器的輸出端與左位寄存器組中相應行及相應行內序號的位寄存器的輸入端相連;左位寄 存器組中N 2-I個位寄存器的內容從上到下按行、行內按照從左到右的順序,組成一個位向 量,依次存入左位向量寄存器組的一個位向量寄存器R(i)中,位向量寄存器序號變量i = l ~d;
[0038] 右比較器組的連接方式與上述左比較器組的連接方式相同,區別僅在于以右比較 器組、右位寄存器組和右位向量寄存器組分別代替左比較器組、左位寄存器組和左位向量 寄存器組;
[0039] 所述比較子模塊的左比較器組、右比較器組分別對其相應的輸入數據同時進行操 作;
[0040] 所述左比較器組對其輸入數據進行如下操作:
[0041] 左比較器組的每個比較器對其兩個輸入端的數據進行比較,如果第二輸入端的輸 入小于第一輸入端的數據,則輸出1,否則輸出〇,左比較器組中所有比較器的輸出結果保存 在左位寄存器組中,按順序組合后作為左位向量依次保存在左位向量寄存器組的一個位向 量寄存器中;
[0042] 右比較器