本發明涉及視頻處理領域,具體涉及一種脈沖視頻編碼、解碼方法。
背景技術:
1、脈沖視頻與傳統拍攝方法不同,它采用積分比較機制,積分器可以累積光電轉換器輸出的電荷,比較器按照固定的時間間隔比較積分器上的電荷與預設的閾值,如果積分器上累積的電荷達到了預設的閾值,則輸出1并清空積分器上的電荷,如果積分器上的電荷沒有達到預設的閾值,則輸出0并保持積分器上的電荷。可見,這種方法與傳統的拍攝方法有很大的不同。傳統的拍攝方法是按照固定的時間間隔提取積分器上的電荷,無論電荷多少,都會清空積分器上的電荷。
2、傳統拍攝方法會把提取到的電荷數作為該積分器對應像素的亮度。在數字攝影時代,該亮度會被量化成一個整數,用8個比特或更多比特來表示。這就帶來兩個問題:第一,需要處理器具有非常高的靈敏度。因為在高速攝影時,信號會分攤到所有的時間間隔上,每個時間間隔采集到的信號會變得很弱;第二,需要處理器具有非常高的數據處理速度。因為高速攝影時,數據量和幀速率成正比。
3、脈沖視頻則較好的克服了傳統高速攝影的兩個問題。第一,脈沖視頻不需要提取每個時間間隔的信號的具體強度,只需比較信號強度(電荷數)與預設閾值的大小。第二,每個時間間隔每個像素只生成1個比特數據,降低了數據量。
4、由于脈沖視頻的采樣頻率很高,雖然每個像素在每個時刻采樣只輸出1個比特,但是數據速率還是非常高的,需要對脈沖視頻數據進行壓縮編碼。然而,現有的一些壓縮工具主要使用的是一些通用的數據壓縮算法,如霍夫曼編碼、lz77編碼、lz78編碼和lzw編碼等。這些編碼方法通常會對整個數據進行分析,然后對出現頻率高的數據進行更短的編碼,從而達到壓縮的效果。這對于脈沖視頻的壓縮率并不高。
技術實現思路
1、為解決上述問題,本發明提供一種脈沖視頻編碼、解碼方法。
2、本發明第一方面公開了一種脈沖視頻編碼方法,包括:
3、獲取采集于多個連續采樣時刻的目標脈沖視頻;
4、將所述目標脈沖視頻中每個像素位置在各個采樣時刻的數據按照時間排序,得到每個所述像素位置的像素比特串;
5、根據所述像素比特串的值,將其劃分為若干個子串;
6、對于每個所述像素位置,根據每個所述子串的長度及所有子串數量進行編碼,得到其對應的像素編碼;
7、將所有所述像素位置對應的所述像素編碼按照像素位置排序順序進行排列,得到像素編碼集合;
8、將所述目標脈沖視頻的寬度、所述目標脈沖視頻的高度、所述采樣時刻數量,編碼為長度為第一長度的基礎數據編碼;
9、將所述像素編碼集合連接于所述基礎數據編碼之后,得到所述目標脈沖視頻的編碼數據。
10、進一步的,所述根據所述像素比特串的值,將其劃分為若干個子串的步驟包括:
11、遍歷所述像素比特串,查找其中所有的第一比特;
12、根據每個所述第一比特的位置,按照預設的劃分方式將所述像素比特串劃分為若干個子串。
13、進一步的,所述根據每個所述第一比特的位置,按照預設的劃分方式將所述像素比特串劃分為若干個子串的步驟包括:
14、檢測所述像素比特串的結束位置的比特值是否為第一比特:
15、若是第一比特,則按照每個所述第一比特之后的位置進行分割的劃分方式,將所述像素比特串劃分為若干個子串;
16、若不是第一比特,則在所述像素比特串的結束位置后添加所述第一比特,再按照每個所述第一比特之后的位置進行分割的劃分方式,將所述像素比特串劃分為若干個子串。
17、進一步的,所述對于每個所述像素位置,根據每個所述子串的長度及所有子串數量進行編碼,得到其對應的像素編碼的步驟包括:
18、對于每個所述像素位置:
19、將其對應的子串數量進行編碼,得到數量編碼,其中,所述數量編碼的長度為預設的第二長度;
20、根據每個所述子串與其相鄰子串的長度變化,編碼得到子串編碼集合;
21、將所述數量編碼與所述子串編碼集合拼接,得到所述像素位置對應的像素編碼。
22、進一步的,所述根據每個所述子串與其相鄰子串的長度變化,編碼得到子串編碼集合的步驟包括:
23、對第一個所述子串,將其長度進行編碼,得到其對應的子串編碼;
24、對于其他所述子串,將其長度相對于前一個所述子串的長度的變化進行編碼,得到其對應的子串編碼;
25、將所有所述子串編碼拼接得到子串編碼集合;
26、其中,每個所述子串編碼的長度均為預設的第三長度。
27、本發明第二方面公開了一種脈沖視頻解碼方法,包括:
28、獲取編碼數據;
29、從所述編碼數據的起始位置獲取長度為第一長度的數據,作為基礎數據編碼,將所述編碼數據剩余的數據作為像素編碼集合;
30、對所述基礎數據編碼進行解碼,得到目標脈沖視頻的寬度、所述目標脈沖視頻的高度、所述目標脈沖視頻的采樣時刻數量;
31、將所述像素編碼集合解碼拆分為多個像素編碼的數量編碼和子串編碼,每個像素編碼對應一個像素位置;
32、對每個所述像素編碼進行解碼,得到每個所述像素位置對應的多個子串;
33、將每個像素位置對應的所有所述子串,進行拼接,得到每個像素位置的像素比特串;
34、根據所述目標脈沖視頻的寬度、所述目標脈沖視頻的高度、所述目標脈沖視頻的采樣時刻數量,將所有像素位置的所述像素比特串進行解碼,生成所述目標脈沖視頻。
35、進一步的,將所述像素編碼集合解碼拆分為多個像素編碼的數量編碼和子串編碼的步驟包括:
36、對所述像素編碼集合循環執行以下步驟:
37、從起始位置開始,讀取長度為第二長度的數據作為數量編碼;
38、將所述數量編碼進行解碼,得到子串數量m;
39、讀取m個長度為第三長度的數據,作為m個子串編碼,并將m個子串編碼之后的位置更新為起始位置。
40、進一步的,對每個所述像素編碼進行解碼,得到每個所述像素位置對應的多個子串的步驟包括:
41、對每個所述像素編碼中的多個子串編碼進行解碼,得到每個所述子串相對于其相鄰所述子串的長度變化信息;
42、基于每個所述子串相對于其相鄰所述子串的長度變化信息,計算得到每個所述子串的長度;
43、根據預設的劃分方式及各個所述子串的長度,將第一比特填寫入對應的子串,得到每個所述像素位置對應的多個子串。
44、進一步的,所述根據預設的劃分方式及各個所述子串的長度,將第一比特填寫入對應的子串,得到每個所述像素位置對應的多個子串的步驟包括:
45、根據預設的劃分方式及各個所述子串的長度,將第一比特填寫入對應的子串;
46、判斷每個所述像素位置對應的所有所述子串的長度之和,是否超過所述采樣時刻數量;
47、當超過時,根據所述劃分方式,將對應的最后一個所述子串的數據進行校正。
48、進一步的,根據預設的劃分方式及各個所述子串的長度,將第一比特填寫入對應的子串的特征包括:
49、根據各個所述子串的長度,將第一比特填寫入對應的子串的最后一位;
50、以及,根據所述劃分方式,將對應的最后一個所述子串的數據進行校正的步驟包括:
51、將對應的最后一個所述子串的最后一位刪除。
52、本發明通過對每個像素在各個采樣時刻的數據按照時間排序并進行子串劃分,有效地捕捉并利用脈沖視頻中的時間序列信息和像素值的連續性。這種劃分和編碼的策略實際上是在創建一種更為緊湊的信息表示方式,可以大大減少冗余數據,因此可以顯著提高脈沖視頻的壓縮率。同時,這種方法也保留了原始視頻的重要信息,使得在解碼時能夠準確地還原出原始視頻。