專利名稱:生成深度圖的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)視覺技術(shù)領(lǐng)域,特別涉及一種生成深度圖的方法和裝置。
背景技術(shù):
三維圖像和顯示是未來信息系統(tǒng)的一種重要表現(xiàn)形式,三維圖像和顯示層次分明色彩鮮 艷,具有很強(qiáng)的視覺沖擊力,讓觀看的人駐景時(shí)間更長,留下深刻的印象;另外三維圖像和 顯示給人以真實(shí)、栩栩如生,人物呼之欲出,有身臨其境的感覺,有很高的藝術(shù)欣賞價(jià)值。 正因?yàn)槿S圖像和視頻具有這些平面圖像和視頻所不具備的特點(diǎn),所以在諸如電腦顯示、電 視、視頻、機(jī)器人、測量、斟察、醫(yī)療、廣告?zhèn)髅?、電子游戲等領(lǐng)域具有廣闊的應(yīng)用前景。
人眼看世界之所以有立體感,是因?yàn)樽笱酆陀已劭词澜绲囊暯怯猩僭S不同而存在視差 (disparity)。視差是指左視圖和右視圖對應(yīng)于同一個(gè)世界點(diǎn)的兩個(gè)象素點(diǎn)的水平位移。計(jì)算 機(jī)視覺領(lǐng)域的定理指出,某點(diǎn)的視差和它所對應(yīng)的世界點(diǎn)的深度(depth,即距離感)成反比; 也就是說,離觀看點(diǎn)越遠(yuǎn)的點(diǎn)的視差值越小,無窮遠(yuǎn)點(diǎn)的視差為0。深度圖(depth m叩)是 由圖像每個(gè)像素點(diǎn)對應(yīng)的深度值所組成的灰度圖,即一張圖像所有點(diǎn)的深度值組成了深度圖。 其中距離越遠(yuǎn)的部分,深度值越小,深度圖中表現(xiàn)為偏向黑色;距離越近的部分,深度值越 大,深度圖中表現(xiàn)為偏向白色。
現(xiàn)有的基于雙目立體視覺的深度圖生成技術(shù)主要有以下兩種
首先是高質(zhì)量深度圖的構(gòu)建,在這方面基于MRF (Markov Random Field,馬爾科夫隨機(jī) 場)的方法得到了廣泛的關(guān)注。在實(shí)際算法中,由于無法求得其精確解,因而提出了基于BP (Belief Propagation,置信度傳播)和圖分割(Graph Cuts)的近似求解算法。BP算法是一個(gè) 通過在相鄰節(jié)點(diǎn)之間傳遞、更新消息,迭代優(yōu)化的算法,由于需要迭代多次求解,速度很慢, 因此應(yīng)用BP技術(shù)的加速算法近年來也得到了越來越多的重視。圖分割方法相對于BP算法較 快,并且基于該方法能獲得高質(zhì)量的整體性能,因而獲得了廣泛的應(yīng)用。
其次是深度圖的快速構(gòu)建,在這方面基于局部相關(guān)性(Local method)的方法和基于DP (Dynamic Programming,動(dòng)態(tài)規(guī)劃)的方法被認(rèn)為是當(dāng)前最有可能的兩種方案?;诰植肯?關(guān)性的方法存在噪聲嚴(yán)重,對圖像的弱紋理區(qū)域效果不好以及魯棒性差等諸多問題,難以獲得高質(zhì)量的立體重建效果;基于動(dòng)態(tài)規(guī)劃的方法在物體邊緣處容易出現(xiàn)條狀效應(yīng)。并且兩者 對于實(shí)時(shí)應(yīng)用而言,其計(jì)算量仍顯太大。
由此可見,現(xiàn)有的深度圖生成技術(shù)目前還存在著如下問題第一,能夠生成高質(zhì)量深度 圖的算法速度很慢;第二,能夠快速生成深度圖的算法得到的深度圖質(zhì)量比較差。所以,高 質(zhì)量和快速成為了深度圖生成的關(guān)鍵技術(shù)和難點(diǎn)。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明提供了一種生成深度圖的方法和裝置。所述技術(shù)方案 如下
一種生成深度圖的方法,所述方法包括
將輸入圖像對中的左視圖作為參考圖像,將所述輸入圖像對中的右視圖作為目標(biāo)圖像, 對所述參考圖像和目標(biāo)圖像分別做灰度變換;
計(jì)算灰度變換后的參考圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣;
根據(jù)灰度變換后的參考圖像、灰度變換后的目標(biāo)圖像以及所述參考圖像和目標(biāo)圖像之間 的視差,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理;
根據(jù)所述代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,初始化上信息存儲(chǔ)矩陣、下信息存 儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣;
將所述上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及所述原始信息存儲(chǔ)矩 陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形處理 器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在所述GPU上采用置信傳播算法進(jìn)行迭代 計(jì)算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ) 矩陣和迭代后的右信息存儲(chǔ)矩陣;
根據(jù)所述迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩 陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;
根據(jù)所述置信矩陣計(jì)算得到深度圖。
所述計(jì)算灰度變換后的參考圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣, 具體包括
將灰度變換后的參考圖像的每一點(diǎn)與其上方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述上梯度閾值,則將該點(diǎn)的上梯度 值置為l,如果所述結(jié)果小于所述上梯度閾值,則將該點(diǎn)的上梯度值置為0;將灰度變換后的參考圖像的每一點(diǎn)與其下方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述下梯度閾值,則將該點(diǎn)的下梯度 值置為l,如果所述結(jié)果小于所述下梯度閾值,則將該點(diǎn)的下梯度值置為0;
將灰度變換后的參考圖像的每一點(diǎn)與其左方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述左梯度閾值,則將該點(diǎn)的左梯度 值置為l,如果所述結(jié)果小于所述左梯度閾值,則將該點(diǎn)的左梯度值置為0;
將灰度變換后的參考圖像的每一點(diǎn)與其右方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述右梯度閾值,則將該點(diǎn)的右梯度 值置為l,如果所述結(jié)果小于所述右梯度閾值,則將該點(diǎn)的右梯度值置為0。
所述根據(jù)灰度變換后的參考圖像、灰度變換后的目標(biāo)圖像以及所述參考圖像和目標(biāo)圖像 之間的視差,計(jì)算代價(jià)函數(shù)矩陣,具體包括
將所述參考圖像和目標(biāo)圖像之間的視差的取值范圍設(shè)置為從0至預(yù)設(shè)的最大視差值;
對灰度變換后的參考圖像中的每一個(gè)點(diǎn),分別取所述取值范圍內(nèi)的每一個(gè)視差值,按照 如下第一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣-
cos《a, 6) = r^/^e"ce(a, 6) _ f arg e/(", 6 — d)|; d = 0: <i max;
其中,cost為所述代價(jià)函數(shù)矩陣,reference為所述灰度變換后的參考圖像矩陣,target為 灰度變換后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為所述參考圖像 和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。
所述進(jìn)行邊界處理,具體包括
按照所述第一公式計(jì)算所述代價(jià)函數(shù)矩陣后,對所述參考圖像內(nèi)剩余的無法按照所述第 一公式進(jìn)行計(jì)算的區(qū)域,按照如下第二公式計(jì)算相應(yīng)的代價(jià)函數(shù)矩陣
COS咖,Z)) = COS f (", J);
<i = 0: <i max; 6 = l:d;
其中,所述cost為所述區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo) 位置,d為所述參考圖像和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。 所述進(jìn)行邊界處理之后,還包括
將所述計(jì)算和邊界處理后得到的所有代價(jià)函數(shù)矩陣中的每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅容^,如果該值大于所述截?cái)嚅撝?,則將其修改為所述截?cái)嚅撝担駝t,保留該值。 所述根據(jù)所述代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,具體包括 按照如下公式對所述代價(jià)函數(shù)矩陣進(jìn)行計(jì)算,得到原始信息存儲(chǔ)矩陣
j9mw艦^a取—e ;
其中,prawme^age為所述原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),cost為所述代 價(jià)函數(shù)矩陣,e為自然對數(shù)的底。
所述根據(jù)所述迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存 儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣,具體包括
將所述迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣 和迭代后的右信息存儲(chǔ)矩陣相乘后,得到置信矩陣。
所述參考圖像和目標(biāo)圖像之間的視差有多個(gè)取值,每個(gè)取值對應(yīng)一個(gè)置信矩陣,所述根 據(jù)所述置信矩陣計(jì)算得到深度圖,具體包括
比較所述多個(gè)取值對應(yīng)的多個(gè)置信矩陣,對每個(gè)點(diǎn)按照置信值最大的原則,得到該點(diǎn)的 深度數(shù)據(jù),在得到所有點(diǎn)的深度數(shù)據(jù)后,將所述所有點(diǎn)的深度數(shù)據(jù)作為深度圖。
一種生成深度圖的裝置,所述裝置包括
灰度變換模塊,用于將輸入圖像對中的左視圖作為參考圖像,將所述輸入圖像對中的右
視圖作為目標(biāo)圖像,對所述參考圖像和目標(biāo)圖像分別做灰度變換;
梯度計(jì)算模塊,用于計(jì)算所述灰度變換模塊進(jìn)行灰度變換后得到的參考圖像的上梯度矩 陣、下梯度矩陣、左梯度矩陣和右梯度矩陣;
代價(jià)函數(shù)矩陣計(jì)算模塊,用于根據(jù)所述參考圖像和目標(biāo)圖像之間的視差、所述灰度變換
模塊得到的灰度變換后的參考圖像和灰度變換后的目標(biāo)圖像,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界 處理;
原始信息存儲(chǔ)矩陣計(jì)算模塊,用于根據(jù)所述代價(jià)函數(shù)矩陣計(jì)算模塊計(jì)算得到的代價(jià)函數(shù) 矩陣計(jì)算得到原始信息存儲(chǔ)矩陣;
迭代模塊,用于初始化上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存 儲(chǔ)矩陣,將所述上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及所述原始信息存 儲(chǔ)矩陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形 處理器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在所述GPU上采用置信傳播算法進(jìn)行 迭代計(jì)算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息 存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣;置信矩陣計(jì)算模塊,用于根據(jù)所述迭代模塊迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息 存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;
深度圖計(jì)算模塊,用于根據(jù)所述置信矩陣計(jì)算模塊得到的置信矩陣計(jì)算得到深度圖。 所述梯度計(jì)算模塊具體包括
上梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其上 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述上梯度閾值,則將該點(diǎn)的上梯度值置為1,如果所述結(jié)果小于所述上梯度閾值, 則將該點(diǎn)的上梯度值置為0;
下梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其下 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述下梯度閾值,則將該點(diǎn)的下梯度值置為1,如果所述結(jié)果小于所述下梯度閾值, 則將該點(diǎn)的下梯度值置為0;
左梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其左 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述左梯度閾值,則將該點(diǎn)的左梯度值置為1,如果所述結(jié)果小于所述左梯度閾值, 則將該點(diǎn)的左梯度值置為0;
右梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其右 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述右梯度閾值,則將該點(diǎn)的右梯度值置為1,如果所述結(jié)果小于所述右梯度閾值, 則將該點(diǎn)的右梯度值置為0。
所述代價(jià)函數(shù)矩陣計(jì)算模塊具體包括
代價(jià)函數(shù)矩陣計(jì)算單元,用于將所述參考圖像和目標(biāo)圖像之間的視差的取值范圍設(shè)置為 從0至預(yù)設(shè)的最大視差值,對所述灰度變換模塊進(jìn)行灰度變換后的參考圖像中的每一個(gè)點(diǎn), 分別取所述取值范圍內(nèi)的每一個(gè)視差值,按照如下第一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣
cos "a, Z)) = r^/^rewce(a, Z ) — / arg e/(a, 6 -力|; <i = 0: <i max;
其中,cost為所述代價(jià)函數(shù)矩陣,reference為所述灰度變換后的參考圖像矩陣,target為 灰度變換后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為所述參考圖像 和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值;
邊界處理單元,用于在所述代價(jià)函數(shù)矩陣計(jì)算單元計(jì)算得到所述代價(jià)函數(shù)矩陣后,進(jìn)行邊界處理。
所述邊界處理單元具體用于在所述代價(jià)函數(shù)矩陣計(jì)算單元按照所述第一公式計(jì)算所述 代價(jià)函數(shù)矩陣后,對所述參考圖像內(nèi)剩余的無法按照所述第一公式進(jìn)行計(jì)算的區(qū)域,按照如 下第二公式計(jì)算相應(yīng)的代價(jià)函數(shù)矩陣
COS f (", Z ) = COS
d = 0: d max;
其中,所述cost為所述區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo) 位置,d為所述參考圖像和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。 所述裝置還包括
截?cái)嗄K,用于將所述代價(jià)函數(shù)矩陣計(jì)算模塊在計(jì)算和邊界處理后得到的所有代價(jià)函數(shù) 矩陣中的每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅容^,如果該值大于所述截?cái)嚅撝?,則將其修改為所述 截?cái)嚅撝担駝t,保留該值。
所述原始信息存儲(chǔ)矩陣計(jì)算模塊具體用于按照如下公式對所述代價(jià)函數(shù)矩陣進(jìn)行計(jì)算, 得到原始信息存儲(chǔ)矩陣-
其中,prawme^age為所述原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),cost為所述代 價(jià)函數(shù)矩陣,e為自然對數(shù)的底。
所述置信矩陣計(jì)算模塊具體包括
置信矩陣計(jì)算單元,用于將所述迭代模塊迭代后得到的上信息存儲(chǔ)矩陣、迭代后的下信 息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣相乘后,得到置信矩陣。
所述參考圖像和目標(biāo)圖像之間的視差有多個(gè)取值,每個(gè)取值對應(yīng)一個(gè)置信矩陣,所述深 度圖計(jì)算模塊具體包括
深度圖計(jì)算單元,用于比較所述多個(gè)取值對應(yīng)的多個(gè)置信矩陣,對每個(gè)點(diǎn)按照置信值最 大的原則,得到該點(diǎn)的深度數(shù)據(jù),在得到所有點(diǎn)的深度數(shù)據(jù)后,將所述所有點(diǎn)的深度數(shù)據(jù)作 為深度圖。
本發(fā)明提供的上述技術(shù)方案,采用GPU并行優(yōu)化加速置信傳播算法進(jìn)行計(jì)算,解決了現(xiàn) 有技術(shù)中能夠生成高質(zhì)量深度圖的算法速度很慢,以及能夠快速生成深度圖的算法得到的深 度圖質(zhì)量比較差這一矛盾,提高了深度圖的運(yùn)算效率,實(shí)現(xiàn)了高質(zhì)量且快速的深度圖生成。另外,計(jì)算過程主要在顯存中利用CUDA完成,其計(jì)算速度比現(xiàn)有的利用CPU進(jìn)行計(jì)算的 速度要快很多,而且,置信傳播算法的使用也保證了深度圖的高質(zhì)量。
圖1是本發(fā)明實(shí)施例提供的生成深度圖的方法流程圖。 圖2是本發(fā)明實(shí)施例提供的生成深度圖的裝置結(jié)構(gòu)圖。
圖3是本發(fā)明實(shí)施例提供的采用GPU程序生成深度圖的方法與現(xiàn)有的采用CPU程序生 成深度圖的方法的計(jì)算時(shí)間對比圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn) 一步地詳細(xì)描述。
本發(fā)明實(shí)施例提供了一種生成深度圖的方法,包括
將輸入圖像對中的左視圖作為參考圖像,將輸入圖像對中的右視圖作為目標(biāo)圖像,對參
考圖像和目標(biāo)圖像分別做灰度變換;
計(jì)算灰度變換后的參考圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣; 根據(jù)灰度變換后的參考圖像、灰度變換后的目標(biāo)圖像以及參考圖像和目標(biāo)圖像之間的視
差,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理;
根據(jù)代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,初始化上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩 陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣;
將上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及原始信息存儲(chǔ)矩陣、上信 息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到GPU (Graphic Processing Unit,圖形處理器)的顯存中,采用CUDA (Compute Unified Device Architecture 計(jì)算統(tǒng)一設(shè)備架構(gòu),NVIDIA公司開發(fā)的GPU上的通用編程模型)在GPU上采用置信傳播 算法進(jìn)行迭代計(jì)算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后 的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣;
根據(jù)迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和 迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;
根據(jù)置信矩陣計(jì)算得到深度圖。參見圖l,本發(fā)明實(shí)施例還提供了一種生成深度圖的方法,具體包括
步驟101:將輸入圖像對中的左視圖作為參考圖像,將輸入圖像對中的右視圖作為目標(biāo) 圖像,對參考圖像和目標(biāo)圖像分別做灰度變換;
其中,該輸入圖像對通常以文件的形式存儲(chǔ)在硬盤中,文件的類型可以有多種,如bmp 格式、jpg格式或gif格式等等。獲取輸入圖像對時(shí),具體地,可以從硬盤中讀取,優(yōu)選地, 將讀取的輸入圖像對存儲(chǔ)在內(nèi)存中。輸入圖像對在內(nèi)存中的存儲(chǔ)格式可以根據(jù)需要預(yù)先定義, 以方便后續(xù)過程中按照該預(yù)先定義的存儲(chǔ)格式從內(nèi)存中讀取。
具體地,還可以定義圖像接口,包括圖像數(shù)據(jù)指針,圖像寬度,高度,位深,圖像文件 類型,以及圖像在內(nèi)存中的存儲(chǔ)格式等,根據(jù)該圖像接口定義圖像讀取函數(shù),用該圖像讀取 函數(shù)從硬盤打開源圖像文件,獲取圖像數(shù)據(jù),按已定義的存儲(chǔ)格式保存在內(nèi)存中。例如,定 義圖像寬度為768,圖像高度為576,圖像為真彩色圖像,位深24,圖像文件類型是BMP, 則定義的圖像讀取函數(shù)按照BMP文件格式從硬盤讀取源圖像文件。
上述灰度變換可以利用RGB (Red Green Blue,紅綠藍(lán))圖像變換公式對輸入圖像對進(jìn) 行灰度變換,得到對應(yīng)的灰度圖像對。RGB圖像灰度變換的公式具體如下
y二0.212671x^ + 0.715160xG + 0.072169x5;
其中,y是灰度圖像每個(gè)像素點(diǎn)的灰度值,i 、 G、 S分別是平面視頻幀圖像中每個(gè) 像素點(diǎn)的仏G、 ^分量。
歩驟102:計(jì)算灰度變換后的參考圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯 度矩陣,具體如下
1) 將灰度變換后的參考圖像的每一點(diǎn)與其上方相鄰點(diǎn)的像素值相減并求絕對值,將得到 的結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果結(jié)果大于上梯度閾值,則將該點(diǎn)的上梯度值置為 1,如果結(jié)果小于上梯度閾值,則將該點(diǎn)的上梯度值置為O;
2) 將灰度變換后的參考圖像的每一點(diǎn)與其下方相鄰點(diǎn)的像素值相減并求絕對值,將得到 的結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果結(jié)果大于下梯度閾值,則將該點(diǎn)的下梯度值置為 1,如果結(jié)果小于下梯度閾值,則將該點(diǎn)的下梯度值置為O;
3) 將灰度變換后的參考圖像的每一點(diǎn)與其左方相鄰點(diǎn)的像素值相減并求絕對值,將得到 的結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果結(jié)果大于左梯度閾值,則將該點(diǎn)的左梯度值置為 1,如果結(jié)果小于左梯度閾值,則將該點(diǎn)的左梯度值置為O;
4) 將灰度變換后的參考圖像的每一點(diǎn)與其右方相鄰點(diǎn)的像素值相減并求絕對值,將得到 的結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果結(jié)果大于右梯度閾值,則將該點(diǎn)的右梯度值置為1,如果結(jié)果小于右梯度閾值,則將該點(diǎn)的右梯度值置為0。
其中,預(yù)設(shè)的上梯度閾值、下梯度閾值、左梯度閾值和右梯度閾值可以相同,也可以不 同,在本實(shí)施例中,優(yōu)選地,均預(yù)設(shè)為相同的值,如等于4。
步驟103:根據(jù)灰度變換后的參考圖像、灰度變換后的目標(biāo)圖像以及參考圖像和目標(biāo)圖 像之間的視差,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理,具體如下
將參考圖像和目標(biāo)圖像之間的視差d的取值范圍設(shè)置為從0至預(yù)設(shè)的最大視差值;
對灰度變換后的參考圖像中的每一個(gè)點(diǎn),分別取取值范圍內(nèi)的每一個(gè)視差值,按照如下 第一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣-
<formula>formula see original document page 16</formula>
其中,cost為代價(jià)函數(shù)矩陣,reference為灰度變換后的參考圖像矩陣,target為灰度變換 后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為參考圖像和目標(biāo)圖像之 間的視差,dmax為預(yù)設(shè)的最大視差值。并且,reference(a,b)-target(a,b-d)代表參考圖像中每一 點(diǎn)與目標(biāo)圖像中與該點(diǎn)左方相距d的點(diǎn)之間的像素值之差,該差的絕對值則作為此時(shí)視差d 的條件下該點(diǎn)的代價(jià)函數(shù)。
在按照上述第一公式計(jì)算代價(jià)函數(shù)矩陣后,在參考圖像內(nèi)會(huì)剩余有無法按照第一公式進(jìn) 行計(jì)算的區(qū)域,因此,需要進(jìn)行邊界處理,即對于該區(qū)域按照如下第二公式計(jì)算相應(yīng)的代價(jià) 函數(shù)矩陣
<formula>formula see original document page 16</formula>
其中,cost為區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d 為參考圖像和目標(biāo)圖像之間的視差,dmax為預(yù)設(shè)的最大視差值。
上述視差的取值范圍可以根據(jù)需要預(yù)先設(shè)置,本實(shí)施例中,優(yōu)選地,設(shè)置最大視差值 dmax=16,則視差d的取值范圍是0 16的整數(shù)。因此,在按照該取值范圍取視差計(jì)算代價(jià)函 數(shù)矩陣時(shí),可以得到17個(gè)代價(jià)函數(shù)矩陣,每個(gè)d值對應(yīng)一個(gè)代價(jià)函數(shù)矩陣。
進(jìn)一步地,本實(shí)施例中,在進(jìn)行邊界處理之后,還可以包括以下步驟
將上述計(jì)算和邊界處理后得到的所有代價(jià)函數(shù)矩陣中的每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅?較,如果該值大于截?cái)嚅撝?,則將其修改為截?cái)嚅撝担駝t,保留該值。例如,預(yù)設(shè)的截?cái)嚅撝禐?0, 一個(gè)代價(jià)函數(shù)矩陣中的第1行第1列的值為25,則將該值 取為20,第2行第1列的值為18,則保留該值不變。
步驟104:根據(jù)代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,初始化上信息存儲(chǔ)矩陣、下 信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣;
其中,根據(jù)代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,可以采用如下公式
pr,膨^a取=e ;
其中,prawma^"ge為原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),cost為上述代價(jià)函 數(shù)矩陣,e為自然對數(shù)的底。轉(zhuǎn)換系數(shù)D的值可以根據(jù)需要進(jìn)行設(shè)置,如設(shè)置0=50等。
在本實(shí)施例中,優(yōu)選地,將上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信 息存儲(chǔ)矩陣中每個(gè)點(diǎn)的取值均初始化為1。該初始化值根據(jù)需要也可以進(jìn)行更改。
步驟105:將上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及原始信息存儲(chǔ) 矩陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形處 理器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在GPU上采用置信傳播算法進(jìn)行迭代計(jì) 算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩 陣和迭代后的右信息存儲(chǔ)矩陣;
本步驟以前所做的處理均在內(nèi)存中進(jìn)行,期間計(jì)算得到的各種數(shù)據(jù)也都保存在內(nèi)存中, 而本步驟中迭代計(jì)算的過程是在顯存中完成的。具體過程可以如下
用CUDA提供的函數(shù)在顯存中開辟空間,并將上梯度矩陣、下梯度矩陣、左梯度矩陣和 右梯度矩陣,以及原始信息存儲(chǔ)矩陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣 和右信息存儲(chǔ)矩陣從內(nèi)存復(fù)制到顯存,本實(shí)施例中,用cudaMalloc()在顯存中開辟空間,用 cudaMemcpy()將上述各項(xiàng)內(nèi)容從內(nèi)存復(fù)制到顯存。
在GPU上利用上梯度矩陣、下梯度矩陣、左梯度矩陣、右梯度矩陣和原始信息存儲(chǔ)矩陣, 并行計(jì)算上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣這四個(gè)矩陣, 并迭代更新,在本實(shí)施例中,采用置信傳播算法,對這四個(gè)矩陣中的每個(gè)矩陣都迭代50次。
步驟106:根據(jù)迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息 存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;
根據(jù)迭代后的結(jié)果計(jì)算得到置信矩陣,公式具體如下
其中,belief是置信矩陣,downmessage為下信息存儲(chǔ)矩陣,upmessage為上信息存儲(chǔ)矩 陣,leftmessage為左信息存儲(chǔ)矩陣,rightmessage為右信息存儲(chǔ)矩陣。本實(shí)施例中,參考圖像和目標(biāo)圖像之間的視差有多個(gè)取值,因此,每個(gè)取值都對應(yīng)得到 一個(gè)置信矩陣。如d從0至dmax二16,共得到17個(gè)置信矩陣。 步驟107:根據(jù)置信矩陣計(jì)算得到深度圖。
本步驟在內(nèi)存中完成,可以先將顯存中的置信矩陣復(fù)制到內(nèi)存中,根據(jù)該置信矩陣計(jì)算 得到深度圖的數(shù)據(jù),并通過圖像接口輸出到硬盤,生成深度圖文件并輸出到硬盤。具體過程 如下
用CUDA提供的函數(shù)將置信矩陣從顯存復(fù)制到內(nèi)存,如用cudaMemcpy()將置信矩陣從 顯存復(fù)制到內(nèi)存;然后,將所有視差取值對應(yīng)的多個(gè)置信矩陣作比較,對每個(gè)點(diǎn)按照置信值 最大的原則,得到該點(diǎn)的深度數(shù)據(jù),即選擇可信度最大的值作為深度的最終求取結(jié)果;在得 到所有點(diǎn)的深度數(shù)據(jù)后,即得到包含該所有點(diǎn)深度數(shù)據(jù)的深度圖。
參見圖2,本發(fā)明實(shí)施例提供了一種生成深度圖的裝置,包括
灰度變換模塊201,用于將輸入圖像對中的左視圖作為參考圖像,將輸入圖像對中的右 視圖作為目標(biāo)圖像,對參考圖像和目標(biāo)圖像分別做灰度變換;
梯度計(jì)算模塊202,用于計(jì)算灰度變換模塊進(jìn)行灰度變換后得到的參考圖像的上梯度矩 陣、下梯度矩陣、左梯度矩陣和右梯度矩陣;
代價(jià)函數(shù)矩陣計(jì)算模塊203,用于根據(jù)參考圖像和目標(biāo)圖像之間的視差、灰度變換模塊 得到的灰度變換后的參考圖像和灰度變換后的目標(biāo)圖像,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理;
原始信息存儲(chǔ)矩陣計(jì)算模塊204,用于根據(jù)代價(jià)函數(shù)矩陣計(jì)算模塊計(jì)算得到的代價(jià)函數(shù) 矩陣計(jì)算得到原始信息存儲(chǔ)矩陣;
迭代模塊205,用于初始化上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信 息存儲(chǔ)矩陣,將上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及原始信息存儲(chǔ)矩 陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形處理 器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在GPU上采用置信傳播算法進(jìn)行迭代計(jì)算, 分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和 迭代后的右信息存儲(chǔ)矩陣;
置信矩陣計(jì)算模塊206,用于根據(jù)迭代模塊迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息 存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;
深度圖計(jì)算模塊207,用于根據(jù)置信矩陣計(jì)算模塊得到的置信矩陣計(jì)算得到深度圖。
其中,梯度計(jì)算模塊202具體包括-上梯度計(jì)算單元,用于將灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其上方相 鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果結(jié)果大于 上梯度閾值,則將該點(diǎn)的上梯度值置為1,如果結(jié)果小于上梯度閾值,則將該點(diǎn)的上梯度值 置為0;
下梯度計(jì)算單元,用于將灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其下方相 鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果結(jié)果大于 下梯度閾值,則將該點(diǎn)的下梯度值置為1,如果結(jié)果小于下梯度閾值,則將該點(diǎn)的下梯度值 置為0;
左梯度計(jì)算單元,用于將灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其左方相 鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果結(jié)果大于 左梯度閾值,則將該點(diǎn)的左梯度值置為1,如果結(jié)果小于左梯度閾值,則將該點(diǎn)的左梯度值 置為0;
右梯度計(jì)算單元,用于將灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其右方相 鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果結(jié)果大于 右梯度閾值,則將該點(diǎn)的右梯度值置為1,如果結(jié)果小于右梯度閾值,則將該點(diǎn)的右梯度值
置為o。
本實(shí)施例中,代價(jià)函數(shù)矩陣計(jì)算模塊203具體包括
代價(jià)函數(shù)矩陣計(jì)算單元,用于將參考圖像和目標(biāo)圖像之間的視差的取值范圍設(shè)置為從0 至預(yù)設(shè)的最大視差值,對灰度變換模塊進(jìn)行灰度變換后的參考圖像中的每一個(gè)點(diǎn),分別取取
值范圍內(nèi)的每一個(gè)視差值,按照如下第一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣
cos "", 6) 二 ^/^ewce(a, 6) - f arg e"a, 6 — d)|; d = 0: d max;
其中,cost為代價(jià)函數(shù)矩陣,reference為灰度變換后的參考圖像矩陣,target為灰度變換 后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為參考圖像和目標(biāo)圖像之 間的視差,dmax為預(yù)設(shè)的最大視差值;
邊界處理單元,用于在代價(jià)函數(shù)矩陣計(jì)算單元計(jì)算得到代價(jià)函數(shù)矩陣后,進(jìn)行邊界處理。 上述邊界處理單元具體用于在代價(jià)函數(shù)矩陣計(jì)算單元按照第一公式計(jì)算代價(jià)函數(shù)矩陣 后,對參考圖像內(nèi)剩余的無法按照第一公式進(jìn)行計(jì)算的區(qū)域,按照如下第二公式計(jì)算相應(yīng)的
代價(jià)函數(shù)矩陣<formula>formula see original document page 20</formula>
其中,cost為區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d 為參考圖像和目標(biāo)圖像之間的視差,dmax為預(yù)設(shè)的最大視差值。 進(jìn)一步地,上述裝置還包括
截?cái)嗄K,用于將代價(jià)函數(shù)矩陣計(jì)算模塊在計(jì)算和邊界處理后得到的代價(jià)函數(shù)矩陣中的 每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅容^,如果該值大于截?cái)嚅撝?,則將其修改為截?cái)嚅撝?,否則, 保留該值。
本實(shí)施例中,原始信息存儲(chǔ)矩陣計(jì)算模塊具體用于按照如下公式對代價(jià)函數(shù)矩陣進(jìn)行
計(jì)算,得到原始信息存儲(chǔ)矩陣<formula>formula see original document page 20</formula>
其中,prawmawage為原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),cost為代價(jià)函數(shù)矩 陣,e為自然對數(shù)的底。
本實(shí)施例中,置信矩陣計(jì)算模塊206具體包括
置信矩陣計(jì)算單元,用于將迭代模塊迭代后得到的上信息存儲(chǔ)矩陣、迭代后的下信息存 儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣相乘后,得到置信矩陣。
本實(shí)施例中,參考圖像和目標(biāo)圖像之間的視差可以有多個(gè)取值,每個(gè)取值對應(yīng)一個(gè)置信 矩陣,相應(yīng)地,深度圖計(jì)算模塊207具體包括
深度圖計(jì)算單元,用于比較多個(gè)取值對應(yīng)的多個(gè)置信矩陣,對每個(gè)點(diǎn)按照置信值最大的 原則,得到該點(diǎn)的深度數(shù)據(jù),在得到所有點(diǎn)的深度數(shù)據(jù)后,將所有點(diǎn)的深度數(shù)據(jù)作為深度圖。
本發(fā)明實(shí)施例提供的上述方法和裝置,采用GPU并行優(yōu)化加速置信傳播算法進(jìn)行計(jì)算, 解決了現(xiàn)有技術(shù)中能夠生成高質(zhì)量深度圖的算法速度很慢,以及能夠快速生成深度圖的算法 得到的深度圖質(zhì)量比較差這一矛盾,提高了深度圖的運(yùn)算效率,實(shí)現(xiàn)了高質(zhì)量且快速的深度 圖生成。另外,計(jì)算過程主要在顯存中利用CUDA完成,其計(jì)算速度比現(xiàn)有的利用CPU進(jìn) 行計(jì)算的速度要快很多,而且,置信傳播算法的使用也保證了深度圖的高質(zhì)量。GPU兼有高 性能和靈活性,可以等效成為一個(gè)超大規(guī)模并行協(xié)處理器,具有強(qiáng)大的浮點(diǎn)運(yùn)算能力和很高 的帶寬。其大規(guī)模并行計(jì)算所帶來的高性能和不斷增強(qiáng)的可編程性,且本身面向個(gè)人消費(fèi)市場的低廉價(jià)格,使得本發(fā)明實(shí)施例提供的技術(shù)方案具有較強(qiáng)的實(shí)用性、易用性和靈活性。
圖3是本發(fā)明實(shí)施例提供的采用GPU程序生成深度圖的方法與現(xiàn)有的采用CPU程序生 成深度圖的方法的計(jì)算時(shí)間對比圖。其中,圖3 (a)為現(xiàn)有技術(shù)采用CPU程序生成深度圖的 計(jì)算時(shí)間,圖3 (b)為采用本發(fā)明的GPU程序生成深度圖的計(jì)算時(shí)間,單位均為毫秒ms, 且circle time為循環(huán)迭代計(jì)算時(shí)間,total time為程序運(yùn)行的總時(shí)間。由該圖可以看出,本發(fā) 明的方案生成深度圖的速度要比現(xiàn)有的生成深度圖的速度快很多,速度得到了很大的提高。
本發(fā)明實(shí)施例提供的上述技術(shù)方案的全部或部分可以通過程序指令相關(guān)的硬件來完成,
所述程序可以存儲(chǔ)在可讀取的存儲(chǔ)介質(zhì)中,該存儲(chǔ)介質(zhì)包括R0M、 RAM、磁碟或者光盤等
各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之
內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種生成深度圖的方法,其特征在于,所述方法包括將輸入圖像對中的左視圖作為參考圖像,將所述輸入圖像對中的右視圖作為目標(biāo)圖像,對所述參考圖像和目標(biāo)圖像分別做灰度變換;計(jì)算灰度變換后的參考圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣;根據(jù)灰度變換后的參考圖像、灰度變換后的目標(biāo)圖像以及所述參考圖像和目標(biāo)圖像之間的視差,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理;根據(jù)所述代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣,初始化上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣;將所述上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及所述原始信息存儲(chǔ)矩陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形處理器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在所述GPU上采用置信傳播算法進(jìn)行迭代計(jì)算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣;根據(jù)所述迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;根據(jù)所述置信矩陣計(jì)算得到深度圖。
2、 根據(jù)權(quán)利要求l所述的生成深度圖的方法,其特征在于,所述計(jì)算灰度變換后的參考 圖像的上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,具體包括將灰度變換后的參考圖像的每一點(diǎn)與其上方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述上梯度閾值,則將該點(diǎn)的上梯度值置為l,如果所述結(jié)果小于所述上梯度閾值,則將該點(diǎn)的上梯度值置為0;將灰度變換后的參考圖像的每一點(diǎn)與其下方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述下梯度閾值,則將該點(diǎn)的下梯度值置為l,如果所述結(jié)果小于所述下梯度閾值,則將該點(diǎn)的下梯度值置為0;將灰度變換后的參考圖像的每一點(diǎn)與其左方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述左梯度閾值,則將該點(diǎn)的左梯度值置為l,如果所述結(jié)果小于所述左梯度閾值,則將該點(diǎn)的左梯度值置為0;將灰度變換后的參考圖像的每一點(diǎn)與其右方相鄰點(diǎn)的像素值相減并求絕對值,將得到的 結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果所述結(jié)果大于所述右梯度閾值,則將該點(diǎn)的右梯度 值置為l,如果所述結(jié)果小于所述右梯度閾值,則將該點(diǎn)的右梯度值置為0。
3、根據(jù)權(quán)利要求1所述的生成深度圖的方法,其特征在于,所述根據(jù)灰度變換后的參考 圖像、灰度變換后的目標(biāo)圖像以及所述參考圖像和目標(biāo)圖像之間的視差,計(jì)算代價(jià)函數(shù)矩陣, 具體包括將所述參考圖像和目標(biāo)圖像之間的視差的取值范圍設(shè)置為從0至預(yù)設(shè)的最大視差值; 對灰度變換后的參考圖像中的每一個(gè)點(diǎn),分別取所述取值范圍內(nèi)的每一個(gè)視差值,按照 如下第 一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣<formula>formula see original document page 3</formula>其中,cost為所述代價(jià)函數(shù)矩陣,reference為所述灰度變換后的參考圖像矩陣,target為 灰度變換后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為所述參考圖像 和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。
4、 根據(jù)權(quán)利要求3所述的生成深度圖的方法,其特征在于,所述進(jìn)行邊界處理,具體包括按照所述第一公式計(jì)算所述代價(jià)函數(shù)矩陣后,對所述參考圖像內(nèi)剩余的無法按照所述第 一公式進(jìn)行計(jì)算的區(qū)域,按照如下第二公式計(jì)算相應(yīng)的代價(jià)函數(shù)矩陣<formula>formula see original document page 3</formula>其中,所述cost為所述區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo) 位置,d為所述參考圖像和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。
5、 根據(jù)權(quán)利要求l所述的生成深度圖的方法,其特征在于,所述進(jìn)行邊界處理之后,還 包括-將所述計(jì)算及邊界處理后得到的所有代價(jià)函數(shù)矩陣中的每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅容^,如果該值大于所述截?cái)嚅撝?,則將其修改為所述截?cái)嚅撝担駝t,保留該值。
6、 根據(jù)權(quán)利要求1所述的生成深度圖的方法,其特征在于,所述根據(jù)所述代價(jià)函數(shù)矩陣 計(jì)算得到原始信息存儲(chǔ)矩陣,具體包括按照如下公式對所述代價(jià)函數(shù)矩陣進(jìn)行計(jì)算,得到原始信息存儲(chǔ)矩陣其中,/ ^WWCTSflge為所述原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),COSt為所述代價(jià)函數(shù)矩陣,e為自然對數(shù)的底。
7、 根據(jù)權(quán)利要求l所述的生成深度圖的方法,其特征在于,所述根據(jù)所述迭代后的上信 息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩 陣計(jì)算得到置信矩陣,具體包括-將所述迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣 和迭代后的右信息存儲(chǔ)矩陣相乘后,得到置信矩陣。
8、 根據(jù)權(quán)利要求l所述的生成深度圖的方法,其特征在于,所述參考圖像和目標(biāo)圖像之 間的視差有多個(gè)取值,每個(gè)取值對應(yīng)一個(gè)置信矩陣,所述根據(jù)所述置信矩陣計(jì)算得到深度圖,具體包括比較所述多個(gè)取值對應(yīng)的多個(gè)置信矩陣,對每個(gè)點(diǎn)按照置信值梟大的原則,得到該點(diǎn)的 深度數(shù)據(jù),在得到所有點(diǎn)的深度數(shù)據(jù)后,將所述所有點(diǎn)的深度數(shù)據(jù)作為深度圖。
9、 一種生成深度圖的裝置,其特征在于,所述裝置包括灰度變換模塊,用于將輸入圖像對中的左視圖作為參考圖像,將所述輸入圖像對中的右視圖作為目標(biāo)圖像,對所述參考圖像和目標(biāo)圖像分別做灰度變換;梯度計(jì)算模塊,用于計(jì)算所述灰度變換模塊進(jìn)行灰度變換后得到的參考圖像的上梯度矩 陣、下梯度矩陣、左梯度矩陣和右梯度矩陣;代價(jià)函數(shù)矩陣計(jì)算模塊,用于根據(jù)所述參考圖像和目標(biāo)圖像之間的視差、所述灰度變換 模塊得到的灰度變換后的參考圖像和灰度變換后的目標(biāo)圖像,計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界 處理;原始信息存儲(chǔ)矩陣計(jì)算模塊,用于根據(jù)所述代價(jià)函數(shù)矩陣計(jì)算模塊計(jì)算得到的代價(jià)函數(shù)矩陣計(jì)算得到原始信息存儲(chǔ)矩陣迭代模塊,用于初始化上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存 儲(chǔ)矩陣,將所述上梯度矩陣、下梯度矩陣、左梯度矩陣和右梯度矩陣,以及所述原始信息存 儲(chǔ)矩陣、上信息存儲(chǔ)矩陣、下信息存儲(chǔ)矩陣、左信息存儲(chǔ)矩陣和右信息存儲(chǔ)矩陣復(fù)制到圖形 處理器GPU的顯存中,采用計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA在所述GPU上采用置信傳播算法進(jìn)行 迭代計(jì)算,分別得到迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息存儲(chǔ)矩陣、迭代后的左信息 存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣;置信矩陣計(jì)算模塊,用于根據(jù)所述迭代模塊迭代后的上信息存儲(chǔ)矩陣、迭代后的下信息 存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣計(jì)算得到置信矩陣;深度圖計(jì)算模塊,用于根據(jù)所述置信矩陣計(jì)算模塊得到的置信矩陣計(jì)算得到深度圖。
10、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述梯度計(jì)算模塊具體包括上梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其上 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的上梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述上梯度閾值,則將該點(diǎn)的上梯度值置為1,如果所述結(jié)果小于所述上梯度閾值, 則將該點(diǎn)的上梯度值置為0;下梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其下 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的下梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述下梯度閾值,則將該點(diǎn)的下梯度值置為1,如果所述結(jié)果小于所述下梯度閾值, 則將該點(diǎn)的下梯度值置為0;左梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其左 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的左梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述左梯度閾值,則將該點(diǎn)的左梯度值置為1,如果所述結(jié)果小于所述左梯度閾值, 則將該點(diǎn)的左梯度值置為0;右梯度計(jì)算單元,用于將所述灰度變換模塊進(jìn)行灰度變換后的參考圖像的每一點(diǎn)與其右 方相鄰點(diǎn)的像素值相減并求絕對值,將得到的結(jié)果與預(yù)設(shè)的右梯度閾值進(jìn)行比較,如果所述 結(jié)果大于所述右梯度閾值,則將該點(diǎn)的右梯度值置為1,如果所述結(jié)果小于所述右梯度閾值, 則將該點(diǎn)的右梯度值置為0。
11、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述代價(jià)函數(shù)矩陣計(jì)算模塊具體包括代價(jià)函數(shù)矩陣計(jì)算單元,用于將所述參考圖像和目標(biāo)圖像之間的視差的取值范圍設(shè)置為 從0至預(yù)設(shè)的最大視差值,對所述灰度變換模塊進(jìn)行灰度變換后的參考圖像中的每一個(gè)點(diǎn), 分別取所述取值范圍內(nèi)的每一個(gè)視差值,按照如下第一公式計(jì)算對應(yīng)的代價(jià)函數(shù)矩陣<formula>formula see original document page 6</formula>其中,cost為所述代價(jià)函數(shù)矩陣,reference為所述灰度變換后的參考圖像矩陣,target為 灰度變換后的目標(biāo)圖像矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo)位置,d為所述參考圖像 和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值;邊界處理單元,用于在所述代價(jià)函數(shù)矩陣計(jì)算單元計(jì)算得到所述代價(jià)函數(shù)矩陣后,進(jìn)行 邊界處理。
12、 根據(jù)權(quán)利要求ll所述的生成深度圖的裝置,其特征在于,所述邊界處理單元具體用 于在所述代價(jià)函數(shù)矩陣計(jì)算單元按照所述第一公式計(jì)算所述代價(jià)函數(shù)矩陣后,對所述參考 圖像內(nèi)剩余的無法按照所述第一公式進(jìn)行計(jì)算的區(qū)域,按照如下第二公式計(jì)算相應(yīng)的代價(jià)函數(shù)矩陣<formula>formula see original document page 6</formula>其中,所述cost為所述區(qū)域?qū)?yīng)的代價(jià)函數(shù)矩陣,a為點(diǎn)的縱坐標(biāo)位置,b為點(diǎn)的橫坐標(biāo) 位置,d為所述參考圖像和目標(biāo)圖像之間的視差,dmax為所述預(yù)設(shè)的最大視差值。
13、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述裝置還包括-截?cái)嗄K,用于將所述代價(jià)函數(shù)矩陣計(jì)算模塊在計(jì)算和邊界處理后得到的所有代價(jià)函數(shù)矩陣中的每個(gè)值與預(yù)設(shè)的截?cái)嚅撝底鞅容^,如果該值大于所述截?cái)嚅撝?,則將其修改為所述 截?cái)嚅撝?,否則,保留該值。
14、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述原始信息存儲(chǔ)矩陣計(jì) 算模塊具體用于按照如下公式對所述代價(jià)函數(shù)矩陣進(jìn)行計(jì)算,得到原始信息存儲(chǔ)矩陣/ rawme^age — 畫s ;其中,; rawme^"ge為所述原始信息存儲(chǔ)矩陣,D為預(yù)設(shè)的轉(zhuǎn)換系數(shù),cost為所述代 價(jià)函數(shù)矩陣,e為自然對數(shù)的底。
15、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述置信矩陣計(jì)算模塊具 體包括置信矩陣計(jì)算單元,用于將所述迭代模塊迭代后得到的上信息存儲(chǔ)矩陣、迭代后的下信 息存儲(chǔ)矩陣、迭代后的左信息存儲(chǔ)矩陣和迭代后的右信息存儲(chǔ)矩陣相乘后,得到置信矩陣。
16、 根據(jù)權(quán)利要求9所述的生成深度圖的裝置,其特征在于,所述參考圖像和目標(biāo)圖像 之間的視差有多個(gè)取值,每個(gè)取值對應(yīng)一個(gè)置信矩陣,所述深度圖計(jì)算模塊具體包括深度圖計(jì)算單元,用于比較所述多個(gè)取值對應(yīng)的多個(gè)置信矩陣,對每個(gè)點(diǎn)按照置信值最 大的原則,得到該點(diǎn)的深度數(shù)據(jù),在得到所有點(diǎn)的深度數(shù)據(jù)后,將所述所有點(diǎn)的深度數(shù)據(jù)作 為深度圖。
全文摘要
本發(fā)明公開了一種生成深度圖的方法和裝置,屬于計(jì)算機(jī)視覺技術(shù)領(lǐng)域。該方法包括將輸入圖像對中的左右視圖分別作為參考圖像和目標(biāo)圖像做灰度變換;計(jì)算灰度變換后的參考圖像的上下左右梯度矩陣;按視差計(jì)算代價(jià)函數(shù)矩陣并進(jìn)行邊界處理;計(jì)算原始信息存儲(chǔ)矩陣且初始化上下左右信息存儲(chǔ)矩陣;在GPU顯存中利用CUDA置信傳播算法進(jìn)行迭代計(jì)算,得到迭代后的上下左右信息存儲(chǔ)矩陣,根據(jù)迭代結(jié)果計(jì)算置信矩陣;根據(jù)置信矩陣計(jì)算深度圖。該裝置包括灰度變換模塊、梯度計(jì)算模塊、代價(jià)函數(shù)矩陣計(jì)算模塊、原始信息存儲(chǔ)矩陣計(jì)算模塊、迭代模塊、置信矩陣計(jì)算模塊和深度圖計(jì)算模塊。本發(fā)明提高了深度圖的運(yùn)算效率,實(shí)現(xiàn)了高質(zhì)量且快速的深度圖生成。
文檔編號(hào)H04N13/00GK101605270SQ20091008878
公開日2009年12月16日 申請日期2009年7月16日 優(yōu)先權(quán)日2009年7月16日
發(fā)明者劉繼明, 戴瓊海, 汛 曹 申請人:清華大學(xué)