專利名稱:Jpeg2000的分辨率自適應(yīng)節(jié)點樹編碼方法
技術(shù)領(lǐng)域:
本發(fā)明屬于圖像處理技術(shù)領(lǐng)域,更進(jìn)一步涉及符合JPEG2000標(biāo)準(zhǔn)的分辨率自適應(yīng)節(jié)點樹(Tag-tree)編碼方法。本發(fā)明使用JPEG2000標(biāo)準(zhǔn)中的包含信息的Tag-tree編碼方法對任意分辨率圖像編碼。本發(fā)明可用于各種數(shù)字圖像芯片的壓縮編碼。
背景技術(shù):
JPEG2000作為新一代靜態(tài)壓縮編碼標(biāo)準(zhǔn)已被廣泛應(yīng)用到互聯(lián)網(wǎng)、圖像傳輸?shù)榷鄠€領(lǐng)域。它采用了以小波變換為主的多解析編碼方式。與目前被廣泛應(yīng)用的多級樹集合分裂算法(SPIHT)相比,這種編碼系統(tǒng)能在甚低比特率壓縮時提供良好的率失真特性和主觀視覺質(zhì)量,此外這種系統(tǒng)還具有一系列其他優(yōu)點和功能。它采用離散小波變換和率失真優(yōu)化截取內(nèi)嵌塊編碼(EBCOT)技術(shù),其中小波變換和塊編碼技術(shù)提高了圖像編碼產(chǎn)生的碼流的抗誤碼能力;而內(nèi)嵌技術(shù)為靈活的碼流控制提供了可能,即可以實現(xiàn)無損、有損圖像壓縮的兼容。在實現(xiàn)EBCOT時,各小波子帶劃分為更小的碼塊,如32X32,以碼塊為單位獨立進(jìn)行 編碼并輸出碼流。對于所有碼塊產(chǎn)生的嵌入式位流,由率控制按照率失真最優(yōu)原則分層組織,形成不同質(zhì)量的層,對每一層,按照一定的碼流格式打包,輸出壓縮碼流。一個包由包頭和包體組成,其中,包頭由碼塊包含信息的Tag-tree編碼結(jié)果及其他的截取信息編碼結(jié)果組成。Tag-tree是用等級方式來表示的一個二維非負(fù)整型序列的方法,它對序列連續(xù)處理,產(chǎn)生逐級遞減的分辨率,形成一棵樹。也就是說每個節(jié)點的值是下級對應(yīng)相鄰4個節(jié)點的最小值;對于下邊界和右邊界不足4個節(jié)點的,同樣取其最小值,形成父親節(jié)點值,直到最后一個根節(jié)點。
西安電子科技大學(xué)在其專利申請“基于JPEG2000的Tag-tree編碼方法”(專利申請?zhí)?00810151047. 2,公開號CN101360242)中公開了一種子帶任意層數(shù)下的Tag-tree編碼方法。這種方法采用先建樹后編碼的方式對葉子節(jié)點中的包含信息進(jìn)行建樹,通過簡化子父節(jié)點間的對應(yīng)關(guān)系,提高了編碼速度。但是仍然存在著不足的是,該專利只能適用于固定分辨率的圖像,而在實際應(yīng)用中,需要編碼圖像的分辨率可變。西安交通大學(xué)在其專利申請“TAGTREE編碼器的VLSI設(shè)計方法”(專利申請?zhí)?3114603. 1,公開號CN1187699C)中公開了 JPEG2000 的 TAGTREE 編碼器的 VLSI 設(shè)計方法。這種方法根據(jù)無效位平面和包含信息兩種TAGTREE的不同特點,設(shè)計了兩個不同的TAGTREE編碼器,可對無效位平面和包含信息同時進(jìn)行編碼。但該方法仍然存在的不足是,該專利在編碼時采用標(biāo)記節(jié)點是否已經(jīng)編碼,用逐級比較的方式產(chǎn)生編碼碼流,這會花費很大的時鐘資源。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的不足,提出一種基于JPEG2000標(biāo)準(zhǔn)的分辨率自適應(yīng)Tag-tree編碼方法。本發(fā)明根據(jù)用戶輸入的小波變換級數(shù)把圖像劃分成多個子帶,采用循環(huán)的方式對每一個子帶先建樹后編碼。本發(fā)明不僅可對一定范圍內(nèi)任意分辨率的圖像進(jìn)行編碼,而且也簡化了地址計算方法,使得Tag-tree編碼方法的適用范圍更廣,效率更高。為實現(xiàn)上述目的,本發(fā)明的方法包括如下步驟(I)用戶根據(jù)工程需要將編碼參數(shù)輸入給輸出節(jié)點信息模塊。(2)輸出節(jié)點信息2a)判斷輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度是否超過工程允許的最大圖像寬度,如果超過,則將圖像中的節(jié)點寬度和高度分別定為64個像素點和16個像素點;否則,將圖像中的節(jié)點寬度和高度均定為32個像素點;2b)將輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度和圖像高度分別取1/2組成第一 級子帶的寬度和高度;2c)判斷子帶的級數(shù)是否等于1,如果等于,則將第一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度;否則,將步驟2f)寄存的下一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度;2d)將當(dāng)前級子帶的寬度和高度分別除以圖像中的節(jié)點寬度和高度,得到當(dāng)前級子帶的節(jié)點行數(shù)和列數(shù),將當(dāng)前級子帶的節(jié)點行數(shù)乘以節(jié)點列數(shù)得到當(dāng)前級子帶的節(jié)點總數(shù),輸出當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)和節(jié)點總數(shù);2e)判斷子帶的級數(shù)是否等于輸出節(jié)點信息模塊中編碼參數(shù)的小波變換級數(shù),如果等于,則執(zhí)行步驟(3);否則,執(zhí)行步驟2f);2f)將當(dāng)前級子帶的寬度和高度分別取1/2組成下一級子帶的寬度和高度,將下一級子帶的寬度和高度輸入寄存器寄存;2g)將子帶的級數(shù)加I,返回步驟2c)。(3)控制循環(huán)3a)對步驟2d)輸出的當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)中的最大值取對數(shù),得到當(dāng)前級子帶建樹的最高級數(shù);3b)將節(jié)點的級數(shù)賦初值I ;3c)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù);否則,將步驟3d)寄存的下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù);3d)將當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)向右移一位,得到下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù),將得到的下一級的節(jié)點行數(shù)、節(jié)點列數(shù)輸入寄存器寄存;3e)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶之前的所有子帶的節(jié)點總數(shù)累加,得到當(dāng)前級節(jié)點的首地址;下一級節(jié)點的首地址為零;否則,當(dāng)前級節(jié)點的首地址和下一級節(jié)點的首地址均為零;3f)輸出當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)和首地址,執(zhí)行步驟
(5);3g)將節(jié)點的級數(shù)加I,返回步驟3c)。(4)寄存當(dāng)前子帶各級節(jié)點信息將步驟(3)中的的當(dāng)前級子帶建樹最高級數(shù),每一級節(jié)點的行數(shù)和列數(shù)輸入寄存器寄存。
(5)判斷當(dāng)前子帶建樹是否完成判斷步驟(3)中節(jié)點的級數(shù)是否等于步驟3a)中得到的最高級數(shù),如果相等,則執(zhí)行步驟⑵;否則,執(zhí)行步驟(6)。(6)當(dāng)前級建樹6a)將步驟3f)輸出的當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點列數(shù)、首地址以及當(dāng)前需要建樹的節(jié)點的行坐標(biāo)、列坐標(biāo)通過地址計算公式得到當(dāng)前需要建樹的相鄰2x2個節(jié)點的存儲地址和下一級節(jié)點的存儲地址;6b)比較當(dāng)前需要建樹的相鄰2x2節(jié)點值的大小,從中選取一個最小值;6c)將最小值寫入下一級節(jié)點的存儲器;6d)保持當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值不變,將列坐標(biāo)值加2 ;
6e)判斷當(dāng)前需要建樹的節(jié)點的列坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的列數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值加2,列坐標(biāo)值清零;否則,返回步驟6a);6f)判斷當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的行數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值、列坐標(biāo)值均清零,返回步驟3g);否貝U,返回步驟6a)。(7)當(dāng)前子帶編碼7a)將當(dāng)前級子帶節(jié)點作為葉子節(jié)點,判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的冪次整除,如果是,則將冪次值加1,得到葉子節(jié)點開始編碼的級數(shù);否則,執(zhí)行步驟 7b);7b)將冪次值減1,返回步驟7a),繼續(xù)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的冪次整除;7c)將步驟(4)寄存的數(shù)據(jù)通過地址計算公式得到葉子節(jié)點的存儲地址和對應(yīng)的各級父節(jié)點的存儲地址;7d)將葉子節(jié)點的值和葉子節(jié)點對應(yīng)的各級父節(jié)點的值從步驟(5)建立的Tag-tree節(jié)點樹中取出,從最高級節(jié)點開始依次向低級節(jié)點進(jìn)行差值編碼,每編碼一位,編碼結(jié)果有效比特位數(shù)加I ;7e)將編碼結(jié)果和編碼結(jié)果有效比特位數(shù)輸入寄存器寄存;If)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否分別等于葉子節(jié)點的行數(shù)、列數(shù),如果是,當(dāng)前子帶編碼完成,返回步驟(3)進(jìn)行下一個子帶的建樹和編碼;否則,執(zhí)行步驟7g);7g)判斷葉子節(jié)點的列坐標(biāo)值是否等于葉子節(jié)點的列數(shù),如果是,葉子節(jié)點的行坐標(biāo)值加1,列坐標(biāo)值清零;否則,葉子節(jié)點的行坐標(biāo)值不變,列坐標(biāo)值加I ;7h)返回步驟7a),對下一個葉子節(jié)點進(jìn)行編碼。(8)存儲分離后的編碼結(jié)果8a)對編碼結(jié)果從高位到低位依次進(jìn)行遍歷,以第一個為0值的比特位作為分界,將第一個0比特位和之前的比特位個數(shù)作為第0層的分離結(jié)果,將編碼結(jié)果有效比特位數(shù)與第0層分離結(jié)果的差值作為第I層的分離結(jié)果;8b)將編碼結(jié)果和分離結(jié)果輸入寄存器寄存。
本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點第一,本發(fā)明適用一定規(guī)模內(nèi)任意分辨率圖像的Tag-tree編碼,克服了現(xiàn)有技術(shù)中只能適用固定分辨率圖像的Tag-tree編碼方法,使得本發(fā)明的適用范圍更廣。第二,本發(fā)明對JPEG2000壓縮標(biāo)準(zhǔn)中設(shè)定的分層數(shù)沒有限制,可以實現(xiàn)任意層數(shù)下的Tag-tree編碼,使得本發(fā)明的適用范圍更廣。第三,本發(fā)明每個子帶只需計算葉子節(jié)點的首地址,其余節(jié)點的首地址均為零,克服了現(xiàn)有技術(shù)中地址計算方法過于復(fù)雜的缺點,使得本發(fā)明的編碼速度比現(xiàn)有技術(shù)更快。第四,本發(fā)明由葉子節(jié)點中需要編碼的節(jié)點坐標(biāo)值計算開始編碼的級數(shù),從而取出和此節(jié)點編碼相關(guān)的節(jié)點值,克服了現(xiàn)有技術(shù)中采用標(biāo)記節(jié)點是否已經(jīng)編碼而浪費時鐘資源的缺點,使得本發(fā)明的編碼效率更高。
圖I為本發(fā)明的流程圖。
具體實施例方式下面結(jié)合附圖I對本發(fā)明的實現(xiàn)步驟做詳細(xì)的描述。步驟1,用戶根據(jù)工程需要將編碼參數(shù)輸入給輸出節(jié)點信息模塊,編碼參數(shù)包括小波變換級數(shù)、圖像寬度、圖像高度。步驟2,輸出節(jié)點信息2a)判斷輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度是否超過工程允許的最大圖像寬度2048 4096個像素點,如果超過,則將圖像中的節(jié)點寬度和高度分別定為64個像素點和16個像素點;否則,將圖像中的節(jié)點寬度和高度均定為32個像素點。本發(fā)明在具體實施例中,考慮到存儲器容量的大小,將最大圖像寬度設(shè)定為2048 4096個像素點。在實際應(yīng)用中,本發(fā)明對圖像的寬度沒有限定。對于圖像中節(jié)點的寬度和高度,可根據(jù)JPEG2000中規(guī)定的節(jié)點寬度和高度自由選擇,本發(fā)明在具體實施例中,為了節(jié)約存儲器資源,根據(jù)已經(jīng)設(shè)定的最大圖像寬度選擇了其中兩種。2b)將輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度和圖像高度分別取1/2組成第一級子帶的寬度和高度。2c)判斷子帶的級數(shù)是否等于1,如果等于,則將第一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度;否則,將步驟2f)寄存的下一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度。2d)將當(dāng)前級子帶的寬度和高度分別除以圖像中的節(jié)點寬度和高度,得到當(dāng)前級子帶的節(jié)點行數(shù)和列數(shù),將當(dāng)前級子帶的節(jié)點行數(shù)乘以節(jié)點列數(shù)得到當(dāng)前級子帶的節(jié)點總數(shù),輸出當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)和節(jié)點總數(shù)。2e)判斷子帶的級數(shù)是否等于輸出節(jié)點信息模塊中編碼參數(shù)的小波變換級數(shù),如果等于,則執(zhí)行步驟(3);否則,執(zhí)行步驟2f)。2f)將當(dāng)前級子帶的寬度和高度分別取1/2組成下一級子帶的寬度和高度,將下一級子帶的寬度和高度輸入寄存器寄存。如果圖像寬度和高度為奇數(shù),則在對圖像寬度和高度做1/2處理時,低頻子帶的數(shù)值比高頻子帶的數(shù)值大I。對子帶的寬度和高度分別除以圖像中節(jié)點的寬度和高度得到的結(jié)果取整。由于碼塊寬度和高度均為2的冪次,所以除法可用移位實現(xiàn),同樣對圖像的寬度和高度取1/2處理時也用移位實現(xiàn)。2g)將子帶的級數(shù)加I,返回步驟2c)。步驟3,控制循環(huán)3a)對步驟2d)輸出的當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)中的最大值取對數(shù),得到當(dāng)前級子帶建樹的最高級數(shù)。具體方法如下當(dāng)2n_1+1 ( Iiiaxlr1, cj ( 2n(N彡2)時,當(dāng)前子帶節(jié)點樹最高級數(shù)L = N+1 ;當(dāng)I彡Iiiaxlr1, cj彡2時,當(dāng)前子帶節(jié)點樹最高級數(shù)L = 2。
3b)將節(jié)點的級數(shù)賦初值I。3c)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù);否則,將步驟3d)寄存的下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)。3d)將當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)向右移一位,得到下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù),將得到的下一級的節(jié)點行數(shù)、節(jié)點列數(shù)輸入寄存器寄存。具體方法如下當(dāng)rx 為奇數(shù),r1+1 = (^+1)/2,當(dāng) rx 為偶數(shù),r1+1 = 1^/2,其中 I 彡 I 彡 L-1 ;當(dāng)C1 為奇數(shù),c1+1 = (¢!+1)/2,當(dāng) C1 為偶數(shù),c1+1 = q/2,其中 I 彡 I 彡 L-1 ;其中,rx, C1分別為當(dāng)前級節(jié)點的節(jié)點行數(shù)和列數(shù),r1+1, c1+1分別為下一級節(jié)點的節(jié)點行數(shù)和列數(shù)。3e)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶之前的所有子帶的節(jié)點總數(shù)累加,得到當(dāng)前級節(jié)點的首地址;下一級節(jié)點的首地址為零;否則,當(dāng)前級節(jié)點的首地址和下一級節(jié)點的首地址均為零。3f)輸出當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)和首地址,執(zhí)行步驟
(5)。3g)將節(jié)點的級數(shù)加I,返回步驟3c)。步驟4,寄存當(dāng)前子帶各級節(jié)點信息將步驟(3)中的的當(dāng)前級子帶建樹最高級數(shù),每一級節(jié)點的行數(shù)和列數(shù)輸入寄存器寄存。當(dāng)所有子帶建樹完成后,各級節(jié)點的信息也就完全寄存,這些信息傳遞給當(dāng)前子帶編碼模塊,在進(jìn)行編碼時不必再次計算這些信息,即節(jié)約了資源又提高了速度。而且,每一級建樹都調(diào)用這個模塊,實現(xiàn)了功能模塊復(fù)用,節(jié)約了資源。步驟5,判斷當(dāng)前子帶建樹是否完成判斷步驟(3)中節(jié)點的級數(shù)是否等于步驟3a)中得到的最高級數(shù),如果相等,則執(zhí)行步驟⑵;否則,執(zhí)行步驟(6)。步驟6,當(dāng)前級建樹6a)將步驟3f)輸出的當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點列數(shù)、首地址以及當(dāng)前需要建樹的節(jié)點的行坐標(biāo)、列坐標(biāo)通過地址計算公式得到當(dāng)前需要建樹的相鄰2x2個節(jié)點的存儲地址和下一級節(jié)點的存儲地址。具體計算公式如下坐標(biāo)為(i, j)的節(jié)點存儲地址為當(dāng)前級節(jié)點首地址+iXcfj ;坐標(biāo)為(i,j+1)的節(jié)點存儲地址為當(dāng)前級節(jié)點首地址+iXCl+j+l ;
坐標(biāo)為(i + 1,j)的節(jié)點存儲地址為當(dāng)前級節(jié)點首地址+iXCl+Cl+j ;坐標(biāo)為(i + 1,j + 1)的節(jié)點存儲地址為當(dāng)前級節(jié)點首地址+iXCl+Cl+j + l ;對應(yīng)下一級節(jié)點存儲地址為下一級節(jié)點首地址+ (i/2) Xc1+1+j/2。因為建樹過程中將子帶的各級父節(jié)點單獨存儲在不同的存儲器中,所以各級父節(jié)點的節(jié)點首地址都為零。這樣有利于簡化地址計算過程,提高Tag-tree編碼效率。6b)比較當(dāng)前需要建樹的相鄰2x2節(jié)點值的大小,從中選取一個最小值??紤]到編碼方法適用于各種大小的子帶,子帶的下邊界和右邊界可能存在相鄰葉子節(jié)點不足4個的情況,增加判斷條件會增加資源占用。所以對于下邊界和右邊界相鄰葉子節(jié)點不足4個的情況,補充若干個節(jié)點使得相鄰葉子節(jié)點的個數(shù)滿足4個,補充節(jié)點的值與坐標(biāo)為(i,j)節(jié)點的值相同。
6c)將最小值寫入下一級節(jié)點的存儲器。6d)保持當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值不變,將列坐標(biāo)值加2。6e)判斷當(dāng)前需要建樹的節(jié)點的列坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的列數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值加2,列坐標(biāo)值清零;否則,返回步驟6a)。當(dāng)j的值大于等于C1時,i = i+2, j = 0 ;當(dāng)j 的值小于 C1 時,i = i, j = j = 2 ;6f)判斷當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的行數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值、列坐標(biāo)值均清零,返回步驟3g);否貝U,返回步驟6a)。步驟7,當(dāng)前子帶編碼7a)將當(dāng)前級子帶節(jié)點作為葉子節(jié)點,判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的冪次整除,如果是,則將冪次值加1,得到葉子節(jié)點開始編碼的級數(shù);否則,執(zhí)行步驟 7b)。7b)將冪次值減1,返回步驟7a),繼續(xù)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的冪次整除。如果i,j同時可以被2N整除,則葉子節(jié)點開始編碼的級數(shù)K = N+1。其中,N的初始值為L-I。編碼所要取的節(jié)點按如下規(guī)則進(jìn)行如果K彡2,則取得從Pk直到P2共K-I個父節(jié)點的值和葉節(jié)點P1的值;如果K = 1,且當(dāng)前子帶第I級節(jié)點數(shù)目大于等于2,則取得父親節(jié)點P2的值和葉子節(jié)點P1的值;如果K = 1,且當(dāng)前子帶第I級僅有一個節(jié)點,則取得葉子節(jié)點P1的值。因為當(dāng)前子帶首節(jié)點編碼時需要與初始值進(jìn)行差值編碼,所以對于首節(jié)點編碼時,設(shè)置PK+1 = 0 ;當(dāng)前子帶其余節(jié)點編碼時需要與上一級已編碼父節(jié)點進(jìn)行差值編碼,所以編碼時需要取得上一級節(jié)點Pk+1。7c)將步驟(4)寄存的數(shù)據(jù)通過地址計算公式得到葉子節(jié)點的存儲地址和對應(yīng)的各級父節(jié)點的存儲地址。取得步驟(4)寄存的每一個子帶各級節(jié)點的首地址、列數(shù),再由當(dāng)前節(jié)點的行坐標(biāo)值和列坐標(biāo)值,根據(jù)地址計算公式得到每一個節(jié)點的存儲地址。地址計算公式如下D = d+i X c^j其中,D為節(jié)點的存儲地址,d為節(jié)點的首地址,i為節(jié)點的行坐標(biāo)值,C1為節(jié)點列數(shù),j為節(jié)點的列坐標(biāo)值。 7d)將葉子節(jié)點的值和葉子節(jié)點對應(yīng)的各級父節(jié)點的值從步驟(5)建立的Tag-tree節(jié)點樹中取出,從最高級節(jié)點開始依次向低級節(jié)點進(jìn)行差值編碼。根據(jù)步驟7e)得到的節(jié)點地址,在編碼狀態(tài)機中采用邊取值邊編碼的方式進(jìn)行編碼,從需要編碼的最高級節(jié)點開始依次向下進(jìn)行差值編碼,即兩個相鄰級節(jié)點的差值個0比特和I個I比特。每編碼一位一位,編碼有效比特位數(shù)值加1,直至編碼到節(jié)點值為層數(shù)值的節(jié)點或者葉子節(jié)點。7e)將編碼結(jié)果和編碼結(jié)果有效比特位數(shù)輸入寄存器寄存。7f)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否分別等于葉子節(jié)點的行數(shù)、列數(shù),如果是,當(dāng)前子帶編碼完成,返回步驟(3)進(jìn)行下一個子帶的建樹和編碼;否則,執(zhí)行步驟7g)。當(dāng)i = !T1且j = C1時,當(dāng)前子帶編碼完成,返回步驟3。7g)判斷葉子節(jié)點的列坐標(biāo)值是否等于葉子節(jié)點的列數(shù),如果是,葉子節(jié)點的行坐標(biāo)值加1,列坐標(biāo)值清零;否則,葉子節(jié)點的行坐標(biāo)值不變,列坐標(biāo)值加I。當(dāng)j值等于葉子節(jié)點列數(shù)目,i = i+1,j = 0 ;當(dāng)j值小于葉子節(jié)點列數(shù)目,i = i,j = j + 1。7h)返回步驟7a),對下一個葉子節(jié)點進(jìn)行編碼。步驟8,存儲分離后的編碼結(jié)果對編碼結(jié)果從高位到低位依次進(jìn)行遍歷,以第一個為0值的比特位作為分界,將第一個0比特位和之前的比特位個數(shù)作為第0層的分離結(jié)果,將編碼結(jié)果有效比特位數(shù)與第0層分離結(jié)果的差值作為第I層的分離結(jié)果。將編碼結(jié)果和分離結(jié)果輸入寄存器寄存。例如編碼結(jié)果為00111011,有效比特位數(shù)為6,則索引位置為從低到高數(shù)第6個比特處,直到遇到第一個0比特,則第0層的分離結(jié)果為4,第二層的分離結(jié)果為2,最終輸出編碼結(jié)果為11101100,分離結(jié)果為100010。其中,前三個比特對應(yīng)第0層,后三個比特對應(yīng)第I層。如果編碼結(jié)果為00011111,有效比特位數(shù)為6,則索引位置為從低到高數(shù)第6個比特處,分離結(jié)果為第0層為1,第二層為5,最終輸出編碼結(jié)果為01111100,分離結(jié)果為001101。本發(fā)明的效果可以通過仿真與現(xiàn)有技術(shù)比較進(jìn)一步說明。本發(fā)明的仿真是在Xilinx ISE 9. I集成開發(fā)軟件環(huán)境中對規(guī)模4x4的Tag-tree采用Verilog HDL語言實現(xiàn)。綜合結(jié)果和仿真結(jié)果如表I、表2所示。表I本發(fā)明與現(xiàn)有技術(shù)的綜合比較
權(quán)利要求
1.一種JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,包括如下步驟 (1)用戶根據(jù)工程需要將編碼參數(shù)輸入給輸出節(jié)點信息模塊; (2)輸出節(jié)點信息 .2a)判斷輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度是否超過工程允許的最大圖像寬度,如果超過,則將圖像中的節(jié)點寬度和高度分別定為64個像素點和16個像素點;否則,將圖像中的節(jié)點寬度和高度均定為32個像素點; .2b)將輸出節(jié)點信息模塊中編碼參數(shù)的圖像寬度和圖像高度分別取1/2組成第一級子帶的寬度和高度; .2c)判斷子帶的級數(shù)是否等于1,如果等于,則將第一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度;否則,將步驟2f)寄存的下一級子帶的寬度和高度作為當(dāng)前級子帶的寬度和高度; .2d)將當(dāng)前級子帶的寬度和高度分別除以圖像中的節(jié)點寬度和高度,得到當(dāng)前級子帶的節(jié)點行數(shù)和列數(shù),將當(dāng)前級子帶的節(jié)點行數(shù)乘以節(jié)點列數(shù)得到當(dāng)前級子帶的節(jié)點總數(shù),輸出當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)和節(jié)點總數(shù); .2e)判斷子帶的級數(shù)是否等于輸出節(jié)點信息模塊中編碼參數(shù)的小波變換級數(shù),如果等于,則執(zhí)行步驟(3);否則,執(zhí)行步驟2f); .2f)將當(dāng)前級子帶的寬度和高度分別取1/2組成下一級子帶的寬度和高度,將下一級子帶的寬度和高度輸入寄存器寄存; . 2g)將子帶的級數(shù)加1,返回步驟2c); (3)控制循環(huán) .3a)對步驟2d)輸出的當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)中的最大值取對數(shù),得到當(dāng)前級子帶建樹的最高級數(shù); .3b)將節(jié)點的級數(shù)賦初值I ; .3c)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù);否則,將步驟3d)寄存的下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)作為當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù); .3d)將當(dāng)前級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)向右移一位,得到下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù),將得到的下一級的節(jié)點行數(shù)、節(jié)點列數(shù)輸入寄存器寄存; .3e)判斷節(jié)點的級數(shù)是否等于1,如果等于,則將當(dāng)前級子帶之前的所有子帶的節(jié)點總數(shù)累加,得到當(dāng)前級節(jié)點的首地址;下一級節(jié)點的首地址為零;否則,當(dāng)前級節(jié)點的首地址和下一級節(jié)點的首地址均為零; .3f)輸出當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點行數(shù)、節(jié)點列數(shù)和首地址,執(zhí)行步驟(5); .3g)將節(jié)點的級數(shù)加1,返回步驟3c); (4)寄存當(dāng)前子帶各級節(jié)點信息將步驟(3)中的的當(dāng)前級子帶建樹最高級數(shù),每一級節(jié)點的行數(shù)和列數(shù)輸入寄存器寄存; (5)判斷當(dāng)前子帶建樹是否完成 判斷步驟(3)中節(jié)點的級數(shù)是否等于步驟3a)中得到的最高級數(shù),如果相等,則執(zhí)行步驟(7);否則,執(zhí)行步驟(6); (6)當(dāng)前級建樹6a)將步驟3f)輸出的當(dāng)前級節(jié)點和下一級節(jié)點的節(jié)點列數(shù)、首地址以及當(dāng)前需要建樹的節(jié)點的行坐標(biāo)、列坐標(biāo)通過地址計算公式得到當(dāng)前需要建樹的相鄰2x2個節(jié)點的存儲地址和下一級節(jié)點的存儲地址; 6b)比較當(dāng)前需要建樹的相鄰2x2節(jié)點值的大小,從中選取一個最小值; 6c)將最小值寫入下一級節(jié)點的存儲器; 6d)保持當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值不變,將列坐標(biāo)值加2 ;6e)判斷當(dāng)前需要建樹的節(jié)點的列坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的列數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值加2,列坐標(biāo)值清零;否則,返回步驟6a);6f)判斷當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值是否大于等于步驟3f)輸出的當(dāng)前級節(jié)點的行數(shù),如果是,將當(dāng)前需要建樹的節(jié)點的行坐標(biāo)值、列坐標(biāo)值均清零,返回步驟3g);否則,返回步驟6a); (7)當(dāng)前子帶編碼 7a)將當(dāng)前級子帶節(jié)點作為葉子節(jié)點,判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的冪次整除,如果是,則將冪次值加1,得到葉子節(jié)點開始編碼的級數(shù);否則,執(zhí)行步驟7b); 7b)將冪次值減1,返回步驟7a),繼續(xù)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否同時被2的幕次整除; 7c)將步驟(4)寄存的數(shù)據(jù)通過地址計算公式得到葉子節(jié)點的存儲地址和對應(yīng)的各級父節(jié)點的存儲地址; 7d)將葉子節(jié)點的值和葉子節(jié)點對應(yīng)的各級父節(jié)點的值從步驟(5)建立的Tag-tree節(jié)點樹中取出,從最高級節(jié)點開始依次向低級節(jié)點進(jìn)行差值編碼,每編碼一位,編碼結(jié)果有效比特位數(shù)加I ; 7e)將編碼結(jié)果和編碼結(jié)果有效比特位數(shù)輸入寄存器寄存; If)判斷葉子節(jié)點的行坐標(biāo)值、列坐標(biāo)值是否分別等于葉子節(jié)點的行數(shù)、列數(shù),如果是,當(dāng)前子帶編碼完成,返回步驟(3)進(jìn)行下一個子帶的建樹和編碼;否則,執(zhí)行步驟7g); 7g)判斷葉子節(jié)點的列坐標(biāo)值是否等于葉子節(jié)點的列數(shù),如果是,葉子節(jié)點的行坐標(biāo)值加1,列坐標(biāo)值清零;否則,葉子節(jié)點的行坐標(biāo)值不變,列坐標(biāo)值加I ; 7h)返回步驟7a),對下一個葉子節(jié)點進(jìn)行編碼; (8)存儲分離后的編碼結(jié)果 8a)對編碼結(jié)果從高位到低位依次進(jìn)行遍歷,以第一個為O值的比特位作為分界,將第一個O比特位和之前的比特位個數(shù)作為第O層的分離結(jié)果,將編碼結(jié)果有效比特位數(shù)與第O層分離結(jié)果的差值作為第I層的分離結(jié)果; Sb)將編碼結(jié)果和分離結(jié)果輸入寄存器寄存。
2.根據(jù)權(quán)利要求I所述的JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,其特征在于步驟⑴中所述的編碼參數(shù)包括小波變換級數(shù)、圖像寬度、圖像高度。
3.根據(jù)權(quán)利要求I所述的JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,其特征在于步驟(I)中所述的工程允許的最大圖像寬度為2048 4096個像素點。
4.根據(jù)權(quán)利要求I所述的JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,其特征在于步驟5a),步驟7c)中的地址計算公式為D = d+i X C1+j 其中,D為節(jié)點的存儲地址,d為節(jié)點的首地址,i為節(jié)點的行坐標(biāo)值,C1為節(jié)點列數(shù),j為節(jié)點的列坐標(biāo)值。
5.根據(jù)權(quán)利要求I所述的JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,其特征在于步驟6a)中所述的下一級存儲器的首地址為零。
6.根據(jù)權(quán)利要求I所述的JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,其特征在于步驟7a)中所述的冪次的初始值為步驟3a)得到的當(dāng)前級子帶建樹的最高級數(shù)與I的差值。
全文摘要
本發(fā)明公開了一種JPEG2000的分辨率自適應(yīng)節(jié)點樹編碼方法,具體步驟包括(1)輸入編碼參數(shù);(2)輸出碼塊信息;(3)控制循環(huán);(4)寄存當(dāng)前子帶各級節(jié)點信息;(5)判斷當(dāng)前子帶建樹是否完成;(6)當(dāng)前級建樹;(7)當(dāng)前子帶編碼;(8)存儲分離后的編碼結(jié)果。本發(fā)明自適應(yīng)一定規(guī)模內(nèi)任意分辨率圖像的壓縮編碼,在建樹過程中使用各級父節(jié)點單獨存儲的方式,在編碼時使用由葉子節(jié)點的坐標(biāo)值計算開始編碼的級數(shù),簡化了地址計算方法,克服了標(biāo)記節(jié)點是否編碼而浪費時鐘資源的缺點,使得編碼效率得到了提高。本發(fā)明可用于各種數(shù)字圖像芯片的壓縮編碼。
文檔編號H04N7/26GK102724508SQ20121020238
公開日2012年10月10日 申請日期2012年6月7日 優(yōu)先權(quán)日2012年6月7日
發(fā)明者劉凱, 姚銀琪, 宋長賀, 李云松, 李志彥, 王柯儼, 雷杰 申請人:西安電子科技大學(xué)