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