圖像編碼、解碼的方法和裝置與流程
2023-06-17 16:15:56 4

本發明屬於圖像處理領域,具體地,涉及一種圖像編碼、解碼的方法和裝置。
背景技術:
許多工程技術領域都需要對圖像數據進行存儲或傳輸。但是,未經編碼的圖像往往存在著巨大的數據冗餘。為了節省信息的存儲空間和提高信息的傳輸效率,必須對大量的實際數據進行編碼。
目前,靜止圖像編碼效果一般由三方面決定,即:圖像變換、係數量化和編碼。其中編碼方式決定了最終圖像的編碼率。根據編碼後的圖像能否完全恢復將圖像編碼劃分為兩種:有損編碼以及無損編碼。有損編碼編碼了熵,信息量會減少,可以得到較高編碼比,但損失的信息量不能再恢復,只能用於允許一定程度失真的情況,不適用於圖像的高精度編碼、解碼。無損編碼是利用數據的統計冗餘進行編碼,可完全恢復原始數據而不引起任何失真,但編碼率是受到數據統計冗餘度的理論限制,一般為2:1到5:1,適用於圖像恢復精度要求高、編碼比要求較低的情況。霍夫曼編碼、算術編碼、遊程編碼是現今應用最為普遍的無損編碼方式。其中霍夫曼編碼和算術編碼需要首先獲知待編碼數據的統計特性,需要對圖像進行兩遍掃描,編碼效率較低;遊程編碼通過串長加像素的方式替代連續出現的像素,編碼效率較高,但編碼率受數據的連續重複程度影響較大。
針對相關圖像編碼、解碼技術中無法同時滿足複雜度低、編碼率高、恢復精度高的問題,尚需有效解決的方案。
技術實現要素:
為解決相關圖像編碼、解碼技術中無法同時滿足複雜度低、編碼率高、恢復精度高的問題,本發明提供了一種圖像編碼、解碼的方法和裝置,首先利用串長加像素的方式替代連續出現的像素,然後將初次編碼結果中的連續孤立像素再次編碼,從而獲得高編碼率的無損編碼結果。
根據本發明的一個方面,提供了一種圖像的編碼方法,所述方法包括以下步驟:
S1、記錄圖像各維度上的像素個數;
S2、利用單個像素以及串長代替具有相同值的重複像素;
S3、根據串長判斷是否為重複次數為一且連續出現的孤立像素;
S4、若是,只存儲具體孤立像素,並累計連續孤立像素的個數;
S5、若不是,保留該部分的串長以及像素值,並存儲累計的孤立像素個數;
優選地,所述S4具體包括以下步驟:
S410.在孤立像素存儲區域存儲連續出現的孤立像素;
S420.累計孤立像素連續出現的次數,記為num_single。
優選地,所述S5具體包括以下步驟:
S510.存儲該部分的初次編碼結果;
S520.根據串長判斷前一像素是否為孤立像素;
S530.若是,則存儲num_single,並重置num_single=0;
S540.若不是,則存儲num_single=0。
根據本發明的另一個方面,還提供了一種使用所述編碼方法進行編碼後的解碼方法,所述方法包括以下步驟:
S6:將孤立像素解碼成串長加像素的格式,並根據累計連續個數,讀取對應個數的孤立像素,同重複像素交替組合;
S7:根據串長以及像素,恢復像素重複的格式;
S8:根據記錄的圖像各維度上的像素個數,恢復像素的原始分布格式。
優選地,所述S6具體包括以下步驟:
S610.讀取孤立像素長度;
S620.判斷讀取個數是否小於孤立像素總數;
S630.若是,按照讀取的孤立像素個數從孤立像素存儲區域中提取相應個數的像素,並在各孤立像素前補充「1」,表示該孤立像素的串長;
S640.若是,讀取重複像素存儲區域的單個像素值以及其串長;
S650.若不是,存儲圖像初次解碼結果。
本發明的另一個方面,還提供了一種圖像的編碼裝置,所述裝置包括依次連接的圖像大小記錄模塊、初次編碼模塊、孤立像素判別模塊、孤立像素存儲模塊、重複像素存儲及孤立像素個數存儲模塊,其中:
所述圖像大小記錄模塊,用於記錄圖像各維度上的像素個數;
所述初次編碼模塊,用於利用單個像素值以及串長代替具有相同值的重複像素;
所述孤立像素判別模塊,用於根據串長判斷重複次數是否為一且連續出現的孤立像素;
所述孤立像素存儲模塊,用於只存儲具體孤立像素,並累計連續孤立像素的個數;
所述重複像素存儲及孤立像素個數存儲模塊,用於保留該部分的串長以及像素值,並存儲累計的孤立像素個數。
優選地,所述孤立像素編碼模塊具體包括依次連接的孤立像素存儲模塊、孤立像素連續次數存累計模塊,其中:
所述孤立像素存儲模塊,用於在孤立像素存儲區域存儲連續出現的孤立像素;
所述孤立像素連續次數累計模塊,用於累計孤立像素連續出現的次數,記為num_single。
優選地,所述重複像素編碼及孤立像素個數存儲模塊具體包括依次連接的重複像素存儲模塊、前一串長判斷模塊、孤立像素連續次數存儲模塊、孤立像素連續次數補零模塊,其中:
所述重複像素存儲模塊,用於存儲該部分的初次編碼結果;
所述前一串長判斷模塊塊,用於根據串長判斷前一像素是否為孤立像素;
所述孤立像素連續次數存儲模塊,用於存儲num_single,並重置num_single=0;
所述孤立像素連續次數補零模塊,用於存儲num_single=0。
本發明的另一個方面,還提供了一種使用所述編碼裝置進行編碼後的解碼裝置,所述裝置包括依次連接的初次解碼模塊、串長消除模塊、維度重建模塊,其中:
所述初次解碼模塊,用於將孤立像素解碼成串長加像素的格式,並根據累計連續個數,讀取對應個數的孤立像素,同重複像素交替組合;
所述串長消除模塊,用於根據串長以及像素,恢復像素重複的格式;
所述維度重建模塊,用於根據記錄的圖像各維度上的像素個數,恢復像素的原始分布格式。
優選地,所述初次解碼模塊具體包括依次連接的孤立像素長度讀取模塊、讀取判定模塊、孤立像素串長添加模塊、重複像素讀取模塊、初次解碼存儲模塊,其中:
所述孤立像素長度讀取模塊,用於讀取孤立像素長度;
所述讀取判定模塊,用於判定讀取個數是否小於總孤立像素總數;
所述孤立像素串長添加模塊,用於按照讀取的孤立像素個數從孤立像素存儲區域中提取相應個數的像素,並在各孤立像素前補充「1」,表示該孤立像素的串長;
所述重複像素讀取模塊,用於讀取重複像素存儲區域的單個像素值以及其串長;
所述初次解碼存儲模塊,用於存儲圖像初次解碼結果;
附圖說明
圖1是本發明圖像編碼、解碼方法的流程圖;
圖2是本發明圖像編碼、解碼方法中S4的流程圖;
圖3是本發明圖像編碼、解碼方法中S5的流程圖;
圖4是本發明圖像編碼、解碼方法中S6的流程圖;
圖5是本發明圖像編碼、解碼裝置的結構示意圖;
圖6是本發明圖像編碼、解碼裝置中孤立像素存儲模塊的結構示意圖;
圖7是本發明圖像編碼、解碼裝置中重複像素編碼及孤立像素個數存儲模塊的結構示意圖;
圖8是本發明圖像編碼、解碼裝置中初次解碼模塊的結構示意圖;
圖9是本發明實施例示意圖;
具體實施方式
為了使本發明的目的、技術方案及優點更加明白清楚,以下結合附圖及實施例,對本發明進行進一步詳細說明。
請參閱圖1,圖1是本發明圖像編碼、解碼方法的流程圖,如圖1所示,所述方法包括以下步驟:
在步驟S1中,記錄圖像各維度上的像素個數,用於解碼時恢復圖像的原始維度。在本實施例原始圖像(圖9)中,橫向個數Nx=512,縱向個數Nz=512。
在步驟S2中,利用單個像素以及串長代替具有相同值的重複像素。本實施例中,圖9的初次編碼結果為37802個像素,壓縮率為6.9347:1,其中重複像素佔4568個像素,孤立像素佔33234個像素,佔初次編碼結果的87.92%,而其中孤立像素的串長具有巨大的數據冗餘。
在步驟S3中,根據串長判斷是否為重複次數為一且連續出現的孤立像素。
在步驟S4中,若步驟S3判斷正確,則在立像素存儲區域single_store只存儲具體孤立像素,並累計連續孤立像素的個數。實施例中,圖9的孤立像素二次編碼結果single_store為16617個像素。
請結合參閱圖2,圖2是本發明圖像編碼、解碼方法中步驟S4的流程圖,如圖2所示,所述步驟S4具體包括以下步驟:
在步驟S410中,在孤立像素存儲區域single_store存儲連續出現的孤立像素。該部分存儲的孤立像素需滿足兩個條件:像素的串長為1,並且串長為1的像素至少連續出現兩次。串長為1的條件保證了該像素在原始圖像中是孤立存在的,初次編碼結果相對於該原始像素存在存儲冗餘;另一方面,該類像素至少連續出現兩次,保證了該類像素的初次編碼結果具有可壓縮性。
在步驟S420中,在孤立像素長度存儲區域累計孤立像素連續出現的次數,記為num_single;在這裡,可設置該部分孤立像素出現次數初始值num_single=0,依次讀取像素的串長,若串長為1,則num_single=num_single+1。需要注意的是,該步僅是累計孤立像素連續出現的次數,並不進行存儲。
在步驟S5中,若步驟S2判斷錯誤,在重複像素存儲區域multi_store存儲該部分的串長以及像素值,並在孤立像素個數存儲區域length_store存儲累計的孤立像素個數num_single。本實施例中,圖9的重複像素的二次編碼結果multi_store為4568個像素,孤立像素個數存儲區域length_store存儲2285個像素。相比於初次編碼結果中孤立像素的16617個串長(1),二次編碼結果得到了更好的整體壓縮率:11.1693:1。
請結合參閱圖3,圖3是本發明圖像編碼、解碼方法中步驟S5的流程圖,如圖3所示,所述步驟S5具體包括以下步驟:
在步驟S510中,重複像素存儲區域multi_store存儲該部分的串長以及像素值。該部分屬於初次編碼結果中串長大於1的部分,在二次編碼過程中,直接存儲其串長跟像素值。
在步驟S520中,根據串長判斷前一像素是否為孤立像素。
在步驟S530中,若前一像素為孤立像素,表明在此像素之前,已有部分連續的孤立像素被存儲,而該像素便是上次連續孤立像素存儲的終止標誌,需要在孤立像素個數存儲區域length_store存儲之前的孤立像素個數num_single,並重置num_single=0。
在步驟S540中,若前一像素不是孤立像素,則表明前一像素跟當前像素為相鄰的非孤立像素,為了保證孤立像素同非孤立像素交替存儲,在在孤立像素個數存儲區域length_store額外存儲num_single=0,標誌該重複像素存儲之前一步存儲的孤立像素個數為0。
在步驟S6中,將孤立像素解碼成串長加像素的格式,並根據累計連續個數,讀取對應個數的孤立像素,同重複像素交替組合。需要注意的是,步驟S540中的補零操作確保了孤立像素和非孤立像素的存儲是交替進行的,這是二者可交替重組的保證。通過步驟S6得到了原始圖像初次編碼結果。
請結合參閱圖4,圖4是本發明圖像編碼、解碼方法中步驟S6的流程圖,如圖4所示,所述步驟S6具體包括以下步驟:
在步驟S610中,讀取孤立像素長度;
在步驟S620中,判斷讀取個數是否小於孤立像素總數,小於時,表明孤立像素的解碼還未結束,否則,表明孤立像素的解碼結束。
在步驟S630中,若S620判斷正確,則按照讀取的孤立像素個數從孤立像素存儲區域中提取相應個數的像素,並在各孤立像素前補充「1」,表示該孤立像素的串長;
在步驟S640中,若S620判斷正確,則讀取重複像素存儲區域的單個像素值以及其串長;
在步驟S650中,若S620判斷錯誤,則存儲圖像初次解碼結果。
在步驟S7中,根據串長以及像素,恢復像素重複的格式,比如3A——>AAA。需要注意的是,步驟S7僅恢復出了原始像素,並未恢復原始圖像的維度。
在步驟S8中,根據記錄的圖像各維度上的像素個數Nx、Nz,恢復像素的原始分布格式。
請參閱圖5,圖5是本發明圖像編碼、解碼裝置的流程圖,如圖5所示,所述裝置包括依次連接的圖像大小記錄模塊1、初次編碼模塊2、孤立像素判別模塊3、孤立像素存儲模塊4、重複像素存儲及孤立像素個數存儲模塊5、初次解碼模塊6、串長消除模塊7、維度重建模塊8、,其中所述孤立像素存儲模塊4具體包括依次連接的孤立像素存儲模塊410、孤立像素連續次數存累計模塊420,所述重複像素存儲及孤立像素個數存儲模塊5具體包括依次連接的重複像素存儲模塊510、前一串長判斷模塊520、孤立像素連續次數存儲模塊530、孤立像素連續次數補零模塊540,所述初次解碼模塊6具體包括依次連接的孤立像素長度讀取模塊610、讀取判定模塊620、孤立像素串長添加模塊630、重複像素讀取模塊640、初次解碼結束模塊650。下面具體介紹各個部分的作用:
所述圖像大小記錄模塊1,用於記錄圖像各維度上的像素個數;
所述初次編碼模塊2,用於利用單個像素以及串長代替具有相同值的重複像素;
所述孤立像素判別模塊3,用於根據串長判斷重複次數是否為一且連續出現的孤立像素;
所述孤立像素存儲模塊4,用於存儲具體孤立像素,並累計連續孤立像素的個數;
所述重複像素存儲及孤立像素個數存儲模塊5,用於保留該部分的串長以及像素值,並存儲累計的孤立像素個數;
所述初次解碼模塊6,用於將孤立像素解碼成串長加像素的格式,並根據累計連續個數,讀取對應個數的孤立像素,同重複像素交替組合;
所述串長消除模塊7,用於根據串長以及像素,恢復像素重複的格式;
所述串長消除模塊8,用於根據記錄的圖像各維度上的像素個數,恢復像素的原始分布格式。
所述孤立像素存儲模塊410,用於在孤立像素存儲區域存儲連續出現的孤立像素;
所述孤立像素連續次數累計模塊420,用於累計孤立像素連續出現的次數,記為num_single。
所述重複像素存儲模塊510,用於保留該部分的串長以及像素值;
所述前一串長判斷模塊520,用於根據串長判斷前一像素是否為孤立像素;
所述孤立像素連續次數存儲模塊530,用於存儲num_single,並重置num_single=0;
所述孤立像素連續次數補零模塊540,用於存儲num_single=0。
所述孤立像素長度讀取模塊610,用於讀取孤立像素長度;
所述讀取判定模塊620,用於判定讀取個數是否小於總孤立像素總數;
所述孤立像素串長添加模塊630,用於按照讀取的孤立像素個數從孤立像素存儲區域中提取相應個數的像素,並在各孤立像素前補充「1」,表示該孤立像素的串長;
所述重複像素讀取模塊640,用於讀取重複像素存儲區域的單個像素值以及其串長;
所述初次解碼結束模塊650,用於存儲圖像初次解碼結果。