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