自己的這個筆記,廢了好久,還是要堅持寫下去,雖然現在看來,質量不太高,而且很多東西貌似沒有說到位,只有自己才看得懂,明顯不是技術普及的方式。
先說基本原理,這個基本就是抄書了,因為不是做科研的,很多東西都是人們用了很多年才逐漸總結出來的。
對於算法研究而言,本身就是要先知道哪個地方可以努力,哪些地方行不通。這些原理,就是指明方向的。
一.視頻壓縮的可行性
1.空間冗余
一幅靜態圖像,比如人臉。背景,人臉,頭發等處的亮度,顏色,都是平緩變化的。相鄰的像素和色度信號值比較接近。具有強相關性,如果直接用采樣數來表示亮度和色度信息,數據中存在較多的空間冗余。如果先去除冗余數據再編碼,表示每個像素的平均比特數就會下降,這就是通常說的圖像的幀內編碼,即以減少空間冗余進行數據壓縮。
2.時間冗余
視頻是時間軸方向的幀圖像序列,相鄰幀圖像的相關性也很強。通常用降低幀間的方法來減少時間冗余。采用運動估計和運動補償的技術滿足解碼重建圖像的質量要求。
3.符號冗余
用相同碼表示概率不同的符號,會造成比特數的浪費。比如10,11,13三個數,如果我們都用1bytes來表示,就是3bytes(即3×8 = 24bits),但是如果我們表00b表示10,01b表示11,02b表示13,這樣,三個數合起來才用了6bits,較之前可以節省18bits。
可變長編碼技術的原理就如此,概論大的用較短的碼字,概率小的用較長的碼字。
4.結構冗余
對於圖像內部,各個部分也存在某種關系。我們可以通過這種關系,減少信息的碼字表達。比如:分形圖像編碼
5.視覺冗余
1),人眼對彩色信號的亮度分辨率高於色彩分辨率,比如rgb-->yuv就是這個原理
2),人眼對靜止圖像的空間的分辨率大於運動圖像的分辨率。
3),人眼對亮度的細小變化不敏感
4),中心敏感,四周不敏感。
其實我們雖然知道了這些,我們知道有冗余,但是如何把這些冗余找出來,是個很復雜的過程。也是我們的算法不斷追求的過程。
上面的一段,是所有視頻壓縮標准的基石。mpeg2,mpeg4,h264,h265這些標准,與其說他們是標准,不如他們提供了一些算法的組合,或簡單或復雜,當然簡單的算法壓縮掉的冗余小,復雜的壓縮掉的冗余大。通過算法找到冗余信息在哪,然后壓縮掉,實現數據量的減小。這就是我們的目錄。
更近一步的說,就是我們如何找出數據的相關性。
二,常見算法的名詞解釋
大的分類有兩種,一個變換,一個是編碼。
先說變換
我們要找出信號的相關性,時間上不好找怎么辦,變換到另外一個空間上去。這就是我們在信號與系統,數字信號處理,高等數學得到的結論
變換
傅里葉變換
walsh-hadamard(沃爾什哈達瑪變換)
正弦變換
余弦變換----應用最廣
斜變換
哈爾變換
k-L變換
小波變換
對於這些變換來說,很多東西只在數學上有意義,對於工程來說,或者沒有快速算法,或者變換后相關性比較低,或者其他原因。只有余弦變換是最最廣泛的,為了減小我們的學習壓力(當然如果你是要對比其中的差異的另當別論),我們只掌握余弦變換就可以了。
編碼
又分無失真編碼與限失真編碼,從名字上我們就可以看出差異了。呵呵,不多解釋
無失真編碼的種類:
哈夫曼編碼,算術編碼,游程編碼
限失真編碼
預測編碼,變換編碼,矢量量化,基於模型的編碼。
對於編碼這塊,上述的算法,基本要全部掌握才行。
jpeg/mpeg2先用了游程編碼減小的0這個數占用的比特位,然后用了哈夫曼壓縮。
h264用了算術編碼來做最后一道壓縮工序
運動補償與運動估計,用到預測編碼。
mpeg4用到了基於模型的編碼
變換完成后,進行了矢量量化。