本發(fā)明涉及屬于圖像處理技術(shù)領(lǐng)域,更進(jìn)一步涉及一種圖像壓縮方法,可用于對各種數(shù)字設(shè)備的圖像壓縮編碼。
背景技術(shù):
信息化時代人們越來越依靠計(jì)算機(jī)獲取和利用信息,而數(shù)字化后的多媒體信息具有海量數(shù)據(jù)性,與當(dāng)前硬件技術(shù)所能提供的計(jì)算機(jī)存儲資源和網(wǎng)絡(luò)帶寬之間有很大的差距,因此信息的存儲和傳輸造成了很大的困難。圖像信息作為計(jì)算機(jī)上最重要的資源,對其進(jìn)行有效的壓縮處理無疑是必要的,也會給人們帶來巨大的好處。圖像壓縮不但是各種動態(tài)圖像壓縮、傳輸?shù)幕A(chǔ),而且還是影響其效果好壞的重要因素。
預(yù)測編碼作為圖像壓縮最主要的方法,也是最基本的方法,在一些對圖片壓縮質(zhì)量要求比較高的領(lǐng)域經(jīng)常被采用,比如文本圖像和醫(yī)用圖像。預(yù)測編碼一般包括兩部分:一部分是去相關(guān),大多采用預(yù)測器,利用已編碼的鄰域像素灰度值來預(yù)測待編碼的像素灰度值;另一部分是對預(yù)測誤差進(jìn)行熵編碼。
預(yù)測器一般分為如下三類:
(1)全局預(yù)測器:對不同圖片或?qū)σ环鶊D片中的不同像素點(diǎn),均采用一組固定的預(yù)測系數(shù)對其進(jìn)行預(yù)測;
(2)局部預(yù)測器:對圖像的不同局部采用不同的預(yù)測系數(shù)對其進(jìn)行預(yù)測;
(3)全自適應(yīng)預(yù)測器:預(yù)測系數(shù)隨圖像像素點(diǎn)的變化而變化。
基于預(yù)測的主要方法有靜止圖像壓縮標(biāo)準(zhǔn)jpeg-ls中采用的中值邊緣檢測med方法,該方法對一幅圖像的像素從上到下、從左到右逐像素進(jìn)行編碼,其本質(zhì)是對當(dāng)前區(qū)域進(jìn)行一個簡單的梯度計(jì)算,然后沿著與邊界平行的方向進(jìn)行預(yù)測。對于當(dāng)前像素x的預(yù)測,是先根據(jù)鄰近像素之間的梯度選擇不同的變長編碼模式,然后對當(dāng)前像素進(jìn)行預(yù)測,將當(dāng)前像素與預(yù)測像素相減得到預(yù)測差值,最后對預(yù)測差值進(jìn)行熵編碼。
相比于jpeg-ls,基于上下文的自適應(yīng)無損圖像編碼方法calic,使用一個更加復(fù)雜的基于梯度的自適應(yīng)預(yù)測方法gap。該方法根據(jù)上下文模板計(jì)算當(dāng)前像素的水平梯度和垂直梯度,得到水平梯度和垂直梯度的差值,然后根據(jù)差值來判斷是否存在水平或者垂直邊緣,最后根據(jù)水平或垂直邊緣的變化程度,適當(dāng)?shù)剡x取相鄰像素的權(quán)重計(jì)算當(dāng)前像素的預(yù)測值。
上述jpeg-ls、calic雖然都采用了基于上下文的自適應(yīng)預(yù)測算法對像素進(jìn)行預(yù)測,但由于兩者采取的均是較為簡單的梯度計(jì)算,不能很好地跟蹤紋理走向,因此壓縮精度有待提升。近幾年,很多學(xué)者對快速幀內(nèi)預(yù)測模式選擇進(jìn)行了研究,并引入了canny邊緣方向直方圖方法,更加充分地利用圖像的紋理特性。
2011年肖化超和周檢發(fā)表的文章“基于lms的圖像自適應(yīng)預(yù)測編碼”中提出了一種自適應(yīng)更新權(quán)值的預(yù)測方法,電子設(shè)計(jì)工程,2011.19(4):p.109-112。其本質(zhì)是對預(yù)測中采用的鄰近像素不斷更新權(quán)值,來得到較小的預(yù)測差值,該方法雖然預(yù)測比較準(zhǔn)確,但由于沒有充分利用圖像的紋理特性,時間復(fù)雜度過高。
2012年,焦昶哲在其發(fā)表的論文“基于紋理相似度判斷的幀內(nèi)預(yù)測快速算法研究”中公開了一種基于紋理相似度判斷的快速選擇幀內(nèi)預(yù)測模式的方法,西安電子科技大學(xué),2012。該方法雖然能避免全搜索模式,大幅度降低幀內(nèi)預(yù)測的時間復(fù)雜度,但是由于在各種預(yù)測模式下各個像素的預(yù)測均采用線性預(yù)測,預(yù)測系數(shù)數(shù)目較多,又增加了待壓縮的數(shù)據(jù)量。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服上述已有技術(shù)的不足,提供一種基于梯度方向直方圖的遞歸預(yù)測圖像壓縮方法,以降低時間復(fù)雜度,減少預(yù)測系數(shù)的數(shù)目和預(yù)測差值,實(shí)現(xiàn)壓縮性能的提升。
實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案是:將基于sobel梯度方向直方圖的方法與遞歸馬爾可夫預(yù)測模型相結(jié)合,先判斷圖像塊的紋理方向,然后利用鄰近該方向上的若干參考像素建立遞歸馬爾可夫預(yù)測模型,采用最小二乘估計(jì)得到預(yù)測模型中參考像素的權(quán)值系數(shù),具體步驟包括如下:
(1)從自然圖像集中讀入一幅大小為m×m、后綴為.raw格式的原始灰度圖像,其中,m表示原始灰度圖像的寬度和高度,×表示相乘操作;
(2)對原始圖像進(jìn)行紋理方向判斷:
(2a)對步驟(1)中的原始灰度圖像進(jìn)行上下各一行,左右各一列的邊界擴(kuò)展,得到大小為(m+2)×(m+2)的擴(kuò)展圖像;
(2b)按照由左至右,由上至下的順序,利用sobel梯度算子對擴(kuò)展圖像的不包括邊界擴(kuò)展的各個像素點(diǎn)的梯度方向角進(jìn)行計(jì)算,進(jìn)而得到原始灰度圖像的梯度方向角矩陣g;
(2c)將梯度方向角矩陣g均勻分成大小為n×n的塊矩陣,讀取這些塊矩陣,并將讀取次數(shù)k初始化為1,其中,n表示塊矩陣行數(shù)和列數(shù),取值為4或8;
(2d)統(tǒng)計(jì)第k個塊矩陣的梯度方向直方圖,得到梯度方向直方圖峰值對應(yīng)的角度
(2e)判斷是否完成所有原始灰度圖像數(shù)據(jù)塊的紋理方向判斷,如果是,則執(zhí)行步驟(3),否則,k自增1,返回步驟(2d)。
(3)對步驟(1)中的原始灰度圖像數(shù)據(jù)進(jìn)行上下各三行,左右各三列的邊界擴(kuò)展,得到大小為(m+6)×(m+6)的擴(kuò)展圖像數(shù)據(jù),并將數(shù)據(jù)讀取地址初始化為擴(kuò)展圖像數(shù)據(jù)地址起始位置;
(4)從數(shù)據(jù)讀取地址開始,對擴(kuò)展圖像數(shù)據(jù)以大小為(n+3)×(n+3)塊為單位進(jìn)行讀??;
(5)根據(jù)讀取的塊數(shù)據(jù)建立馬爾可夫預(yù)測模型:
(5a)依照步驟(2)得到的紋理主方向,對塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素點(diǎn),利用與該紋理方向上鄰近的若干參考像素點(diǎn)建立二維遞歸馬爾可夫預(yù)測模型;
(5b)利用最小二乘估計(jì)的方法,估計(jì)遞歸馬爾可夫預(yù)測模型中參考像素的權(quán)值系數(shù);
(6)塊數(shù)據(jù)的預(yù)測
(6a)對塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素,根據(jù)步驟(5)中已建立的遞歸馬爾可夫預(yù)測模型進(jìn)行預(yù)測,得到預(yù)測值矩陣;
(6b)將塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素灰度值,與其在預(yù)測值矩陣中對應(yīng)的預(yù)測值進(jìn)行相減,得到差值矩陣r,并對差值矩陣r進(jìn)行離散余弦變換dct得到變換系數(shù)矩陣t,然后對變換系數(shù)矩陣t進(jìn)行量化、熵編碼,得到壓縮碼;
(6c)對壓縮碼進(jìn)行解碼、逆量化、逆dct變換,得到恢復(fù)后的差值矩陣r′,并將r′與差值矩陣r相加得到重建值矩陣,根據(jù)重建值矩陣對擴(kuò)展圖像數(shù)據(jù)塊中的相應(yīng)地址處像素值進(jìn)行更新;
(7)判斷是否完成所有塊數(shù)據(jù)的預(yù)測壓縮,如果是,則結(jié)束壓縮,否則,數(shù)據(jù)讀取地址跳變?yōu)橄乱粋€塊數(shù)據(jù)的起始地址,返回步驟(4)。
本發(fā)明與現(xiàn)有技術(shù)相比較,具有如下優(yōu)點(diǎn):
1.降低了時間復(fù)雜度。
本發(fā)明由于根據(jù)sobel梯度方向直方圖,預(yù)先判斷圖像塊的紋理方向,提高了選擇預(yù)測模式的速度,降低了時間復(fù)雜度。
2.提升了預(yù)測性能及壓縮性能。
本發(fā)明由于對原始灰度圖像數(shù)據(jù)進(jìn)行上下各三行,左右各三列的邊界擴(kuò)展,得到大小為(m+6)×(m+6)的擴(kuò)展圖像數(shù)據(jù),并對擴(kuò)展圖像數(shù)據(jù)以大小為(n+3)×(n+3)塊為單位進(jìn)行讀取,考慮了對塊數(shù)據(jù)的左邊三列上邊三行的參考像素重建值的讀取,克服了現(xiàn)有技術(shù)簡單地對圖像分塊導(dǎo)致的結(jié)果不精確的問題,減少了預(yù)測殘差,提升了預(yù)測性能;同時由于本發(fā)明中將基于sobel梯度直方圖的方法與遞歸馬爾可夫預(yù)測模型相結(jié)合,同一個塊數(shù)據(jù)中的所有像素的預(yù)測參照同一組權(quán)值系數(shù),減少了預(yù)測系數(shù)的數(shù)目,能夠更好的適應(yīng)圖像局部紋理特性,得到更為精準(zhǔn)的像素預(yù)測值,減少了預(yù)測差值,進(jìn)一步提升了壓縮性能。
附圖說明
圖1是本發(fā)明的實(shí)現(xiàn)流程圖;
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式作進(jìn)一步的詳細(xì)說明,實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
參照圖1本發(fā)明的實(shí)現(xiàn)步驟如下:
步驟一,讀入原始灰度圖像數(shù)據(jù)。
從自然圖像集中讀入一幅大小為m×m、后綴為.raw格式的原始灰度圖像,其中,m表示原始灰度圖像的寬度和高度,×表示相乘操作;
步驟二,對原始灰度圖像數(shù)據(jù)進(jìn)行紋理方向判斷。
2.1)對步驟一中的原始灰度圖像進(jìn)行上下各一行,左右各一列的邊界擴(kuò)展,得到大小為(m+2)×(m+2)的擴(kuò)展圖像,其中上下各一行,左右各一列的邊界擴(kuò)展,是指以原始灰度圖像的邊緣像素點(diǎn)為中心,對擴(kuò)展圖像數(shù)據(jù)中的上下各一行,左右各一列像素點(diǎn)進(jìn)行鏡像賦值;
2.2)按照由左至右,由上至下的順序,利用sobel梯度算子對擴(kuò)展圖像的不包括邊界擴(kuò)展的各個像素點(diǎn)的梯度方向角進(jìn)行計(jì)算:
2.2a)選取sobel梯度算子模板矩陣如下:
其中sx為水平方向梯度算子,sy為豎直方向梯度算子;
2.2b)將sx與當(dāng)前像素點(diǎn)的3×3鄰域進(jìn)行卷積,得到水平方向梯度gx,并將sy與當(dāng)前像素點(diǎn)的3×3鄰域進(jìn)行卷積,得到豎直方向梯度gy;
2.2c)根據(jù)步驟(2.2b)的結(jié)果,計(jì)算當(dāng)前像素點(diǎn)的梯度方向角θ(x,y):
2.3)對各個像素點(diǎn)的梯度方向角進(jìn)行統(tǒng)計(jì),得到原始灰度圖像的梯度方向角矩陣g;
2.4)將梯度方向角矩陣g均勻分成大小為n×n的塊矩陣,讀取這些塊矩陣,并將讀取次數(shù)k初始化為1,其中,n表示塊矩陣行數(shù)和列數(shù),取值為4或8;
2.5)統(tǒng)計(jì)第k個塊矩陣的梯度方向直方圖,得到梯度方向直方圖峰值對應(yīng)的角度
2.6)判斷是否完成所有原始灰度圖像數(shù)據(jù)塊的紋理方向判斷,如果是,則執(zhí)行步驟三,否則,k自增1,返回步驟(2.5)。
通過上述步驟一和步驟二,即可完成對原始灰度圖像數(shù)據(jù)進(jìn)行紋理方向判斷,以下步驟將開始對灰度圖像進(jìn)行預(yù)測壓縮:
步驟三,擴(kuò)展原始灰度圖像數(shù)據(jù)。
對步驟一中的原始灰度圖像數(shù)據(jù)進(jìn)行上下各三行,左右各三列的邊界擴(kuò)展,得到大小為(m+6)×(m+6)的擴(kuò)展圖像數(shù)據(jù),并將數(shù)據(jù)讀取地址初始化為擴(kuò)展圖像數(shù)據(jù)的地址起始位置,其中上下各三行,左右各三列的邊界擴(kuò)展,是指以原始灰度圖像的邊緣像素點(diǎn)為中心,對擴(kuò)展圖像數(shù)據(jù)中的上下各三行,左右各三列像素點(diǎn)進(jìn)行鏡像賦值;
步驟四,從數(shù)據(jù)讀取地址開始,對擴(kuò)展圖像數(shù)據(jù)以大小為(n+3)×(n+3)塊為單位進(jìn)行讀取。
4.1)初始化一個(n+3)×(n+3)二維矩陣來存儲塊數(shù)據(jù),并將讀取次數(shù)i初始化為0,由于對不包括上邊三行、左邊三列的塊數(shù)據(jù)中的像素的預(yù)測,需要參考鄰近的及已完成預(yù)測的塊的若干像素重建值,因此在該步驟中,多分配出3×3的矩陣單元來存儲鄰近的及已完成預(yù)測的塊的若干像素重建值;
4.2)從數(shù)據(jù)讀取地址開始,讀取n+3個數(shù)據(jù),并將這些數(shù)據(jù)賦值給二維矩陣的第一行;
4.3)將數(shù)據(jù)讀取地址增加m+6,并將i自增1;
4.4)判斷i是否等于n+3,如果是,則完成塊數(shù)據(jù)的讀取,否則,返回步驟4.2)。
步驟五,根據(jù)讀取的塊數(shù)據(jù)建立馬爾可夫預(yù)測模型。
5.1)依照步驟四得到的紋理主方向,對塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素點(diǎn),利用與該紋理方向上鄰近的若干參考像素點(diǎn)建立二維遞歸馬爾可夫預(yù)測模型如下:
u(i,j)=ρ1u1(i,j)+ρ2u2(i,j)+ρ3u3(i,j)+ρ4u4(i,j)+e(i,j),i、j=0,1,2…n
其中u(i,j)表示坐標(biāo)為(i,j)的像素點(diǎn)的預(yù)測值,u1(i,j),u2(i,j),u3(i,j),u4(i,j)分別表示四個參考像素的灰度值,ρ1,ρ2,ρ3,ρ4分別為四個參考像素的權(quán)值系數(shù),e為白噪聲;
根據(jù)設(shè)計(jì)的一組方向?yàn)V波器的方向數(shù)目l的取值不同,可選取不同位置的四個參考像素,以l=8時為例,八種紋理方向選取的四個參考像素的灰度值如下:
在水平0度方向:
u1(i,j)=u(i-1,j)
u2(i,j)=u(i-2,j)
u3(i,j)=u(i-3,j)
u4(i,j)=u(i-2,j-1)
在逆時針與x軸正半軸成22.5度夾角的方向:
u1(i,j)=u(i,j-1)
u2(i,j)=u(i+1,j-1)
u3(i,j)=u(i+2,j-1)
u4(i,j)=u(i+2,j-2)
在逆時針與x軸正半軸成45度夾角的方向:
u1(i,j)=u(i,j-1)
u2(i,j)=u(i+1,j-1)
u3(i,j)=u(i+1,j-2)
u4(i,j)=u(i+2,j-2)
在逆時針與x軸正半軸成67.5度夾角的方向:
u1(i,j)=u(i,j-1)
u2(i,j)=u(i+1,j-1)
u3(i,j)=u(i,j-2)
u4(i,j)=u(i+1,j-2)
在逆時針與x軸正半軸成90度夾角的方向:
u1(i,j)=u(i,j-1)
u2(i,j)=u(i+1,j-1)
u3(i,j)=u(i+1,j-2)
u4(i,j)=u(i+2,j-2)
在逆時針與x軸正半軸成112.5度夾角的方向:
u1(i,j)=u(i,j-1)
u2(i,j)=u(i-1,j-1)
u3(i,j)=u(i-1,j-2)
u4(i,j)=u(i,j-2)
在逆時針與x軸正半軸成135度夾角的方向:
u1(i,j)=u(i-1,j)
u2(i,j)=u(i-1,j-1)
u3(i,j)=u(i,j-1)
u4(i,j)=u(i-2,j-2)
在逆時針與x軸正半軸成157.5度夾角的方向:
u1(i,j)=u(i-1,j)
u2(i,j)=u(i-2,j-1)
u3(i,j)=u(i-1,j-1)
u4(i,j)=u(i,j-1)
在l>8時,針對l種紋理方向分別采用二次插值法,計(jì)算在紋理方向上由近及遠(yuǎn)的四個同向像素灰度值,來作為四個參考像素的灰度值;
5.2)利用最小二乘估計(jì)的方法,對遞歸馬爾可夫預(yù)測模型中參考像素的權(quán)值系數(shù)按如下步驟進(jìn)行估計(jì):
5.2a)將塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素的預(yù)測誤差平方和e(i,j)表示如下:
e(i,j)=(u(i,j)-ρ1u1(i,j)-ρ2u2(i,j)-ρ3u3(i,j)-ρ4u4(i,j))2
其中u(i,j)表示坐標(biāo)為(i,j)的像素點(diǎn)的預(yù)測值,u1(i,j),u2(i,j),u3(i,j),u4(i,j)分別表示四個參考像素的灰度值,ρ1,ρ2,ρ3,ρ4分別為四個參考像素的權(quán)值系數(shù),i、j=1,2,…n,其中n表示塊數(shù)據(jù)中不包括上邊三行、左邊三列像素的區(qū)域的行數(shù)及列數(shù),取值為4或8;
5.2b)將塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素的預(yù)測誤差平方和e(i,j)進(jìn)行相加,得到塊數(shù)據(jù)的預(yù)測誤差平方和etotal:
其中
5.2c)根據(jù)塊數(shù)據(jù)的預(yù)測誤差平方和etotal建立方程組:
其中
5.2d)對步驟(5.2c)中的方程組進(jìn)行求解,得到參考像素權(quán)值系數(shù)向量
步驟六,對原始圖像塊數(shù)據(jù)進(jìn)行預(yù)測壓縮。
6.1)對塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素,根據(jù)步驟五中已建立的遞歸馬爾可夫預(yù)測模型進(jìn)行預(yù)測,得到預(yù)測值矩陣;
6.2)將塊數(shù)據(jù)中不包括上邊三行、左邊三列的各個像素灰度值,與其在預(yù)測值矩陣中對應(yīng)的預(yù)測值進(jìn)行相減,得到差值矩陣r,并對差值矩陣r進(jìn)行離散余弦變換dct得到變換系數(shù)矩陣t,然后對變換系數(shù)矩陣t進(jìn)行量化、熵編碼,得到壓縮碼,其中如果將量化步驟省略,可以得到無損壓縮的壓縮碼;
6.3)對壓縮碼進(jìn)行解碼、逆量化、逆dct變換,得到恢復(fù)后的差值矩陣r′,并將r′與差值矩陣r相加得到重建值矩陣,根據(jù)重建值矩陣對擴(kuò)展圖像數(shù)據(jù)塊中的相應(yīng)地址處像素值進(jìn)行更新。
步驟七,判斷是否完成所有塊數(shù)據(jù)的預(yù)測,如果是,則結(jié)束壓縮,否則,數(shù)據(jù)讀取地址跳變?yōu)橄乱粋€塊數(shù)據(jù)的起始地址,返回步驟四。
以上描述僅是本發(fā)明的一個具體實(shí)例,不構(gòu)成對本發(fā)明的任何限制,顯然對于本領(lǐng)域的專業(yè)人員來說,在了解本發(fā)明的內(nèi)容和原理后,都可能在不背離本發(fā)明原理、結(jié)構(gòu)的情況下,進(jìn)行形式和細(xì)節(jié)上的各種修正和改變,但是這些基于本發(fā)明思想的修正和改變?nèi)栽诒景l(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。