本身的這個筆記,廢了很久,仍是要堅持寫下去,雖然如今看來,質量不過高,並且不少東西貌似沒有說到位,只有本身才看得懂,明顯不是技術普及的方式。算法
先說基本原理,這個基本就是抄書了,由於不是作科研的,不少東西都是人們用了不少年才逐漸總結出來的。學習
對於算法研究而言,自己就是要先知道哪一個地方能夠努力,哪些地方行不通。這些原理,就是指明方向的。編碼
一.視頻壓縮的可行性spa
1.空間冗餘視頻
一幅靜態圖像,好比人臉。背景,人臉,頭髮等處的亮度,顏色,都是平緩變化的。相鄰的像素和色度信號值比較接近。具備強相關性,若是直接用採樣數來表示亮度和色度信息,數據中存在較多的空間冗餘。若是先去除冗餘數據再編碼,表示每一個像素的平均比特數就會降低,這就是一般說的圖像的幀內編碼,即以減小空間冗餘進行數據壓縮。數學
2.時間冗餘it
視頻是時間軸方向的幀圖像序列,相鄰幀圖像的相關性也很強。一般用下降幀間的方法來減小時間冗餘。採用運動估計和運動補償的技術知足解碼重建圖像的質量要求。原理
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用到了基於模型的編碼
變換完成後,進行了矢量量化。