RGB24轉YUV422轉換算法


注:1:相關圖像知識請參考相關網站。推薦:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html

  2:本文轉換算法基於:《YUV422到RGB24的轉換算法》 引用地址:http://wenku.baidu.com/link?url=CPytux0pXwjAhmwz6dd3JBsSVSpYXG8Jt07VWNYoZ6ibRJQxVDtOFpqIEGyRv17ZO5DsfBQZl9Kg8WNrJgDveiFccQT581hyzwZzLKKn1-K

RGB24即RGB888,YUV422即YCbCr422。

RGB888碼流格式為:R[7:0] G[7:0] B[7:0]. YCbCr422的碼流格式為:Y0 Cb Y1 Cr.

在轉換的過程中,需要完成兩個步驟:第一步,將RGB24轉換成YUV444,在這個轉換過程中,不會有任何的像素損失。第二步,將YUV444轉換成YUV422,轉換思想為抽取Cb與Cr。這種圖像標准相比於YUV444,損耗像素33.3%。

第一步:RGB24轉換成YUV444,可以依據公式:

 

轉換以后的圖像即為YUV444。

第二步:YUV444轉YUV422

  對於YUV444來說,一個Y對應一個U和一個V,其中Y U V為一一對應的關系,即由每對RGB轉化而來的。在每一個像素單元,由48bit組成兩個像素,每個像素24bit.

  對於YUV422來說,兩個Y對應一個U和一個V,其中Y0 U V為一一對應的關系,即Y0 U V是第一對RGB轉化而來的,而第二對RGB僅僅轉化成Y1。這樣,兩個像素共有32bit.第一個像素點24bit,第二個像素點8bit.

根據YUV444和YUV422的碼流做如下定義:

YUV444碼流: Y0 U0 V0 Y1 U1 V1

YUV422碼流: Y0 U0 Y1 V0

 

這部分主要做像素抽取,即YUV422不采樣YUV444 U1 V1的數據,所以會損失像素點。

YUV444[i]    =  YUV422[j]          

YUV444[i+1]   =  YUV422[j+1]

YUV444[i+2]       =      YUV422[j+3]

YUV444[i+3]       =      YUV422[j+2]

 

在YUV422轉YUV444的時候,這部分主要做像素復制,將U0 V0的值復制到U1 V1。

YUV444[i]    =  YUV422[j]          

YUV444[i+1]   =  YUV422[j+1]

YUV444[i+2]       =      YUV422[j+3]

YUV444[i+3]       =      YUV422[j+2]

YUV444[i+4]       =      YUV422[j+1]

YUV444[i+5]       =  YUV422[j+3]

所有的轉換,都必須基於相應格式的碼流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM