本發(fā)明涉及基于單幅圖像的保邊插值超分辨率計(jì)算方法,具體是提出圖像處理中利用雙三次插值、邊緣檢測(cè)和梯度銳化,選擇和設(shè)計(jì)特定的算子和算法矩陣獲得高效、輕量的能面向移動(dòng)設(shè)備的算法,在速度和處理質(zhì)量上能達(dá)到一個(gè)適于移動(dòng)設(shè)備使用的平衡。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展現(xiàn)代科技的發(fā)展,人們?cè)谌粘I钪袝?huì)越來(lái)越多從互聯(lián)網(wǎng)上的獲取到各種各樣的圖像信息。但一幅圖像的分辨率通常是固定的,一旦放大后就會(huì)出現(xiàn)鋸齒、馬賽克或圖像變形等一系列的問(wèn)題。嚴(yán)重影響到視覺(jué)效果。然而從硬件設(shè)備角度提高成像質(zhì)量面臨著高精度元件所帶來(lái)的昂貴成本。如果能通過(guò)軟件的算法把快速高效的把圖像低分辨率轉(zhuǎn)換成人們視覺(jué)上可以接受的清晰的高分辨率圖像是目前非常需要的。這種基于軟件的超分辨率技術(shù)的成果在移動(dòng)設(shè)備、遙感、醫(yī)學(xué)成像、公共安全監(jiān)控系統(tǒng)等很多領(lǐng)域都有非常重要的應(yīng)用價(jià)值,但目前尚未見(jiàn)有這方面的研究成果。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)上述現(xiàn)有存在的問(wèn)題和不足,本發(fā)明的目的是提供一種有效的單幅圖像保邊插值的計(jì)算方法,快速保質(zhì)的超分辨率圖像,支持在容量小、內(nèi)核處理能力較低的移動(dòng)電子設(shè)備上,存儲(chǔ)低分辨率的圖像,顯示高分辨率圖像。
技術(shù)方案:為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用的技術(shù)方案為一種基于單幅圖像的保邊插值超分辨率計(jì)算方法,能為移動(dòng)設(shè)備提供高分辨率的圖像,包括以下步驟:
1)采用canny算子提取圖像邊信息,分離邊部分與非邊部分;
2)非邊部分采用雙三次插值方法保證質(zhì)量與速度;
3)為邊部分處理設(shè)計(jì)梯度矩陣;
4)根據(jù)梯度矩陣進(jìn)行邊緣修正,實(shí)現(xiàn)邊部分銳化還原;
在上述步驟被處理后,即可把單幅圖像轉(zhuǎn)化成一幅高分辨率的圖像。
進(jìn)一步的,所述步驟1)采用canny算子提取圖像邊信息,分離邊部分與非邊部分。指定兩個(gè)閾值參數(shù)來(lái)控制邊的檢測(cè),其中一個(gè)閾值控制初始圖像的分割(基礎(chǔ)分割),另一個(gè)閾值控制初始分割后的細(xì)節(jié)分割。canny算子還使用卷積去除噪聲,在平滑的圖像上利用圖像的邊緣梯度來(lái)判斷邊的趨向性。這是一種使用是最廣泛、效果最優(yōu)的邊緣檢測(cè)算法之一。
11)選取一張需要進(jìn)行超分辨率處理的圖像;
12)直接將彩色圖像轉(zhuǎn)換成灰度圖像,或使用分離rgb顏色通道分離出3幅灰度圖;
13)選擇canny算子檢測(cè)出灰度圖像的邊;
在matlab中,采用edge(image,’canny’)函數(shù)計(jì)算;
進(jìn)一步的,所述步驟2)中采用非邊部分采用雙三次插值方法,保證圖像的質(zhì)量與處理速度的均衡。包括如下步驟:
21)在非邊部分選用不易出現(xiàn)馬賽克和鋸齒,以及處理時(shí)間較快的雙三線性插值算法;
22)根據(jù)已有離散數(shù)據(jù)集推斷出新的數(shù)據(jù)點(diǎn),每1像素點(diǎn)擴(kuò)展出周?chē)?個(gè)像素點(diǎn);每個(gè)新像素點(diǎn)由周邊最鄰近的四個(gè)舊像素點(diǎn)以及像素變化率生成;
23)最終獲得放大2倍,但輪廓模糊的圖像。
進(jìn)一步的,所述步驟3)中,設(shè)計(jì)出隔行求差的梯度矩陣,為邊部分處理做準(zhǔn)備。包括如下步驟:
31)如果中心點(diǎn)為需要判斷梯度方向的點(diǎn),根據(jù)周?chē)?個(gè)點(diǎn)的像素值判斷該點(diǎn)向8個(gè)方向的趨近度;
32)通過(guò)加大垂直方向上的權(quán)重,弱化傾斜方向的權(quán)重,設(shè)計(jì)出隔行求差梯度矩陣;
33)獲得垂直向上、垂直向下、水平向左、水平向右、右上方、右下方、左上方、左下方8個(gè)方向的梯度矩陣:分別為h1、h2、h3、h4、h5、h6、h7、h8;
進(jìn)一步的,所述步驟4)中,選取適當(dāng)?shù)匿J化參數(shù),根據(jù)梯度矩陣進(jìn)行邊緣修正,實(shí)現(xiàn)邊部分銳化還原。部分使用梯度矩陣計(jì)算每一個(gè)點(diǎn)與其周邊8個(gè)點(diǎn)的像素值的梯度,計(jì)算出邊沿的法向,依據(jù)銳化參數(shù),從而根據(jù)該方向?qū)Σ逯颠^(guò)后的圖像在邊部分進(jìn)行銳化還原。最終獲得超分辨率的目標(biāo)圖像。包括如下步驟:
41)依次選取圖像中每一個(gè)像素點(diǎn)根據(jù)1)分離邊信息,和2)雙三線性插值處理后該點(diǎn),判斷是否是邊緣兩側(cè)像素點(diǎn),直到處理完整幅圖像的所有的像素點(diǎn)。
42)如果是邊像素點(diǎn),轉(zhuǎn)向43),如果是非邊像素點(diǎn),轉(zhuǎn)向41);
43)邊緣兩側(cè)的像素點(diǎn)與這些梯度矩陣做卷積運(yùn)算
44)采用冒泡算法確定梯度值最大的方向,使該像素點(diǎn)趨近于反方向;
45)使用修正公式:ai=(ai*f-p*g)/(f-g),其中p為邊緣兩側(cè)的像素點(diǎn),ai為p點(diǎn)最大梯度方向上生成的新像素點(diǎn),并選取銳化參數(shù)f=8;g=1。
46)選取需要修正的像素點(diǎn),計(jì)算梯度差值(ai*f-p*g),若(ai*f-p*g)>0,則需要按照修正公式修正該方向上的梯度差,否則不需要修正,轉(zhuǎn)向41),直到所有的像素點(diǎn)都被修正完成,返回超分辨率圖像。
如果采用分離rgb顏色通道,需要在調(diào)用算法前利用matlab圖像存儲(chǔ)原理,分離原三維圖像矩陣的rgb顏色通道為三個(gè)二維圖像矩陣;在算法處理完成后利用reshape函數(shù)將輸出的三個(gè)二維圖像矩陣合并成三維矩陣。即可獲得超分辨率圖像。
有益效果:本發(fā)明通過(guò)圍繞邊讀取算子的選取,梯度矩陣的設(shè)計(jì),銳化參數(shù)的選擇,采用canny算子提取圖像邊信息,高效分離出圖像的邊部分與非邊部分。對(duì)于非邊部分采用雙三次插值方法同時(shí)保證圖像質(zhì)量與處理速度,為邊部分設(shè)計(jì)梯度矩陣,計(jì)算出每一個(gè)像素點(diǎn)與其周邊8個(gè)點(diǎn)的像素值的梯度,并計(jì)算出邊沿的法向,通過(guò)增大邊緣像素之間的梯度差來(lái)使邊緣輪廓更清晰,因此設(shè)計(jì)一組修正因子,保證了邊緣像素能過(guò)較好地保持了原有的像素梯度,實(shí)現(xiàn)了圖像的銳化還原。對(duì)任意單幅彩色圖像輸入算法進(jìn)行多次處理,也可以獲得相應(yīng)放大任意倍數(shù)的超高分辨率圖像。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成本發(fā)明的不當(dāng)限定。在附圖中:
圖1是本發(fā)明提供的一種基于單幅圖像的保邊插值超分辨率計(jì)算方法的算法處理基本流程圖;
圖2是本發(fā)明提供的一種基于單幅圖像的保邊插值超分辨率計(jì)算方法的8個(gè)方向上的梯度矩陣。
圖3是本發(fā)明提供的一種基于單幅圖像的保邊插值超分辨率計(jì)算方法的銳化處理流圖。
圖4是本發(fā)明提供的一種基于單幅圖像的保邊插值超分辨率計(jì)算方法的算法處理效果圖a)采樣原始圖(396*396)b)減半采樣圖(198*198)c)本算法處理放大后的結(jié)果圖(396*396)
具體實(shí)施方式
為了使本發(fā)明所要解決的技術(shù)問(wèn)題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不限定本發(fā)明。
本發(fā)明一種基于單幅圖像的保邊插值超分辨率計(jì)算方法,其中,邊緣檢測(cè)采用的是基于canny算子的邊緣檢測(cè)算法,插值放大采用的是雙三次插值算法,邊緣銳化處理采用的是梯度邊緣法向修正處理方案。為了能夠有真實(shí)值驗(yàn)證算法的有效性,我們都是對(duì)輸入的原圖像減少采樣到原圖的一半,然后再使用超分辨率處理算法放大到2倍率大。這樣可以用原始輸入的圖來(lái)驗(yàn)證超分辨率處理的效果。本發(fā)明中討論的算法的具體實(shí)現(xiàn)都是基于放大兩倍來(lái)驗(yàn)證的,其它倍率的放大,可以根據(jù)2倍率放大后,再次調(diào)用該算法,實(shí)現(xiàn)任意倍率的放大。本發(fā)明實(shí)現(xiàn)單幅低分辨率的圖像快速構(gòu)建高分辨率圖像,避免圖像在放大后失真。
算法使用matlab平臺(tái),因此所有函數(shù)實(shí)現(xiàn)都是基于matlab庫(kù)構(gòu)建的。下面介紹的是詳細(xì)的算法設(shè)計(jì)以及函數(shù)使用。
首先,我們需要從圖片測(cè)試集文件夾中讀入測(cè)試圖片進(jìn)入文件,我們可以使用imread函數(shù)控制圖片路徑和擴(kuò)展名。獲取圖片后,用size函數(shù)存儲(chǔ)圖像的大小,將原圖片用imresize函數(shù)縮小2倍。這樣做是為了完成超分辨率處理時(shí),可以有圖片真實(shí)值進(jìn)行質(zhì)量評(píng)估。接下來(lái)就是對(duì)圖像進(jìn)行邊檢測(cè),matlab提供edge函數(shù)來(lái)實(shí)現(xiàn)邊檢測(cè),在調(diào)用edge函數(shù)時(shí)我們可以選擇不同的算子處理,這里選擇的是canny算子。在edge函數(shù)的邊檢測(cè)過(guò)程中,輸入的是灰度圖像,因此這里的策略也產(chǎn)生了分歧。方法將rgb圖像在r、g、b三個(gè)維度上進(jìn)行分離,分離成三幅灰度圖像分別檢測(cè)邊和銳化,之后再將三幅圖像通過(guò)reshape函數(shù)合并為一幅圖像。
由于matlab處理中將彩色圖像按照三維的矩陣存放img=[sizex,sizey,3],保持前兩維度不變,將三維矩陣分離成三個(gè)[sizex,sizey,1]的矩陣即可。理論上來(lái)說(shuō),rgb三通道分離處理的圖像質(zhì)量會(huì)比不分離的效果要好。直接進(jìn)行rgb2gray函數(shù),該函數(shù)會(huì)根據(jù)公式:grey=0.299*r+0.587*g+0.114*b轉(zhuǎn)化圖片,會(huì)造成部分像素信息的損失,相對(duì)的邊檢測(cè)也就會(huì)與真實(shí)值有偏差。同樣的,通過(guò)實(shí)驗(yàn)數(shù)據(jù)也可以很好地證明這一點(diǎn)。
完成邊檢測(cè)的操作之后,我們需要設(shè)置梯度矩陣來(lái)對(duì)邊緣像素進(jìn)行卷積操作。這里需要注意討論的梯度矩陣設(shè)置是基于一種求梯度的公式和權(quán)重設(shè)置來(lái)設(shè)計(jì)的,在實(shí)際的操作中我們也可以選擇多組梯度矩陣,測(cè)試最適合本算法的梯度矩陣組。卷積的操作在matlab中根據(jù)filter2函數(shù)設(shè)置濾波器實(shí)現(xiàn),將梯度矩陣hi和源圖像作為函數(shù)的輸入,即可獲得一個(gè)代表每個(gè)像素點(diǎn)經(jīng)過(guò)卷積操作后某個(gè)方向的梯度大小的二維矩陣,本算法設(shè)置了一個(gè)三維矩陣g來(lái)存放八個(gè)方向的像素梯度差值。
接著是邊緣像素的梯度判斷和銳化,遍歷圖像的所有像素點(diǎn),當(dāng)像素點(diǎn)處于邊位置時(shí),利用冒泡算法求解該像素點(diǎn)梯度最大的方向。由于edge函數(shù)輸出的邊緣圖像為二值化圖像,非邊部分為0,邊部分唯一,則只需要運(yùn)用if判斷語(yǔ)句判斷edgeimg(i,j)是否為真之后再遍歷g(i,j,m)即可實(shí)現(xiàn)。尋找到像素的最大梯度方向后,設(shè)置switch語(yǔ)句判斷,進(jìn)入這個(gè)方向的銳化操作流程。
銳化操作在實(shí)現(xiàn)的時(shí)候我們需要注意超分辨處理前后新舊點(diǎn)之間的對(duì)應(yīng)關(guān)系,根據(jù)matlab的下標(biāo)處理是從1開(kāi)始的,我們可以帶入一部分真實(shí)對(duì)應(yīng)值反推映射公式,圖上的任意一點(diǎn)p是未經(jīng)過(guò)插值處理的點(diǎn),假設(shè)它的位置p(i,j)=(1,1)。則插值過(guò)后八個(gè)方向的新像素點(diǎn)為a1(1,1),a2(1,2),a3(1,3),a4(2,1),p’(2,2),a5(2,3),a6(3,1),a7(3,2),a8(3,3)。不難推斷出,當(dāng)p=(i,j)時(shí),p’=(2i,2j),因此其余點(diǎn)根據(jù)p’即可求出a1=(2i-1,2j-1),a2(2i-1,2j),a3(2i-1,2j+1),a4(2i,2j-1),a5(2i,2j+1),a6(2i+1,2j-1),a7(2i+1,2j),a8(2i+1,2j+1),之后再根據(jù)閾值判斷,按照修正公式進(jìn)行像素修正。
經(jīng)過(guò)以上操作流程,我們所得到的輸出圖像就是完成基于單幅圖像的保邊超分辨率處理算法后的圖像。經(jīng)過(guò)上述計(jì)算方法的修正,圖像的馬賽克和邊緣模糊問(wèn)題可以得到較好的解決。
例如我們選一幅尺寸大小為396x396彩色圖片作為采樣,如圖4a,減半采樣后獲得尺寸大小為198x198,如圖4b,經(jīng)過(guò)我們優(yōu)化保邊插值超分辨率算法處理后,獲得放大后尺寸為396x396的圖片。最后采用評(píng)價(jià)圖像的客觀標(biāo)準(zhǔn)psnr峰值信噪比來(lái)進(jìn)行算法評(píng)價(jià)。由下表中的數(shù)據(jù)可以看出,本算法的psnr峰值信噪比更大,因此生成的圖像質(zhì)量也更好。
表1
為了更具有客觀性,采用專(zhuān)業(yè)圖片測(cè)試數(shù)據(jù)集,在加州大學(xué)伯克利分校計(jì)算機(jī)視覺(jué)實(shí)驗(yàn)室專(zhuān)用數(shù)據(jù)集bsd500中隨機(jī)選擇了100張大小包含160×240和320×480的圖像構(gòu)成了bsd100,作為數(shù)據(jù)測(cè)試集。我們的保邊插值算法在質(zhì)量上超過(guò)了普通的雙三次插值算法,完全滿足用戶的視覺(jué)體驗(yàn),單幅圖像的平均處理速度均<1s,完全能夠滿足移動(dòng)設(shè)備圖像處理應(yīng)用的高效需求。
圖1是本計(jì)算方法的算法處理流程圖,方法的輸入是低分辨率原圖,輸出是放大2倍后的高分辨率目標(biāo)圖。原圖經(jīng)過(guò)基于canny算子的邊緣檢測(cè)算法,雙三次插值算法放大,以及邊緣銳化處理獲得放大2倍后的高分辨率目標(biāo)圖。
圖2是隔行梯度矩陣,h1、h2、h3、h4、h5、h6、h7、h8分別表示垂直向上、垂直向下、水平向左、水平向右、右上方、右下方、左上方、左下方8個(gè)方向的梯度矩陣。
圖3是銳化處理流圖,輸入插值放大后的圖像,逐一判斷像素點(diǎn)是否是邊緣像素點(diǎn),如果為真,邊像素點(diǎn)與梯度矩陣做卷積運(yùn)算,采用冒泡算法確定周?chē)?個(gè)像素點(diǎn)梯度值最大的方向,使該像素點(diǎn)趨近于反方向。值得注意的是進(jìn)行插值算法時(shí),梯度差值容易被減小導(dǎo)致邊緣模糊。修正時(shí)若計(jì)算出的梯度差值小于設(shè)定值,則需要進(jìn)行修正。
圖4是算法處理效果圖a)采樣原始圖b)減半采樣圖c)本算法放大處理結(jié)果圖。
本發(fā)明具體應(yīng)用途徑很多,以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn),這些改進(jìn)也應(yīng)視為本發(fā)明的保護(hù)范圍。